【问题标题】:Setting up CI/CD on Gitlab for django project在 Gitlab 上为 django 项目设置 CI/CD
【发布时间】:2020-06-21 04:25:50
【问题描述】:

这是我第一次尝试在 gitlab 上为 Django 项目添加 CI/CD。如果成功,我想设置自动测试并部署到开发分支中的服务器。 随着测试几乎一切顺利,依赖项已安装并启动python manage.py test,但测试数据库存在问题。回溯错误有点低,这里我不太明白在测试期间与数据库的交互是如何发生的。

Creating test database for alias 'default'...
 .....
 MySQLdb._exceptions.OperationalError: (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")
 The above exception was the direct cause of the following exception:
 Traceback (most recent call last):
   File "manage.py", line 21, in <module>
     main()
   File "manage.py", line 17, in main
...
     super(Connection, self).__init__(*args, **kwargs2)
 django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")

在djangosettings.py的设置中,通过.env文件中的此类变量获取到数据库的连接器。

.env

SECRET_KEY=ja-t8ihm#h68rtytii5vw67*o8=o)=tmojpov)9)^$h%9#16v&
DEBUG=True
DB_NAME=db_name
DB_USER=username
DB_PASSWORD=dbpass
DB_HOST=127.0.0.1

随着项目的部署,一切都还不清楚。非常感谢您帮助设置它。

gitlab-ci.yml

stages:
  - test
  - deploy

test:
  stage: test
  script:
  - apt update -qy
  - apt install python3 python3-pip virtualenvwrapper -qy
  - virtualenv --python=python3 venv/
  - source venv/bin/activate
  - pip install -r requirements.txt
  - python manage.py test 

stage: deploy
  script:
  ...
  ???
  only:
  - develop

UPD 因此,我在 yml 文件的下一行添加了 Ruddra 建议:

services:
- mysql

variables:
  # Configure mysql service (https://hub.docker.com/_/mysql/)
  MYSQL_DATABASE: test
  MYSQL_ROOT_PASSWORD: mysql

connect:
  image: mysql
  script:
  - echo "SELECT 'OK';" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"

结果我得到 connect 成功状态和 test 错误 与起始问题具有相同回溯的状态

【问题讨论】:

  • 您正在尝试连接到您的本地主机数据库。您需要为您的生产环境设置一个数据库,并制作一组单独的环境变量,这些变量在生产环境中是只读的
  • @Snackoverflow 你能帮我解决这个问题吗?
  • 你部署到哪里?
  • 我在 AWS 部署
  • 查看aws.amazon.com/getting-started/tutorials/create-mysql-db 了解如何在 AWS 中设置数据库。检查这里以了解有关如何仅在生产环境中加载环境变量的更多信息:stackoverflow.com/questions/10664244/…

标签: django gitlab


【解决方案1】:

实际上,您可以在 GitLab 中将 MySQL 作为服务运行。例如:

services:
  - mysql:latest

variables:
  # Configure mysql environment variables (https://hub.docker.com/_/mysql/)
  MYSQL_DATABASE: "db_name"
  MYSQL_ROOT_PASSWORD: "dbpass"
  MYSQL_USER: "username"
  MYSQL_PASSWORD: "dbpass"

更新:在您的 .env 文件中,更新以下设置:

DB_HOST=mysql

更新 2:(基于 GitLab 上的这个问题)您可以像这样更新代码:

variables:
      MYSQL_DATABASE: "db_name"
      MYSQL_ROOT_PASSWORD: "dbpass"
      MYSQL_USER: "username"
      MYSQL_PASSWORD: "dbpass"

test:
  script:
    - apt update -qy
    - 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'"

【讨论】:

  • 我收到了django.db.utils.OperationalError: (1045, 'Plugin sha256_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/sha256_password.so: cannot open shared object file: No such file or directory')
  • 这可能会有所帮助:stackoverflow.com/a/50014173/2696165
  • 是的,这个链接很有用。我改为 - mysql:5.7 但不幸的是现在出现了访问错误。 django.db.utils.OperationalError: (1045, "Access denied for user 'userlocal'@'172.17.0.3' (using password: YES)")
  • @Jekson 您也可以查看答案的 Update2 部分:)
  • 再次,请查看更新后的答案。 (基于此:stackoverflow.com/a/46873279/2696165
猜你喜欢
  • 1970-01-01
  • 2019-08-07
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2020-10-27
  • 2019-08-19
相关资源
最近更新 更多