在Gitlab上为django项目设置CI / CD

时间:2020-03-09 09:40:02

标签: django gitlab

这是我第一次尝试为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)")

在django settings.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 因此,我将Ruddra建议添加到yml文件的下一行:

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"

结果,我获得了连接成功状态和测试错误 状态与回溯问题相同

1 个答案:

答案 0 :(得分: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'"