Java的CI/CD:从配置到部署的GitHub Actions

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么 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:                

博客

书籍推荐