name: 构建Docker镜像 on: [ push ] jobs: build-and-deploy: env: RUNNER_TOOL_CACHE: /toolcache runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v4 - name: 构建Docker镜像 run: docker build -t dypid:latest . - name: 导出镜像 run: mkdir release && docker save -o release/dypid.tar dypid:latest && docker rmi dypid:latest - name: 安装sshpass工具 run: | apt update apt install -y sshpass - name: 部署程序到测试服务器 env: SSH_HOST: ${{ secrets.TEST_SSH_HOST }} SSH_USER: ${{ secrets.TEST_SSH_USER }} SSH_PASSWORD: ${{ secrets.TEST_SSH_PASSWORD }} DEPLOY_DIR: "/data/dypid" run: | set -ex # 上传新镜像 sshpass -p "$SSH_PASSWORD" scp -o StrictHostKeyChecking=no release/dypid.tar $SSH_USER@$SSH_HOST:/tmp/dypid.tar # 重启程序 sshpass -p "$SSH_PASSWORD" ssh -o StrictHostKeyChecking=no $SSH_USER@$SSH_HOST \ "docker load -i /tmp/dypid.tar \ && cd $DEPLOY_DIR \ && docker compose up -d \ && docker image prune -f" - name: 部署程序到生产服务器 env: SSH_HOST: ${{ secrets.SSH_HOST }} SSH_USER: ${{ secrets.SSH_USER }} SSH_PASSWORD: ${{ secrets.SSH_PASSWORD }} DEPLOY_DIR: "/data/dypid" run: | set -ex # 上传新镜像 sshpass -p "$SSH_PASSWORD" scp -o StrictHostKeyChecking=no release/dypid.tar $SSH_USER@$SSH_HOST:/tmp/dypid.tar # 重启程序 sshpass -p "$SSH_PASSWORD" ssh -o StrictHostKeyChecking=no $SSH_USER@$SSH_HOST \ "docker load -i /tmp/dypid.tar \ && cd $DEPLOY_DIR \ && docker compose up -d \ && docker image prune -f"