Настройка CI / CD на Gitlab для проекта django - PullRequest
1 голос
/ 09 марта 2020

Я впервые пытался добавить CI / CD для проекта Django на gitlab. Я хочу настроить автоматическое c тестирование и развертывание на сервере в ветке разработки, если она прошла успешно. С тестами почти все отработано, зависимости установлены и запущены 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 Соответственно рекомендацию Руддры я добавил в 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"

И в результате я получил connect успешный статус и test статус ошибки с той же трассировкой, что и начальный вопрос

1 Ответ

1 голос
/ 09 марта 2020

На самом деле вы можете запустить MySQL как службу в GitLab. Например:

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'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...