CI/CD流水线实战:GitHub Actions构建、测试与部署的自动化配置

CI/CD流水线把代码提交、构建、测试与部署串成一条可重复执行的自动化链路,是DevOps实践的落地核心。GitHub Actions直接在仓库内用YAML文件定义流水线,无需单独搭建CI服务器,适合中小团队快速上线。本文用一份可运行的工作流配置说明触发条件、分阶段构建、镜像推送与服务器部署的实现方法,并给出失败告警与回滚的常见做法。

CI/CD流水线的工作流文件结构

GitHub Actions使用仓库.github/workflows目录下的YAML文件组织任务,一个工作流由触发事件、job与step组成。以下配置在main分支推送时触发构建与测试:


name: ci
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm run lint
      - run: npm run test
      - run: npm run build

每个job在独立环境执行,某个step失败会直接中断后续步骤,因此lint、测试与构建放在同一个job即可保证提交质量。

多阶段流水线与镜像构建推送

测试通过后进入镜像构建与推送阶段。构建镜像推送到容器镜像仓库,再由部署job拉取运行,实现构建与部署解耦:


jobs:
  docker:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/checkout@v4
      - name: 登录镜像仓库
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: 构建并推送镜像
        run: |
          docker build -t myapp:${{ github.sha }} .
          docker push ghcr.io/demo/myapp:${{ github.sha }}

服务器部署与一键回滚

部署阶段通过SSH在服务器执行拉取新镜像、健康检查、切换流量的流程,回滚时只需重新拉取上一次镜像tag:


  deploy:
    runs-on: ubuntu-latest
    needs: docker
    steps:
      - name: 部署到生产
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            docker pull ghcr.io/demo/myapp:${{ github.sha }}
            docker compose up -d app
            curl -f http://localhost:3000/healthz
      - name: 失败告警
        if: failure()
        run: echo "deploy failed, check logs and rollback"

健康检查失败时流水线标红,运维按上一次成功镜像tag回滚即可,回滚与发布共用同一条链路,避免人为操作引入二次故障。

流水线落地的常见问题

  • 不要把所有逻辑塞进一个job,拆分成build、test、deploy三个job,单步失败可单独重跑。
  • 依赖用actions/cache缓存node_modules或pip缓存,构建时间可压缩60%以上。
  • 密钥一律通过secrets注入,禁止明文写在YAML文件或日志输出中。

这套流水线跑通后,代码合并到线上部署的耗时控制在几分钟内,配合回滚流程可显著缩短故障恢复时间,适合作为团队自动化部署的起点。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/cicd-liu-shui-xian-shi-zhan-githubactions-gou-jian-ce-shi/

(0)
小编小编
上一篇 10小时前
下一篇 10小时前

相关推荐