Перейти к основному содержимому

CI/CD и деплой

Система CI построена на Gitea Actions (.gitea/workflows/). Два основных сценария: ветка и тег.

Ветки → стенды

При каждом git push в любую ветку (включая master) автоматически:

  1. Собирается проект (yarn build)
  2. Публикуются Docker-образы в registry git.jt4d.ru/1vit/more/:
    • web:<branch>
    • api:<branch>
    • ingress:<branch>
  3. Разворачивается стенд на стейджинге по адресу http://<branch>.<STAGING_HOST>

Каждый стенд получает изолированную базу данных. Миграции запускаются автоматически при деплое.

При удалении ветки стенд и образы удаляются автоматически.

Теги → релизные образы

При git push тега (например v1.18.0) запускается workflow release.yaml:

  1. Собирается проект
  2. Публикуются Docker-образы с двумя тегами — именем тега и latest:
    • git.jt4d.ru/1vit/more/web:v1.18.0
    • git.jt4d.ru/1vit/more/web:latest
    • Аналогично для api и ingress

Стенд при push тега не создаётся.

Чтобы выпустить релиз:

git tag v1.18.0
git push origin v1.18.0

Продакшн-деплой

Для деплоя на продакшн используется docker-compose.production.yml. Образы берутся из Gitea registry.

Развернуть последнюю версию (latest):

PROD_HOST=example.com \
DB_HOST=db DB_USERNAME=user DB_PASSWORD=pass DB_DATABASE=mydb \
docker compose -f docker-compose.production.yml up -d

Развернуть конкретную версию:

TAG=v1.18.0 PROD_HOST=example.com \
DB_HOST=db DB_USERNAME=user DB_PASSWORD=pass DB_DATABASE=mydb \
docker compose -f docker-compose.production.yml up -d

После деплоя не забыть прогнать миграции:

docker exec 1vit_more_prod_api node_modules/.bin/typeorm migration:run -d data-source.js