intra_monitor/.woodpecker.yml
2026-04-14 17:42:20 +03:00

129 lines
4.8 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
environment:
BUILDKIT_PROGRESS: plain
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
cache_from:
from_secret: forgejo_image
# ❌ УБРАНО: cache_to — именно оно вызывало зависания
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}"
- latest
- "sha-${CI_COMMIT_SHA:0:8}"
cache_from:
from_secret: forgejo_image
build_args:
- "GIT_COMMIT=${CI_COMMIT_SHA:0:8}"
- "BUILDKIT_INLINE_CACHE=1"
provenance: false
sbom: false
platforms:
- linux/amd64
rewrite_timestamp: false
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