Update deployment targets for test environment #33
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }})" | |
| } | |
| } |