引言:为什么 CI/CD 是 Java 开发者的必备工具
现代 Java 开发离不开自动化。手动运行测试、构建 .jar 文件以及部署到服务器需要花费数小时,并且容易导致人为错误。CI/CD(持续集成/持续部署)解决了这个问题:每次提交到仓库时,系统都会自动进行检查、构建,并在需要时发送到生产环境。
GitHub Actions 是 GitHub 内置的工具,允许您直接在仓库中创建流水线。它对公共项目免费,易于与 Maven/Gradle 集成,并支持 Java 8–21。在本文中,我们将涵盖从推送触发到发布工件的完整流程。
1. GitHub Actions 基础:工作流结构
工作流是一个位于 .github/workflows/ 中的 YAML 文件。它由以下部分组成:
- 触发器(push、pull_request、schedule);
- 作业,在虚拟机(运行器)上执行;
- 每个作业中的步骤。
对于 Java 项目,典型的工作流包括设置 JDK、运行 Maven/Gradle 测试以及构建工件。
1.1. 第一个工作流:测试 Java 项目
创建一个内容如下的文件 .github/workflows/ci.yml:
name: Java CI
on: push: branches: [ "main" ] pull_request: branches: [ "main" ]
jobs: build: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn -B package --file pom.xml - name: Run tests run: mvn test这里发生了什么:
actions/checkout— 克隆仓库;setup-java— 安装 JDK 17(Temurin)并缓存 Maven 依赖;mvn package— 构建项目并运行测试;mvn test— 显式运行测试(可以与 package 合并)。
推送到 main 分支后,您将在提交旁边看到一个绿色勾选标记 — 这意味着流水线已成功运行。
2. Java 高级设置:版本矩阵和缓存
实际项目通常需要在多个 Java 版本上进行测试。GitHub Actions 支持矩阵策略。
2.1. JDK 矩阵
jobs: test: runs-on: ubuntu-latest strategy: matrix: java: [11, 17, 21] steps: - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} distribution: 'temurin' cache: maven - run: mvn test这种方法可确保您的代码与 Java 的 LTS 版本兼容。这些作业并行运行,节省了时间。
2.2. 依赖缓存
我们已经指定了 cache: maven — 这会自动缓存 ~/.m2/repository。对于 Gradle,请使用 cache: gradle。缓存可以将构建速度提高 2–3 倍。
3. 构建和发布工件(JAR/Docker)
成功测试后,您需要获取一个现成的工件。让我们看看两种常见的场景。
3.1. 将 JAR 文件上传到 GitHub 工件
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - run: mvn clean package - name: Upload JAR uses: actions/upload-artifact@v4 with: