intra_monitor/.woodpecker.yml
2026-03-18 14:39:47 +03:00

87 lines
2.8 KiB
YAML

# ─────────────────────────────────────────────────────────────────────────────
# Woodpecker CI Pipeline
#
# Шаги:
# 1. docker-build — сборка и push образа при push в main
# 2. docker-build-tag — сборка и push образа при git tag
# 3. deploy — деплой на сервер на агенте role=work_woodpecker
#
# Секреты (Settings -> Secrets):
# forgejo_host — хост registry
# forgejo_image — полный путь образа
# forgejo_username — пользователь registry
# forgejo_token — токен для push
# ─────────────────────────────────────────────────────────────────────────────
steps:
- 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}"
build_args:
- "BUILDKIT_INLINE_CACHE=1"
when:
- event: push
branch: main
- name: docker-build-tag
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:
- "${CI_COMMIT_TAG}"
- latest
- "sha-${CI_COMMIT_SHA:0:8}"
build_args:
- "BUILDKIT_INLINE_CACHE=1"
when:
- event: tag
- name: deploy
image: docker:cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/intradesk-monitor:/deploy
commands:
- |
set -e
cp docker-compose.deploy.yml /deploy/docker-compose.yml
test -f /deploy/.env || (echo "Missing /opt/intradesk-monitor/.env on deploy host" && exit 1)
cd /deploy
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
docker compose pull
docker compose 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