feat: déploiement multi-branches avec URL par branche
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
- Déclenche le pipeline sur main, dev et ci uniquement - main → APP_DOMAIN (domaine racine, pas de préfixe) - dev/ci → branche.APP_DOMAIN (sous-domaine par branche) - Dossier de déploiement isolé par branche : /opt/g1flux/<branche>/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+35
-12
@@ -1,5 +1,8 @@
|
|||||||
when:
|
when:
|
||||||
- branch: main
|
- branch:
|
||||||
|
- main
|
||||||
|
- dev
|
||||||
|
- ci
|
||||||
event: push
|
event: push
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -88,11 +91,20 @@ steps:
|
|||||||
- name: write-env
|
- name: write-env
|
||||||
image: alpine:3.20
|
image: alpine:3.20
|
||||||
environment:
|
environment:
|
||||||
APP_DOMAIN:
|
APP_DOMAIN_BASE:
|
||||||
from_secret: app_domain
|
from_secret: app_domain
|
||||||
commands:
|
commands:
|
||||||
- env | grep -E "^(APP_DOMAIN)=" > .env.deploy
|
- |
|
||||||
- OWNER=$(echo "$CI_REPO_OWNER" | tr 'A-Z' 'a-z') && REPO=$(echo "$CI_REPO_NAME" | tr 'A-Z' 'a-z') && BRANCH=$(echo "$CI_COMMIT_BRANCH" | tr 'A-Z/' 'a-z-') && echo "COMPOSE_PROJECT_NAME=$OWNER-$REPO-$BRANCH" >> .env.deploy
|
BRANCH=$(echo "$CI_COMMIT_BRANCH" | tr 'A-Z/' 'a-z-')
|
||||||
|
if [ "$CI_COMMIT_BRANCH" = "main" ]; then
|
||||||
|
EFFECTIVE_DOMAIN="$APP_DOMAIN_BASE"
|
||||||
|
else
|
||||||
|
EFFECTIVE_DOMAIN="$BRANCH.$APP_DOMAIN_BASE"
|
||||||
|
fi
|
||||||
|
OWNER=$(echo "$CI_REPO_OWNER" | tr 'A-Z' 'a-z')
|
||||||
|
REPO=$(echo "$CI_REPO_NAME" | tr 'A-Z' 'a-z')
|
||||||
|
echo "APP_DOMAIN=$EFFECTIVE_DOMAIN" > .env.deploy
|
||||||
|
echo "COMPOSE_PROJECT_NAME=$OWNER-$REPO-$BRANCH" >> .env.deploy
|
||||||
- echo "Fichier .env.deploy cree ($(wc -c < .env.deploy) octets)"
|
- echo "Fichier .env.deploy cree ($(wc -c < .env.deploy) octets)"
|
||||||
|
|
||||||
# Etape 5b : Validation du .env.deploy
|
# Etape 5b : Validation du .env.deploy
|
||||||
@@ -120,12 +132,18 @@ steps:
|
|||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- /opt/g1flux:/opt/g1flux
|
- /opt/g1flux:/opt/g1flux
|
||||||
commands:
|
commands:
|
||||||
- cp .env.deploy /opt/g1flux/.env
|
|
||||||
- chmod 600 /opt/g1flux/.env
|
|
||||||
- cp docker-compose.yml /opt/g1flux/docker-compose.yml
|
|
||||||
- cd /opt/g1flux && docker compose stop
|
|
||||||
- |
|
- |
|
||||||
DOMAIN=$(grep '^APP_DOMAIN=' /opt/g1flux/.env | cut -d= -f2)
|
BRANCH=$(echo "$CI_COMMIT_BRANCH" | tr 'A-Z/' 'a-z-')
|
||||||
|
DEPLOY_DIR="/opt/g1flux/$BRANCH"
|
||||||
|
mkdir -p "$DEPLOY_DIR"
|
||||||
|
cp .env.deploy "$DEPLOY_DIR/.env"
|
||||||
|
chmod 600 "$DEPLOY_DIR/.env"
|
||||||
|
cp docker-compose.yml "$DEPLOY_DIR/docker-compose.yml"
|
||||||
|
cd "$DEPLOY_DIR" && docker compose stop
|
||||||
|
- |
|
||||||
|
BRANCH=$(echo "$CI_COMMIT_BRANCH" | tr 'A-Z/' 'a-z-')
|
||||||
|
DEPLOY_DIR="/opt/g1flux/$BRANCH"
|
||||||
|
DOMAIN=$(grep '^APP_DOMAIN=' "$DEPLOY_DIR/.env" | cut -d= -f2)
|
||||||
|
|
||||||
# Certificat TLS (acme.sh, idempotent)
|
# Certificat TLS (acme.sh, idempotent)
|
||||||
# Exit 0 = emis/renouvele, exit 2 = skip (cert valide), autres = erreur
|
# Exit 0 = emis/renouvele, exit 2 = skip (cert valide), autres = erreur
|
||||||
@@ -143,8 +161,11 @@ steps:
|
|||||||
docker exec sonic-acme-1 cp /etc/acme.sh/$DOMAIN/fullchain.cer /host/certs/$DOMAIN-cert.pem
|
docker exec sonic-acme-1 cp /etc/acme.sh/$DOMAIN/fullchain.cer /host/certs/$DOMAIN-cert.pem
|
||||||
docker exec sonic-acme-1 cp /etc/acme.sh/$DOMAIN/$DOMAIN.key /host/certs/$DOMAIN-key.pem
|
docker exec sonic-acme-1 cp /etc/acme.sh/$DOMAIN/$DOMAIN.key /host/certs/$DOMAIN-key.pem
|
||||||
echo "Cert TLS OK (acme exit $ACME_EXIT)"
|
echo "Cert TLS OK (acme exit $ACME_EXIT)"
|
||||||
- cd /opt/g1flux && docker compose up -d --remove-orphans
|
- |
|
||||||
- cd /opt/g1flux && docker compose ps
|
BRANCH=$(echo "$CI_COMMIT_BRANCH" | tr 'A-Z/' 'a-z-')
|
||||||
|
DEPLOY_DIR="/opt/g1flux/$BRANCH"
|
||||||
|
cd "$DEPLOY_DIR" && docker compose up -d --remove-orphans
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
# Etape 7 : Verification que le container est running
|
# Etape 7 : Verification que le container est running
|
||||||
- name: test-deploy
|
- name: test-deploy
|
||||||
@@ -154,7 +175,9 @@ steps:
|
|||||||
- /opt/g1flux:/opt/g1flux
|
- /opt/g1flux:/opt/g1flux
|
||||||
commands:
|
commands:
|
||||||
- |
|
- |
|
||||||
PROJECT=$(grep '^COMPOSE_PROJECT_NAME=' /opt/g1flux/.env | cut -d= -f2)
|
BRANCH=$(echo "$CI_COMMIT_BRANCH" | tr 'A-Z/' 'a-z-')
|
||||||
|
DEPLOY_DIR="/opt/g1flux/$BRANCH"
|
||||||
|
PROJECT=$(grep '^COMPOSE_PROJECT_NAME=' "$DEPLOY_DIR/.env" | cut -d= -f2)
|
||||||
STATUS=$(docker inspect --format '{{.State.Status}}' "$PROJECT-app" 2>/dev/null || echo "absent")
|
STATUS=$(docker inspect --format '{{.State.Status}}' "$PROJECT-app" 2>/dev/null || echo "absent")
|
||||||
echo "$PROJECT-app : $STATUS"
|
echo "$PROJECT-app : $STATUS"
|
||||||
[ "$STATUS" = "running" ] || { echo "FAIL: container non running"; exit 1; }
|
[ "$STATUS" = "running" ] || { echo "FAIL: container non running"; exit 1; }
|
||||||
|
|||||||
Reference in New Issue
Block a user