GitHub Actions
CI/CD 流水线。
GitHub Actions
这一课你将能做到
- 为 Spring Boot 项目编写一条完整的 CI 流水线:编译、测试、打包、构建镜像
- 配置 GitHub Secrets 管理密钥,让流水线自动部署到服务器
- 说清楚 push / pull_request / workflow_dispatch 等触发器的区别和使用场景
为什么要学
你现在的部署流程:本地 mvn package → scp 上传 → SSH 重启服务。问题显而易见:你休假时没人能部署;你忘了跑测试就直接上线了;你在咖啡馆用别人电脑没法部署。CI/CD(持续集成/持续部署)的核心思想:代码一旦 push 到仓库,构建、测试、部署全部自动完成,不依赖任何个人的电脑。
人话:GitHub Actions 就是 GitHub 提供的「云上脚本执行器」。你在仓库里放一个 YAML 文件描述「代码 push 后要做什么」,GitHub 就分配一台虚拟机帮你执行:拉代码 → 装 JDK → Maven 打包 → 跑测试 → 构建 Docker 镜像 → SSH 到你服务器部署。全程自动化,执行记录公开可查。
先建立图像
一条典型的 CI/CD 流水线:
git push origin main
│
▼ GitHub 检测到 push 事件
┌─────────────────────────────────┐
│ GitHub Actions Runner │
│ ┌─────────┐ ┌─────────┐ │
│ │ Job: CI │ → │ Job: CD │ │
│ │ 构建+测试│ │ 部署 │ │
│ └─────────┘ └─────────┘ │
└─────────────────────────────────┘
│ │
▼ ▼
测试报告/镜像 SSH → 服务器重启容器
核心概念关系:
Workflow(流水线)──包含──▶ Job(任务,并行跑在不同虚拟机上)
│
└──包含──▶ Step(步骤,串行执行)
│
└──▶ 每个 step 是一个 shell 命令或 Action(官方/社区封装好的操作)
跟着做
步骤 1:创建第一个 Workflow——CI(持续集成)
在仓库根目录创建 .github/workflows/ci.yml:
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
# 步骤 1:拉代码(官方 Action)
- uses: actions/checkout@v4
# 步骤 2:装 JDK 17
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven # 缓存 Maven 依赖,构建提速 5 倍
# 步骤 3:编译 + 跑测试
- name: Build and Test
run: mvn clean verify
# 步骤 4:上传构建产物(供后续 job 或人工下载)
- name: Upload JAR
uses: actions/upload-artifact@v4
with:
name: app-jar
path: target/*.jar
retention-days: 7
push 到 GitHub 后,仓库的 Actions 标签页就能看到流水线运行记录,绿勾 = 通过,红叉 = 失败(点进去看日志)。
步骤 2:加入 Docker 镜像构建与推送
在 ci.yml 中追加第二个 job:
docker:
needs: build-and-test # 依赖 CI 通过才执行
runs-on: ubuntu-latest
# 只在 main 分支 push 时才构建镜像(PR 不构建)
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- uses: actions/checkout@v4
# 登录镜像仓库(以阿里云 ACR 为例,Docker Hub 类似)
- name: Login to Registry
uses: docker/login-action@v3
with:
registry: registry.cn-hangzhou.aliyuncs.com
username: ${{ secrets.ACR_USERNAME }}
password: ${{ secrets.ACR_PASSWORD }}
# 构建并推送(利用第 6 课写的多阶段 Dockerfile)
- name: Build and Push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
registry.cn-hangzhou.aliyuncs.com/myns/myapp:latest
registry.cn-hangzhou.aliyuncs.com/myns/myapp:${{ github.sha }}
cache-from: type=gha # GitHub 缓存层,加速构建
cache-to: type=gha,mode=max