# ───────────────────────────────────────────────────────────────────────────── # 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