如何通过;mysql“本地”密码;在GitHub操作中连接到MySQL服务?
我的GitHub操作配置示例:如何通过;mysql“本地”密码;在GitHub操作中连接到MySQL服务?,mysql,docker,github-actions,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="
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"
在MySQL 5.7中,它可以正常工作。但MySQL 8.0显示:
ERROR 1045 (28000): Plugin caching_sha2_password could not be loaded: ...
在MySQL docker文档中,有一行允许MySQL\u native\u密码
auth:
command: --default-authentication-plugin=mysql_native_password
如何允许GitHub操作/服务中的
mysql\u native\u密码auth插件?目前无法在GitHub操作服务工作流语法中指定命令选项,一个更简单的替代方法是使用不同的mysql映像并覆盖入口点以使用本机密码,或者使用现有映像,该映像提供了使用诸如此bitnami mysql映像之类的环境变量配置auth方法
使用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
问题在于,GH操作不会将--entrypoint
选项和相关参数移动到命令末尾,而是附加了其他选项,如env。在其后面的env
service
部分中指定的变量
在我发现了大量的尝试和错误之后,您可以指定env。手动VAR,这样的命令正在工作:
...
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:
...
你找到答案了吗@mvorisek@mdegis不幸的是,没有,仍然在寻找有聪明解决方案的人:)嘿,你解决了这个问题吗,你是如何解决这个问题的?因为没有人向GitHub提出这个问题,所以我将它添加到了。看起来这个插件也可以与原始SQL一起使用。如果我能让它工作的话,我将用标准文件夹结构中的一个SQL文件来做一个替代答案。