68 lines
2.8 KiB
YAML
68 lines
2.8 KiB
YAML
|
|
# Drone CI/CD бэкенда (сервер подключён к Gitea; см. README, «CI/CD»).
|
|||
|
|
#
|
|||
|
|
# Push/PR — только проверки и сборка образа. Деплой — ТОЛЬКО ручным
|
|||
|
|
# запуском пайплайна из UI Drone (событие custom, кнопка Run Pipeline):
|
|||
|
|
# шаг deploy выполняется исключительно при нём.
|
|||
|
|
kind: pipeline
|
|||
|
|
type: docker
|
|||
|
|
name: ci-cd
|
|||
|
|
|
|||
|
|
clone:
|
|||
|
|
depth: 1
|
|||
|
|
|
|||
|
|
# Сервисная база для интеграционных тестов: схему накатывает сам шаг
|
|||
|
|
# test (cmd/migrate), тесты выполняют сценарии в транзакции и откатывают
|
|||
|
|
# их — данные в базе не остаются.
|
|||
|
|
services:
|
|||
|
|
- name: postgres
|
|||
|
|
image: postgres:16-alpine
|
|||
|
|
environment:
|
|||
|
|
POSTGRES_USER: building
|
|||
|
|
POSTGRES_PASSWORD: building
|
|||
|
|
POSTGRES_DB: building_mgmt_test
|
|||
|
|
|
|||
|
|
steps:
|
|||
|
|
- name: test
|
|||
|
|
# Полный golang-образ, не alpine: -race требует CGO и C-компилятора.
|
|||
|
|
image: golang:1.27
|
|||
|
|
environment:
|
|||
|
|
DATABASE_URL: postgres://building:building@postgres:5432/building_mgmt_test?sslmode=disable
|
|||
|
|
commands:
|
|||
|
|
- go vet ./...
|
|||
|
|
# Postgres в сервисе поднимается параллельно со сборкой шага:
|
|||
|
|
# повторяем накат, пока база не готова (30 попыток по 2 секунды).
|
|||
|
|
- ok=0; for i in $(seq 1 30); do if go run ./cmd/migrate; then ok=1; break; fi; sleep 2; done; test "$ok" = 1
|
|||
|
|
- go test -race -count=1 ./...
|
|||
|
|
- go build ./...
|
|||
|
|
|
|||
|
|
- name: lint
|
|||
|
|
image: ghcr.io/golangci/golangci-lint:v2.14.0
|
|||
|
|
commands:
|
|||
|
|
- golangci-lint run ./...
|
|||
|
|
|
|||
|
|
- name: build-api
|
|||
|
|
# Образ и два тега: latest (его поднимает compose.prod.yaml) и SHA
|
|||
|
|
# (для отката: собрать нужный коммит и перетегнуть latest вручную).
|
|||
|
|
image: plugins/docker:27
|
|||
|
|
settings:
|
|||
|
|
repo: building-mgmt-api
|
|||
|
|
tags:
|
|||
|
|
- latest
|
|||
|
|
- ${DRONE_COMMIT_SHA}
|
|||
|
|
volumes:
|
|||
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|||
|
|
|
|||
|
|
- name: deploy
|
|||
|
|
image: docker:27-cli
|
|||
|
|
volumes:
|
|||
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|||
|
|
commands:
|
|||
|
|
# -p закрепляет имя проекта: у Drone каталог клонирования свой,
|
|||
|
|
# без -p имя сети стека разъехалось бы между запусками, и web
|
|||
|
|
# перестал бы находить api. env-файл — постоянный файл на сервере.
|
|||
|
|
- docker compose version
|
|||
|
|
- docker compose -p building-mgmt --env-file /opt/building-mgmt/.env -f compose.prod.yaml up -d --wait
|
|||
|
|
when:
|
|||
|
|
event:
|
|||
|
|
- custom
|