GitHub Actions 自动化 CI/CD 全流程指南(含部署)

一、CI/CD 让发布不再痛苦

每次手动打包、上传、重启,既慢又容易出错。用 GitHub Actions 把这套流程自动化,push 代码即触发构建部署,本文给一套可直接抄的模板。

二、核心概念

  • Workflow:一个自动化流程,存放在 .github/workflows/
  • Job:一组步骤,可并行或依赖。
  • Step:具体执行命令。
  • Runner:执行环境(GitHub 托管或自托管)。

三、一个 Java 项目 CI 模板

name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with: { java-version: '17', distribution: 'temurin' }
      - run: mvn -B package
      - uses: actions/upload-artifact@v4
        with: { name: app, path: target/*.jar }

四、加个 CD:自动部署到服务器

  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v4
        with: { name: app }
      - name: scp to server
        uses: appleboy/scp-action@v1
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.KEY }}
          source: "*.jar"
          target: "/opt/app/"
      - name: restart
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.KEY }}
          script: systemctl restart myapp

五、常用技巧

  • 缓存依赖actions/cache 缓存 Maven/~/.m2,构建提速明显。
  • 矩阵构建matrix: { java: [17, 21] } 多版本验证。
  • 条件触发on: { push: { branches: [main] } } 只跑主分支。

六、踩坑提示

  • 密钥放 Settings → Secrets,别硬编码。
  • 自托管 Runner 注意安全,别让公开仓库跑特权脚本。
  • 超时默认 6 小时,长构建设 timeout-minutes

结语

CI/CD 的价值不在酷,在于”稳定可重复”。先把构建自动化,再逐步加部署,循序渐进。

上一篇 宝塔面板 vs Docker:哪种部署方式更适合你?