# 5. Автоматическое развертывание (CI/CD)
Автоматическое развертывание в Яндекс.Облако описано для Gitlab CI (opens new window).
Установите CLI
Перед началом установите Yandex Cloud CLI
Копируйте примеры кода из документации
Некоторые детали в видео могли устареть
# Создание ключа сервисного аккаунта
Первым делом нужно настроить возможность выполнять действия в облаке из CI. Создайте авторизованный ключ по инструкции.
# Установка переменных окружения в Gitlab CI Variables
Откройте проект в Gitlab, перейдите в Settings / CI/CD / Variables и добавьте переменные:
YANDEX_CLOUD_KEY
с содержимым из файлаkey.json
. Установите тип переменнойfile
YANDEX_CLOUD_FOLDER_ID
- впишите ID облака (где взять ID облака (opens new window))
YANDEX_CLOUD_REGISTRY
- впишите адрес registry (например,cr.yandex/adjkfasjfhjksadf
)YANDEX_CONTAINER_NAME
- впишите название serverless container, созданного ранее- Установите другие переменные окружения, необходимые для проекта
- например, для подключения к БД (
DB_NAME
,DB_USER
,DB_HOST
,DB_PASSWORD
)
- например, для подключения к БД (
# Убрать запуск миграции из Dockerfile
Ранее запуск миграций был поставлен в CMD
в Dockerfile
, чтобы они запускались при старте контейнера.
В связи с тем, что сейчас появляется автоматический способ развертывания, нужно миграции перенести в CI и убрать их из контейнера. Таким образом, контейнер будет запускаться быстрее.
Уберите команду миграции из CMD
в Dockerfile
, далее мы добавим ее в CI.
# Настройка конфигурации CI
В коде проекта создайте файл .gitlab-ci.yml
. В шаблоне есть комментарии, сделайте замены, если это необходимо.
stages:
- deploy
deploy_cloud:
image: atnartur/yc:latest
stage: deploy
script:
# устанавливаем ключ сервисного аккаунта
- yc config set service-account-key $(echo $YANDEX_CLOUD_KEY)
# устанавливаем ID каталога
- yc config set folder-id $YANDEX_CLOUD_FOLDER_ID
# настраиваем подключение к Yandex Cloud Registry
- yc container registry configure-docker
# собираем образ
# (поменяйте путь до докерфайла после флага -f, если это необходимо)
- docker build -t $YANDEX_CLOUD_REGISTRY/app:latest -f Dockerfile .
# отправляем образ в registry
- docker push $YANDEX_CLOUD_REGISTRY/app:latest
# вытаскиваем service account id из ключа
- export SERVICE_ACCOUNT_ID=$(yc config get service-account-key | grep service_account_id | awk '{print $2}')
# запускаем миграции, чтобы не запускать их при старте контейнера
- >
docker run --rm
--env DB_NAME=$DB_NAME
--env DB_USER=$DB_USER
--env DB_HOST=$DB_HOST
--env DB_PASSWORD=$DB_PASSWORD
$YANDEX_CLOUD_REGISTRY/app:latest
python manage.py migrate
# обновляем контейнер и прокидываем переменные окружения с параметрами подключения к БД
# (они должны быть также установлены в Gitlab CI Variables)
- >
yc serverless container revision deploy
--image $YANDEX_CLOUD_REGISTRY/app:latest
--container-name $YANDEX_CONTAINER_NAME
--service-account-id $SERVICE_ACCOUNT_ID
--core-fraction 5
--execution-timeout 30s
--environment DB_NAME=$DB_NAME
--environment DB_USER=$DB_USER
--environment DB_HOST=$DB_HOST
--environment DB_PASSWORD=$DB_PASSWORD
> /dev/null
# если в приложении есть еще какие-нибудь переменные окружения, прокиньте их здесь
tags:
# тег раннера, где будут запускаться сборки
# (обычно менять не нужно, но если что, он находится здесь)
- unienv_shared
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Источники
- Авторизация в
yc
с помощью сервисного аккаунта (opens new window) - Деплой новой версии контейнера: инструкция (opens new window), параметры в cli (opens new window)