name: 构建并部署前端到测试环境 on: push: branches: - iteration/august - dev - test # 如果不再需要 main 分支触发构建,可以把下面这行删掉; # 如果只是想保留构建(不部署),可以留着,反正部署条件已经只认 iteration/august - main env: REGISTRY: registry.boss160.cn IMAGE_NAME: registry.boss160.cn/junhong/cmp-admin-web DEPLOY_DIR: /opt/junhong_cmp_web jobs: deploy: runs-on: ubuntu-latest steps: - name: 检出代码 run: | export PATH="$HOME/.nix-profile/bin:/usr/local/bin:/usr/bin:/bin:$PATH" export GIT_SSL_NO_VERIFY=1 git clone https://git.boss160.cn/luo/one-pipe-system.git . git checkout ${{ github.sha }} - name: 登录 Docker Registry run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login "${{ env.REGISTRY }}" --username "${{ secrets.REGISTRY_USERNAME }}" --password-stdin - name: 校验镜像存在 run: | if ! docker manifest inspect "${{ env.IMAGE_NAME }}:${{ github.sha }}" >/dev/null 2>&1; then echo "镜像不存在:${{ env.IMAGE_NAME }}:${{ github.sha }}" echo "请先在开发机完成 pre-push 镜像构建和推送" exit 1 fi - name: 部署到测试环境 if: github.ref == 'refs/heads/iteration/august' run: | mkdir -p "${{ env.DEPLOY_DIR }}" cp -v docker-compose.prod.yml "${{ env.DEPLOY_DIR }}/" cd "${{ env.DEPLOY_DIR }}" IMAGE_TAG=${{ github.sha }} docker compose -f docker-compose.prod.yml pull IMAGE_TAG=${{ github.sha }} docker compose -f docker-compose.prod.yml up -d echo "等待服务健康检查通过..." for i in $(seq 1 30); do WEB_HEALTH=$(docker inspect junhong-cmp-web --format='{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}' 2>/dev/null || true) if [ "$WEB_HEALTH" = "healthy" ]; then break fi if [ "$i" -eq 30 ]; then echo "前端服务在等待窗口内未恢复健康" docker compose -f docker-compose.prod.yml logs web --tail=100 exit 1 fi sleep 2 done IMAGE_TAG=${{ github.sha }} docker compose -f docker-compose.prod.yml ps - name: 构建结果通知 if: always() run: | if [ "${{ job.status }}" = "success" ]; then echo "部署成功: ${{ github.sha }}" else echo "部署失败" fi