intra_monitor/.woodpecker.yml
2026-04-14 17:50:06 +03:00

111 lines
5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ─────────────────────────────────────────────────────────────────────────────
# Woodpecker CI Pipeline
#
# Шаги:
# 1. docker-build — сборка и пуш образа (push в main)
# 2. docker-build-tag — сборка и пуш образа с semver-тегом (git tag v*)
# 3. deploy — деплой на сервер (выполняется на агенте role=work_woodpecker)
#
# Секреты (Settings → Secrets репозитория):
# forgejo_host — хост реестра, например git.example.com
# forgejo_image — полный путь образа, например git.example.com/user/intradesk-monitor
# forgejo_username — логин (обычно = gitea.actor)
# forgejo_token — токен с правом package:write
# ─────────────────────────────────────────────────────────────────────────────
steps:
# ── 1а. Сборка при push в main ─────────────────────────────────────────────
- name: docker-build
image: woodpeckerci/plugin-docker-buildx
settings:
registry:
from_secret: forgejo_host
repo:
from_secret: forgejo_image
username:
from_secret: forgejo_username
password:
from_secret: forgejo_token
tags:
- latest
- "sha-${CI_COMMIT_SHA:0:8}"
# Берём inline-кэш из latest; ARG GIT_COMMIT теперь в конце Dockerfile — кэш не сбивается
cache_from:
from_secret: forgejo_image
# mode=max кэширует все промежуточные слои (apk, npm install) в отдельный манифест
cache_to:
from_secret: forgejo_image_cache # значение: <registry>/<repo>:buildcache
rewrite_timestamp: false
build_args:
- "GIT_COMMIT=${CI_COMMIT_SHA:0:8}"
- "BUILDKIT_INLINE_CACHE=1"
when:
- event: push
branch: main
# ── 1б. Сборка при git tag v* (semver) ────────────────────────────────────
- name: docker-build-tag
image: woodpeckerci/plugin-docker-buildx
settings:
registry:
from_secret: forgejo_host
repo:
from_secret: forgejo_image_2
username:
from_secret: forgejo_username
password:
from_secret: forgejo_token
tags:
- "${CI_COMMIT_TAG}" # v1.2.3
- latest
- "sha-${CI_COMMIT_SHA:0:8}" # всегда — нужно для отката
cache_from:
from_secret: forgejo_image # значение: git.example.com/user/intradesk-monitor:latest
build_args:
- "GIT_COMMIT=${CI_COMMIT_SHA:0:8}"
- "BUILDKIT_INLINE_CACHE=1"
when:
- event: tag
# ── 2. Деплой на продакшн-сервер ──────────────────────────────────────────
# Выполняется на Woodpecker-агенте с меткой role=work_woodpecker.
# Требует: репозиторий помечен «trusted» в настройках Woodpecker-сервера
# (иначе монтирование volumes запрещено).
- name: deploy
image: docker:cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/intra_monitor:/deploy
commands:
- |
set -e
cd /deploy
# Проверяем наличие .env на сервере
test -f .env || (echo "Missing /opt/intra_monitor/.env on deploy host" && exit 1)
# Сохраняем ID текущего образа (для отката)
CONTAINER=$(docker compose ps -q intradesk-monitor 2>/dev/null | head -1)
if [ -n "$CONTAINER" ]; then
OLD_IMAGE=$(docker inspect --format='{{.Image}}' "$CONTAINER")
printf '%s' "$OLD_IMAGE" > .previous_image
echo "Snapshot for rollback: $OLD_IMAGE"
fi
# Удаляем legacy-контейнер со статичным именем, чтобы избежать name conflict
if docker ps -a --format '{{.Names}}' | grep -Eq '^intradesk-monitor$'; then
docker rm -f intradesk-monitor || true
fi
# Обновляем образ и перезапускаем
docker compose -p intradesk-monitor pull
docker compose -p intradesk-monitor up -d --remove-orphans
echo "Deployed: ${CI_COMMIT_SHA:0:8} (${CI_COMMIT_MESSAGE})"
labels:
role: work_woodpecker
when:
- event: push
branch: main
- event: tag