test
This commit is contained in:
@@ -1,17 +1,20 @@
|
||||
name: Build & Push Docker Image
|
||||
name: Build & Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- staging
|
||||
- dev
|
||||
|
||||
env:
|
||||
REGISTRY: git.severostudio.ru
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
build:
|
||||
name: Build & Push
|
||||
runs-on: master-builder
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -33,5 +36,85 @@ jobs:
|
||||
context: .
|
||||
push: true
|
||||
tags: |
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||
|
||||
deploy:
|
||||
name: Deploy
|
||||
runs-on: master-builder
|
||||
needs: build
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Encode Docker Stack
|
||||
id: stack
|
||||
run: |
|
||||
echo "content=$(base64 -w 0 docker-stack.yml)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Deploy via SSH
|
||||
uses: appleboy/ssh-action@v1
|
||||
env:
|
||||
BRANCH: ${{ github.ref_name }}
|
||||
REGISTRY: ${{ env.REGISTRY }}
|
||||
IMAGE_NAME: ${{ env.IMAGE_NAME }}
|
||||
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
|
||||
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
||||
STACK_FILE: ${{ steps.stack.outputs.content }}
|
||||
with:
|
||||
host: ${{ secrets.DEPLOY_HOST }}
|
||||
username: ${{ secrets.DEPLOY_USER }}
|
||||
key: ${{ secrets.DEPLOY_SSH_KEY }}
|
||||
envs: BRANCH,REGISTRY,IMAGE_NAME,REGISTRY_USERNAME,REGISTRY_PASSWORD,STACK_FILE
|
||||
script: |
|
||||
set -e
|
||||
|
||||
IMAGE="${REGISTRY}/${IMAGE_NAME}:${BRANCH}"
|
||||
DEPLOY_DIR="/opt/${IMAGE_NAME}/${BRANCH}"
|
||||
STACK_NAME="$(echo "${IMAGE_NAME}" | tr '/' '-')-${BRANCH}"
|
||||
|
||||
echo "=== Deployment ==="
|
||||
echo "Branch: ${BRANCH}"
|
||||
echo "Image: ${IMAGE}"
|
||||
echo "Directory: ${DEPLOY_DIR}"
|
||||
echo "Stack: ${STACK_NAME}"
|
||||
|
||||
mkdir -p "${DEPLOY_DIR}"
|
||||
|
||||
echo "${STACK_FILE}" | base64 -d > "${DEPLOY_DIR}/docker-stack.yml"
|
||||
|
||||
echo "${REGISTRY_PASSWORD}" | docker login "${REGISTRY}" \
|
||||
-u "${REGISTRY_USERNAME}" \
|
||||
--password-stdin
|
||||
|
||||
docker pull "${IMAGE}"
|
||||
|
||||
export IMAGE="${IMAGE}"
|
||||
|
||||
docker stack deploy \
|
||||
--compose-file "${DEPLOY_DIR}/docker-stack.yml" \
|
||||
--with-registry-auth \
|
||||
"${STACK_NAME}"
|
||||
|
||||
echo "=== Services ==="
|
||||
docker stack services "${STACK_NAME}"
|
||||
|
||||
gc:
|
||||
name: Docker GC
|
||||
runs-on: master-builder
|
||||
needs:
|
||||
- build
|
||||
- deploy
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Cleanup builder
|
||||
run: |
|
||||
docker container prune -f
|
||||
docker image prune -af
|
||||
docker builder prune -af || true
|
||||
|
||||
echo "=== Docker disk usage ==="
|
||||
docker system df
|
||||
df -h /
|
||||
|
||||
Reference in New Issue
Block a user