我尝试使用CI/CD gitlab来设置django项目的自动测试。问题是,我无法以任何方式连接到Mysql数据库。
gitlab-ci.yml
services:
- mysql:5.7
variables:
MYSQL_DATABASE: "db_name"
MYSQL_ROOT_PASSWORD: "dbpass"
MYSQL_USER: "username"
MYSQL_PASSWORD: "dbpass"
stages:
- test
test:
stage: test
before_script:
- apt update -qy && apt-get install -qqy --no-install-recommends default-mysql-client
- mysql --user=$MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DATABASE --host=$MYSQL_HOST --execute="SHOW DATABASES; ALTER USER '$MYSQL_USER'@'%' IDENTIFIED WITH mysql_native_password BY '$MYSQL_PASSWORD'"
script:
- apt update -qy
- apt install python3 python3-pip virtualenvwrapper -qy
- virtualenv --python=python3 venv/
- source venv/bin/activate
- pwd
- pip install -r requirement.txt
- python manage.py test apps
使用此文件配置时,出现错误
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
我都做了些什么
添加到mysql
脚本tcp连接代替套接字
mysql --protocol=TCP --user=$MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DATABASE --host=$MYSQL_HOST --execute="SHOW DATABASES; ALTER USER '$MYSQL_USER'@'%' IDENTIFIED WITH mysql_native_password BY '$MYSQL_PASSWORD'"
在这种情况下我得到了
ERROR 2002 (HY000): Can't connect to MySQL server on 'localhost' (99)
如何正确设置?
3条答案
按热度按时间but5z9lq1#
您的问题可能有多种原因:
mysql:5.7
代替mysql:latest
variables
中添加MYSQL_HOST
,并使用MySQL服务器的主机名(在services
键中使用mysql:5.7
时,应为mysql
).gitlab-ci.yml
的variables
部分中的凭证,并与Django的settings.py
进行比较,它们应该是相同的。mysql-client
,检查是否可以连接。下面是一个示例
script
,它安装MySQL客户端并连接到基于debian的映像(或python:latest
映像)中的数据库:下面是一个完整有效的示例,说明如何使用MySQL 5.7作为服务,并成功连接到MySQL数据库,其中
python
映像安装了mysql-client
:r1zhe5dt2#
您需要使用服务名作为数据库主机名。在本例中,
MYSQL_HOST
应为mysql
。您可以在Gitlab页面上查看示例并了解服务如何链接到作业
nimxete23#
我看到有一个可以接受的答案,但是
mysql 8.0
和python3:buster
有些东西坏了。Python Debian
映像随mariadb
一起提供,并且设置标准的mysql-client
包并不容易,导致错误:"django. db. utils.操作错误:2059,"身份验证插件..."
下面是一个可以工作的YAML,使用Ubuntu作为基础映像,
mysql 8.0
作为服务,您可以在.gitlab-ci
和test_settings
中使用root用户,也可以给MYSQL用户创建新数据库和修改现有数据库的权限。初始变量
MYSQL_DB _USER
和_PASS
可以在Gitlab
中的Settings -> CI/CD
-〉Variables下设置。.gitlab-ci.yml
: