GItHub CICD 配置示例¶
在项目根目录创建
.github/workflows/文件夹mkdir -p .github/workflows/
创建文件
vim .github/workflows/ci.ymlname: dotnet package on: push: branches: - master jobs: build: name: Build runs-on: ubuntu-latest # services: # mysql: # image: mysql:5.7 # env: # MYSQL_ALLOW_EMPTY_PASSWORD: yes # MYSQL_DATABASE: laravel # ports: # - 3306:3306 # options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v2 - name: Setup dotnet uses: actions/setup-dotnet@v1 with: dotnet-version: '6.0.x' - run: | dotnet --version dotnet publish tj-financing/src/Tank.Financing.DbMigrator/Tank.Financing.DbMigrator.csproj --configuration Release -o build/DbMigrator dotnet publish tj-financing/src/Tank.Financing.Web/Tank.Financing.Web.csproj --configuration Release -o build/Web docker build -t tank_financing -f .github/workflows/Dockerfile . docker tag tank_financing hoopoxtest/tank_financing_test docker login -u ${{ secrets.DOCKER_TEST_USER }} -p ${{ secrets.DOCKER_TEST_PASSWORD }} docker push hoopoxtest/tank_financing_test curl ${{ secrets.DEPLOY_TEST_SERVER_URL }}
创建文件
.github/workflows/DockerfileFROM mcr.microsoft.com/dotnet/sdk:6.0 WORKDIR /app COPY ./build /app/build COPY ./.github/workflows/start.sh /app ENTRYPOINT ["/bin/sh", "/app/start.sh"]
创建文件
.github/workflows/start.sh#!/bin/bash cd /app/build/DbMigrator dotnet Tank.Financing.DbMigrator.dll sleep 2 cd /app/build/Web dotnet Tank.Financing.Web.dll
在GitHub仓库设置中配置
Secrets添加参数:
DEPLOY_TEST_SERVER_URL:触发服务自动部署URLDOCKER_TEST_PASSWORD:DOCKER中央仓库用户密码DOCKER_TEST_USER:DOCKER中央仓库用户名

主机配置
部署脚本
deploy.sh#!/bin/bash docker stop tank_test docker rm tank_test docker rmi hoopoxtest/tank_financing_test docker run -itd --name tank_test -p 44366:44366 -p 5000:5000 \ -v /opt/tank_financing_test/Web/appsettings.json:/app/build/Web/appsettings.json \ -v /opt/tank_financing_test/DbMigrator/appsettings.json:/app/build/DbMigrator/appsettings.json \ -v /opt/tank_financing_test/Logs/logs.txt:/app/build/Web/Logs/logs.txt \ -v /etc/localtime:/etc/localtime hoopoxtest/tank_financing_test
触发自动部署脚本
api.pyimport flask import json import subprocess from flask import request key = 'xxxxxxxx' # 创建一个服务,把当前这个python文件当做一个服务 server = flask.Flask(__name__) @server.route('/xxxxxxxx', methods=['get', 'post']) def info(): token = request.values.get('token') if token == key: command = subprocess.Popen(["/bin/bash", "/opt/tank_financing_test/deploy.sh"]) out, err = command.communicate() result = {"data": err, "code": 200, "msg": "success"} return json.dumps(result, ensure_ascii=False) else: res = {"data": {}, 'code': 10001, 'message': 'invalid parameter'} return json.dumps(res, ensure_ascii=False) if __name__ == '__main__': # 指定端口、host,0.0.0.0代表不管几个网卡,任何ip都可以访问 # 在浏览器访问 http://127.0.0.1:56478/xxxxxxxx?token=xxxxxxxx 进行测试 server.run(debug=True, port=56478, host='0.0.0.0')