93 lines
2.6 KiB
YAML
93 lines
2.6 KiB
YAML
# Woodpecker CI/CD
|
|
#
|
|
# Required secrets:
|
|
# forgejo_host - registry host (example: git.example.com)
|
|
# forgejo_image - full image path (example: git.example.com/user/intradesk-monitor)
|
|
# forgejo_username - registry username
|
|
# forgejo_token - registry token with package:write
|
|
|
|
steps:
|
|
# Build and push on main branch updates.
|
|
- 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}"
|
|
cache_from:
|
|
from_secret: forgejo_image
|
|
rewrite_timestamp: false
|
|
build_args:
|
|
- "GIT_COMMIT=${CI_COMMIT_SHA}"
|
|
- "BUILDKIT_INLINE_CACHE=1"
|
|
when:
|
|
- event: push
|
|
branch: main
|
|
|
|
# Build and push on Git tag (release) events.
|
|
- 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}"
|
|
cache_from:
|
|
from_secret: forgejo_image
|
|
rewrite_timestamp: false
|
|
build_args:
|
|
- "GIT_COMMIT=${CI_COMMIT_SHA}"
|
|
- "BUILDKIT_INLINE_CACHE=1"
|
|
when:
|
|
- event: tag
|
|
|
|
# Deploy for both push(main) and tag events.
|
|
- name: deploy
|
|
image: docker:27-cli
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
- /opt/intra_monitor:/deploy
|
|
commands:
|
|
- |
|
|
set -e
|
|
cd /deploy
|
|
|
|
test -f .env || (echo "Missing /opt/intra_monitor/.env on deploy host" && exit 1)
|
|
|
|
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
|
|
|
|
if docker ps -a --format '{{.Names}}' | grep -Eq '^intradesk-monitor$'; then
|
|
docker rm -f intradesk-monitor || true
|
|
fi
|
|
|
|
docker compose -p intradesk-monitor pull intradesk-monitor
|
|
docker compose -p intradesk-monitor up -d --remove-orphans
|
|
|
|
echo "Deployed commit: ${CI_COMMIT_SHA} tag: ${CI_COMMIT_TAG}"
|
|
labels:
|
|
role: work_woodpecker
|
|
when:
|
|
- event: push
|
|
branch: main
|
|
- event: tag
|