使用 GitHub Actions 自动化 Java 构建
Source: Dev.to

我们都有过这种经历。写好代码后,它在你的笔记本电脑上运行得完美无缺,推送到仓库后……构建却在其他人那儿崩溃了。更糟的是,某个 bug 因为有人忘记运行测试而悄悄进入了生产环境。
这就是 Continuous Integration(CI)发挥作用的地方。
在本指南中,我们将拆解一个非常简单的 GitHub Actions 工作流,该工作流会在每次推送代码时自动构建并测试一个包含两个微服务(订单服务 & 产品服务)的应用程序。
什么问题可以解决?
在查看代码之前,让我们了解为什么需要它。这个 YAML 文件位于你的仓库中,解决了三个巨大的问题:
- 一致性 – 它在干净的中性环境(Ubuntu)中构建你的代码,而不是在你可能凌乱的笔记本电脑上。
- 提前发现错误 – 它在每个 Pull Request 上自动运行测试,这样你就不会合并有缺陷的代码。
- Monorepo 支持 – 它在单个仓库中处理多个服务(订单服务和产品服务),确保一个服务的更改不会破坏另一个服务。
工作流文件
以下是我们将要分析的完整 ci.yml 文件:
name: Java CI with Maven
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build and Test Order Service
working-directory: ./OrderService
run: |
chmod +x mvnw
./mvnw clean verify
- name: Build and Test Product Service
working-directory: ./ProductService
run: |
chmod +x mvnw
./mvnw clean verify
Source: …
代码拆解
1. 设置与触发器
name: Java CI with Maven
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
name– 工作流在 GitHub Actions 选项卡中显示的名称。on– 触发工作流的事件。push– 每当代码推送到main分支时运行。pull_request– 每当 PR 目标分支为main时运行(代码审查的关键)。workflow_dispatch– 添加一个 “Run workflow” 按钮,方便手动启动(调试时非常有用)。
2. 环境(Job)
jobs:
build:
runs-on: ubuntu-latest
jobs– 一个工作流由一个或多个作业组成;这里我们只有一个名为build的作业。runs-on: ubuntu-latest– GitHub 会提供一台运行最新 Ubuntu 发行版的全新虚拟机。后续所有步骤都在这台 VM 上执行。
3. 步骤(实际工作)
步骤 A – 获取代码
steps:
- name: Checkout code
uses: actions/checkout@v4
uses– 从 GitHub Marketplace 拉取预制的 Action。actions/checkout会将你的仓库克隆到 runner 上,以便后续步骤访问文件。
步骤 B – 准备 Java
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
actions/setup-java– 在 runner 上安装 Java。distribution: 'temurin'– 使用 Eclipse Temurin 版的 OpenJDK。cache: maven– 缓存 Maven 依赖,以加快后续构建速度。
步骤 C – 构建微服务
Order Service
- name: Build and Test Order Service
working-directory: ./OrderService
run: |
chmod +x mvnw
./mvnw clean verify
Product Service
- name: Build and Test Product Service
working-directory: ./ProductService
run: |
chmod +x mvnw
./mvnw clean verify
working-directory– 在执行命令前切换到指定文件夹(在单仓库多项目结构中必需)。chmod +x mvnw– 为 Maven Wrapper 添加可执行权限。./mvnw clean verify– 运行 Maven Wrapper,确保使用项目定义的确切 Maven 版本。verify会执行完整的生命周期直至集成测试验证,比单纯的install检查更彻底。
如何在 GitHub 上设置
-
打开你的项目(本地或在 GitHub 上)。
-
创建目录结构:
.github/ └─ workflows/ -
创建工作流文件:
- 路径:
.github/workflows/ci.yml - 添加上面显示的 YAML 内容。
- 路径:
-
提交并推送:
git add .github/workflows/ci.yml git commit -m "Add CI pipeline" git push
推送后,GitHub 会自动检测到新的工作流。你可以在 Actions 选项卡下查看其执行情况,或通过 Run workflow 按钮手动触发。
运行工作流
git push origin main
转到 GitHub 仓库的 “Actions” 选项卡。您会看到工作流正在启动。如果圆圈变成 绿色,说明代码安全;如果变成 红色,说明构建失败——幸好您在用户发现之前就已经知道了。
示例设置: ci.yml
