【问题标题】:.gitlab-ci mysql service in Django.gitlab-ci Django 中的 mysql 服务
【发布时间】:2021-04-06 21:42:57
【问题描述】:

我正在学习使用 Gitlab CI,我正在尝试配置 .gitlab-ci 文件以在我的 Django 项目中运行 CI。

  • 我有以下 .gitlab-ci 文件:
stages:
    - test
 
variables:
    MYSQL_DATABASE: $DB_NAME
    MYSQL_USER: $DB_USER
    MYSQL_PASSWORD: $DB_PASSWORD

services:
    - mysql:8.0

test: 
    image: alpine:3.13
    stage: test
    script:
        - ...(up the app)...
  • 我已经在gitlab中配置了环境变量(Settings -> CI/CD -> Variables),例如:

我使用 'mysql' 作为主机。参考:https://docs.gitlab.com/ee/ci/services/mysql.html

  • 我的settings.py 文件中有以下数据库配置:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': getenv('DB_NAME'),
        'USER': getenv('DB_USER'),
        'PASSWORD': getenv('DB_PASSWORD'),
        'HOST': getenv('DB_HOST'),
        'PORT': getenv('DB_PORT'),
        'TEST' : {
            'NAME' : f"test_{getenv('DB_NAME')}",
        }
    }
}

当我运行它时,所有安装都成功但在运行测试时出现以下错误:

django.db.utils.OperationalError: (2005, "Unknown MySQL server host 'mysql' (-2)")

如果在 Gitlab 文档中说如果我使用 mysql 服务是我需要配置的主机,为什么会发生这种情况?

【问题讨论】:

  • 听起来mysql 在您的 /etc/hosts 文件中没有 DNS 记录或条目。尝试使用您认为的 mysql 服务器的 IP 地址。
  • 感谢您的帮助@RedCricket 这是我的错。我已经用问题回答了这个问题。

标签: python mysql django gitlab-ci


【解决方案1】:

如果您使用的是 docker(我想它来自您的 DB_HOST),您的 Mysql 服务是否称为 mysql?从您粘贴的错误来看,django 容器(或 django 所在的任何地方)似乎无法解析主机名“mysql”。如果你在 docker 之外,也许你必须在 hosts 文件中配置 mysql 主机名。

【讨论】:

  • 是的。 Gitlab 文档说明了这一点。例如,当您有一个名为 mysql 的服务时,它必须与主机 mysql 解析,但它不起作用。
【解决方案2】:

这是我的错。我阅读了日志——尽管它们很广泛——我发现了以下几行:

2021-04-11T00:04:33.635793560Z     You need to specify one of the following:
2021-04-11T00:04:33.635798376Z     - MYSQL_ROOT_PASSWORD
2021-04-11T00:04:33.635802359Z     - MYSQL_ALLOW_EMPTY_PASSWORD
2021-04-11T00:04:33.635805957Z     - MYSQL_RANDOM_ROOT_PASSWORD

这是必要的 - 当然 - 使用 MySQL root 密码预定义变量,没有它,服务将无法运行。

我们至少需要以下变量之一来运行服务:

- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD

我在变量部分更改了我的 gitlab-ci 文件,并通过以下方式更改了指令:

variables:
    MYSQL_DATABASE: $DB_NAME
    MYSQL_USER: $DB_USER
    MYSQL_PASSWORD: $DB_PASSWORD
    MYSQL_HOST: $DB_HOST
    MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD

然后我在 CI/CD 配置(设置 -> CI/CD -> 变量)中导出了 DB_ROOT_PASSWORD 变量并且它起作用了。

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2021-06-20
    • 2018-06-02
    • 1970-01-01
    • 2020-09-30
    相关资源
    最近更新 更多