一、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 的价值不在酷,在于”稳定可重复”。先把构建自动化,再逐步加部署,循序渐进。




