使用 GitHub Actions 自动化 Java 构建

发布: (2026年1月17日 GMT+8 18:18)
6 min read
原文: Dev.to

Source: Dev.to

Cover image for Automating Java Builds with GitHub Actions

Rohith V

我们都有过这种经历。写好代码后,它在你的笔记本电脑上运行得完美无缺,推送到仓库后……构建却在其他人那儿崩溃了。更糟的是,某个 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 上设置

  1. 打开你的项目(本地或在 GitHub 上)。

  2. 创建目录结构

    .github/
    └─ workflows/
  3. 创建工作流文件

    • 路径:.github/workflows/ci.yml
    • 添加上面显示的 YAML 内容。
  4. 提交并推送

    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

Back to Blog

相关文章

阅读更多 »

为什么我构建了另一个 Task Runner

现有任务运行器的问题 是的,我知道——又一个2026年的任务运行器。让我解释一下原因。我不是 Make 专家,但我已经成为大家求助的对象……

什么是代码集成?

什么是集成?在软件工程中,集成是将多个开发人员的不同代码更改合并为一个单一、连贯的 s...