Skip to content

Update deployment targets for test environment #33

Update deployment targets for test environment

Update deployment targets for test environment #33

Workflow file for this run

name: Backend CI/CD
on:
push:
branches:
- master
- test
jobs:
build:
runs-on: ubuntu-latest
# runs-on: self-hosted
steps:
- uses: actions/checkout@v3
- name: Set Environment Variables
id: env
run: |
if [ "${{ github.ref }}" == "refs/heads/master" ]; then
echo "ENV_TYPE=prod" >> $GITHUB_OUTPUT
echo "COMPOSE_FILE=docker-compose-prod.yml" >> $GITHUB_OUTPUT
echo "MAKE_PULL=pull_prod" >> $GITHUB_OUTPUT
echo "MAKE_RESTART=restart_prod" >> $GITHUB_OUTPUT
else
echo "ENV_TYPE=test" >> $GITHUB_OUTPUT
echo "COMPOSE_FILE=docker-compose-test.yml" >> $GITHUB_OUTPUT
echo "MAKE_PULL=pull_test" >> $GITHUB_OUTPUT
echo "MAKE_RESTART=restart_test" >> $GITHUB_OUTPUT
fi
- name: Set up SSH Key
run: |
mkdir -p ~/.ssh
echo "${{ github.ref == 'refs/heads/master' && secrets.PROD_SSH_PRIVATE_KEY || secrets.TEST_SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key
sed -i -e '$a\' ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
chmod 700 ~/.ssh
- name: Add Known Hosts
run: |
ssh-keyscan -H "${{ github.ref == 'refs/heads/master' && secrets.PROD_REMOTE_HOST || secrets.TEST_REMOTE_HOST }}" >> ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Alibaba Cloud Container Registry
uses: docker/login-action@v2
with:
registry: registry.cn-hangzhou.aliyuncs.com
username: ${{ secrets.ALI_DOCKER_USERNAME }}
password: ${{ secrets.ALI_DOCKER_PASSWORD }}
- name: Build and Push Docker Image
uses: docker/build-push-action@v4
with:
context: ./Backend
file: ./Backend/Dockerfile
push: true
# 禁用构建证明(Provenance),有时能解决上传卡死问题,且能减小镜像体积
provenance: false
tags: |
registry.cn-hangzhou.aliyuncs.com/matrix-studio/{{DOCKER_NAMESPACE}}:${{ steps.env.outputs.ENV_TYPE }}
- name: Prepare Deployment Scripts
run: |
cd Backend/
mkdir -p deploy_scripts
cp ${{ steps.env.outputs.COMPOSE_FILE }} deploy_scripts/
cp Makefile deploy_scripts/
- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.1.5
env:
SSH_PRIVATE_KEY: ${{ github.ref == 'refs/heads/master' && secrets.PROD_SSH_PRIVATE_KEY || secrets.TEST_SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ github.ref == 'refs/heads/master' && secrets.PROD_REMOTE_HOST || secrets.TEST_REMOTE_HOST }}
REMOTE_USER: root
SOURCE: Backend/deploy_scripts/*
TARGET: ${{ github.ref == 'refs/heads/master' && secrets.PROD_DEPLOY_TARGET || secrets.TEST_DEPLOY_TARGET }}/Backend
- name: Run Remote SSH Commands
uses: appleboy/ssh-action@v1.2.0
with:
host: ${{ github.ref == 'refs/heads/master' && secrets.PROD_REMOTE_HOST || secrets.TEST_REMOTE_HOST }}
username: root
key: ${{ github.ref == 'refs/heads/master' && secrets.PROD_SSH_PRIVATE_KEY || secrets.TEST_SSH_PRIVATE_KEY }}
debug: true
script: |
cd ${{ github.ref == 'refs/heads/master' && secrets.PROD_DEPLOY_TARGET || secrets.TEST_DEPLOY_TARGET }}/Backend
sudo docker login --username=${{ secrets.ALI_DOCKER_USERNAME }} --password=${{ secrets.ALI_DOCKER_PASSWORD }} registry.cn-hangzhou.aliyuncs.com
make ${{ steps.env.outputs.MAKE_PULL }}
make ${{ steps.env.outputs.MAKE_RESTART }}
sudo docker image prune -a -f
sudo docker logout registry.cn-hangzhou.aliyuncs.com
- name: 钉钉通知
if: always()
uses: zcong1993/actions-ding@master
with:
dingToken: ${{ secrets.DINGTALK_ACCESS_TOKEN }}
body: |
{
"msgtype": "markdown",
"markdown": {
"title": "CI/CD 通知",
"text": "### CI/CD 运行报告\n\n**项目**: ${{ github.repository }}\n\n**分支**: `${{ github.ref_name }}`\n\n**状态**: ${{ job.status == 'success' && '✅ 成功' || (job.status == 'failure' && '❌ 失败' || '⚠️ 取消') }}\n\n**执行人**: ${{ github.actor }}\n\n[点击查看详情](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})"
}
}