Files
Blog/.github/workflows/cd.yml
2025-10-25 08:43:42 +08:00

84 lines
3.3 KiB
YAML

# Continuous Deployment Workflow
# This workflow deploys your application to Kubernetes cluster
# Trigger: After successful CI build or manual dispatch
name: CD - Deploy to Kubernetes
on:
workflow_run:
workflows: ["CI - Build and Push"]
types:
- completed
branches:
- master
workflow_dispatch:
env:
# Kubernetes configuration
KUBECONFIG_DATA: ${{ secrets.KUBECONFIG_DATA }}
KUBERNETES_URL: ${{ secrets.KUBERNETES_URL }}
KUBERNETES_NAMESPACE: ${{ secrets.KUBERNETES_NAMESPACE }}
KUBERNETES_INGRESS_HOST: ${{ secrets.KUBERNETES_INGRESS_HOST }}
KUBERNETES_DEPLOYMENT_REPLICAS: ${{ secrets.KUBERNETES_DEPLOYMENT_REPLICAS }}
# Container registry configuration
CONTAINER_REGISTRY_URL: ${{ secrets.CONTAINER_REGISTRY_URL }}
CONTAINER_REGISTRY_USERNAME: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
CONTAINER_REGISTRY_NAMESPACE: ${{ secrets.CONTAINER_REGISTRY_NAMESPACE }}
CONTAINER_REGISTRY_PASSWORD: ${{ secrets.CONTAINER_REGISTRY_PASSWORD }}
CONTAINER_IMAGE_NAME: ${{ secrets.CONTAINER_IMAGE_NAME }}
CONTAINER_IMAGE_TAG: ${{ secrets.CONTAINER_IMAGE_TAG }}
FORCE_RESTART: ${{ secrets.KUBERNETES_FORCE_RESTART }}
# Application configuration
DATABASE_DSN: ${{ secrets.DATABASE_DSN }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
JWT_ISSUER: ${{ secrets.JWT_ISSUER }}
JWT_EXPIRES_IN: ${{ secrets.JWT_EXPIRES_IN }}
S3_REGION: ${{ secrets.S3_REGION }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }}
S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }}
S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
S3_PRESIGNED_URL_EXPIRATION: ${{ secrets.S3_PRESIGNED_URL_EXPIRATION }}
jobs:
deploy:
name: Deploy to Kubernetes
runs-on: ubuntu-latest
# Only run if CI workflow succeeded or manually dispatched
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Make CD script executable
run: chmod +x script/cd.sh
- name: Deploy to Kubernetes
run: ./script/cd.sh deploy
- name: Deployment Summary
if: success()
run: |
echo "### :white_check_mark: Deployment Successful!" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Application:** \`${CONTAINER_IMAGE_NAME}\`" >> $GITHUB_STEP_SUMMARY
echo "**Namespace:** \`${KUBERNETES_NAMESPACE}\`" >> $GITHUB_STEP_SUMMARY
echo "**Image:** \`${CONTAINER_REGISTRY_URL}/${CONTAINER_REGISTRY_NAMESPACE}/${CONTAINER_IMAGE_NAME}:${CONTAINER_IMAGE_TAG}\`" >> $GITHUB_STEP_SUMMARY
echo "**Database:** Connected" >> $GITHUB_STEP_SUMMARY
echo "**S3 Bucket:** ${S3_BUCKET}" >> $GITHUB_STEP_SUMMARY
echo "**URL:** http://${KUBERNETES_INGRESS_HOST}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "---" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Deployment Time:** $(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_STEP_SUMMARY
- name: Deployment Failed
if: failure()
run: |
echo "### :x: Deployment Failed!" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Please check the logs above for error details." >> $GITHUB_STEP_SUMMARY