staging test
This commit is contained in:
parent
873d96fa06
commit
a1ac7c343e
2 changed files with 68 additions and 20 deletions
|
|
@ -1,10 +1,10 @@
|
|||
name: Build and Deploy to Production
|
||||
name: Build and Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- fix/pipeline
|
||||
- '**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
|
@ -13,15 +13,18 @@ jobs:
|
|||
image: gcr.io/kaniko-project/executor:debug
|
||||
outputs:
|
||||
image_tag: ${{ steps.build_image.outputs.image_tag }}
|
||||
branch_slug: ${{ steps.build_image.outputs.branch_slug }}
|
||||
steps:
|
||||
- name: Build and push Docker Image using Kaniko
|
||||
id: build_image
|
||||
run: |
|
||||
# Sanitize branch name: keep only a-z0-9, lowercase
|
||||
BRANCH_SLUG=$(echo "${{ github.ref_name }}" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]//g')
|
||||
|
||||
# Tags
|
||||
SHORT_SHA=${GITHUB_SHA::8}
|
||||
IMAGE_BASE=${{ secrets.FORGEJO_REGISTRY }}/${{ secrets.FORGEJO_USER }}/czsk
|
||||
IMAGE_TAG=${IMAGE_BASE}:${SHORT_SHA}
|
||||
IMAGE_LATEST=${IMAGE_BASE}:latest
|
||||
IMAGE_TAG=${IMAGE_BASE}:${BRANCH_SLUG}-${SHORT_SHA}
|
||||
|
||||
# Auth Conf
|
||||
mkdir -p /kaniko/.docker
|
||||
|
|
@ -31,11 +34,11 @@ jobs:
|
|||
/kaniko/executor \
|
||||
--context=git://${{ secrets.FORGEJO_REGISTRY }}/${{ github.repository }}.git \
|
||||
--git=branch=${{ github.ref_name }} \
|
||||
--destination=$IMAGE_TAG \
|
||||
--destination=$IMAGE_LATEST
|
||||
--destination=$IMAGE_TAG
|
||||
|
||||
# Output the specific tag for deployment
|
||||
# Outputs
|
||||
echo "image_tag=${IMAGE_TAG}" >> $GITHUB_OUTPUT
|
||||
echo "branch_slug=${BRANCH_SLUG}" >> $GITHUB_OUTPUT
|
||||
|
||||
deploy:
|
||||
runs-on: arch-latest
|
||||
|
|
@ -48,33 +51,64 @@ jobs:
|
|||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Deploy docker-compose.yml
|
||||
uses: easingthemes/ssh-deploy@v5.1.0
|
||||
with:
|
||||
SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
|
||||
REMOTE_HOST: ${{ secrets.DEPLOY_IP }}
|
||||
REMOTE_USER: ${{ secrets.DEPLOY_USER }}
|
||||
SOURCE: "docker-compose.yml"
|
||||
TARGET: "/opt/czsk/"
|
||||
- name: Set deployment variables
|
||||
id: vars
|
||||
run: |
|
||||
BRANCH_SLUG="${{ needs.build.outputs.branch_slug }}"
|
||||
if [ "${{ github.ref_name }}" = "main" ]; then
|
||||
echo "deploy_dir=/opt/czsk" >> $GITHUB_OUTPUT
|
||||
echo "domain=czsk.it" >> $GITHUB_OUTPUT
|
||||
echo "container_name=czsk" >> $GITHUB_OUTPUT
|
||||
echo "router_name=czsk" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "deploy_dir=/opt/czsk-${BRANCH_SLUG}" >> $GITHUB_OUTPUT
|
||||
echo "domain=${BRANCH_SLUG}.staging.czsk.it" >> $GITHUB_OUTPUT
|
||||
echo "container_name=czsk-${BRANCH_SLUG}" >> $GITHUB_OUTPUT
|
||||
echo "router_name=czsk-${BRANCH_SLUG}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Deploy and update container
|
||||
uses: appleboy/ssh-action@v1.2.3
|
||||
env:
|
||||
NEW_IMAGE: ${{ needs.build.outputs.image_tag }}
|
||||
DEPLOY_DIR: ${{ steps.vars.outputs.deploy_dir }}
|
||||
DOMAIN: ${{ steps.vars.outputs.domain }}
|
||||
CONTAINER_NAME: ${{ steps.vars.outputs.container_name }}
|
||||
ROUTER_NAME: ${{ steps.vars.outputs.router_name }}
|
||||
with:
|
||||
host: ${{ secrets.DEPLOY_IP }}
|
||||
username: ${{ secrets.DEPLOY_USER }}
|
||||
key: ${{ secrets.DEPLOY_SSH_KEY }}
|
||||
envs: NEW_IMAGE
|
||||
envs: NEW_IMAGE,DEPLOY_DIR,DOMAIN,CONTAINER_NAME,ROUTER_NAME
|
||||
script: |
|
||||
cd /opt/czsk
|
||||
mkdir -p $DEPLOY_DIR
|
||||
cd $DEPLOY_DIR
|
||||
|
||||
sed -i "s|image:.*|image: $NEW_IMAGE|" docker-compose.yml
|
||||
cat > docker-compose.yml << EOF
|
||||
services:
|
||||
${CONTAINER_NAME}:
|
||||
image: ${NEW_IMAGE}
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- traefik
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.${ROUTER_NAME}.rule=Host(\`${DOMAIN}\`)"
|
||||
- "traefik.http.routers.${ROUTER_NAME}.entrypoints=websecure"
|
||||
- "traefik.http.routers.${ROUTER_NAME}.tls=true"
|
||||
- "traefik.http.routers.${ROUTER_NAME}.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.${ROUTER_NAME}.loadbalancer.server.port=80"
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
external: true
|
||||
EOF
|
||||
|
||||
docker pull $NEW_IMAGE
|
||||
docker compose up -d
|
||||
|
||||
sleep 5
|
||||
docker ps | grep czsk || exit 1
|
||||
docker ps | grep $CONTAINER_NAME || exit 1
|
||||
|
||||
echo "Deployment successful!"
|
||||
echo "Deployment successful to ${DOMAIN}!"
|
||||
|
|
|
|||
14
README.md
14
README.md
|
|
@ -0,0 +1,14 @@
|
|||
# czsk.it
|
||||
|
||||
## Deployment
|
||||
|
||||
Deployments are automatic on push via Forgejo Actions.
|
||||
|
||||
| Branch | Domain | Server Path |
|
||||
|--------|--------|-------------|
|
||||
| `main` | `czsk.it` | `/opt/czsk` |
|
||||
| `*` | `{branch}.staging.czsk.it` | `/opt/czsk-{branch}` |
|
||||
|
||||
Branch names are sanitized to `a-z0-9` only (lowercase, symbols removed).
|
||||
|
||||
**Example:** `fix1/blabla` deploys to `fix1blabla.staging.czsk.it`
|
||||
Loading…
Add table
Add a link
Reference in a new issue