如何在 GitHub Actions 中将“mysql_native_password”传递给 MySQL 服务?

Mvo*_*sek 10 mysql docker github-actions

我的 GitHub 操作配置示例:

jobs:
  unit-test:
    name: Unit Testing
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: db
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5
    steps:
      - name: Verify MySQL connection from host
        run: mysql --host mysql --port 3306 -uroot -ppassword -e "SHOW DATABASES"
Run Code Online (Sandbox Code Playgroud)

使用 MySQL 5.7 它可以工作。但是对于 MySQL 8.0,它显示:

ERROR 1045 (28000): Plugin caching_sha2_password could not be loaded: ...
Run Code Online (Sandbox Code Playgroud)

在 MySQL docker docs 中有一行允许mysql_native_password身份验证:

command: --default-authentication-plugin=mysql_native_password
Run Code Online (Sandbox Code Playgroud)

如何mysql_native_password在 GitHub Actions/service 中允许auth 插件?

Mvo*_*sek 11

问题是 GH 操作不会将--entrypoint选项和相关参数移动到命令的末尾,而是附加其他选项,如 env。env service在它之后的部分中指定的变量。

经过我发现的大量试验和错误,您可以指定 env. 手动变量,这样的命令正在工作:

...
    services:
      mysql:
        image: mysql:8
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5 -e MYSQL_ROOT_PASSWORD=xxx -e MYSQL_USER=xxx -e MYSQL_PASSWORD=xxx -e MYSQL_DATABASE=xxx --entrypoint sh mysql:8 -c "exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password"
    steps:
...
Run Code Online (Sandbox Code Playgroud)


小智 6

目前无法在 github 操作服务工作流语法中指定命令选项,一个更简单的替代方法是使用不同的 mysql 图像并覆盖入口点以使用本机密码,或使用现有图像提供使用环境变量配置身份验证方法,如这个 bitnami mysql 镜像。

使用 bitnami mysql 镜像:

    services:
      mysql:
        image: bitnami/mysql:8.0.20
        env:
          ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: abc
          MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
        ports:
          - 3306/tcp
        options: >-
          --health-cmd="mysqladmin ping" 
          --health-interval=10s 
          --health-timeout=5s 
          --health-retries=3
Run Code Online (Sandbox Code Playgroud)