引言:使用 GitHub Actions 实现 Java 开发自动化
现代 Java 开发离不开自动化。手动构建、测试和部署不仅浪费时间,也是关键错误的来源。CI/CD(持续集成/持续部署)解决了这个问题,将日常操作转变为自动化流程。实现 CI/CD 最流行的工具之一是 GitHub Actions。
GitHub Actions 直接内置于 GitHub 中,使其成为托管在该平台上的 Java 项目的理想选择。它允许您创建强大的流水线,这些流水线可以在每次推送、拉取请求或按计划触发。在本文中,我们将介绍如何为 Java 应用程序配置完整的 CI/CD 周期:从构建和测试到部署。您将学习如何编写高效的 YAML 配置、使用依赖缓存以及集成 Maven 和 Gradle 等流行工具。
1. Java 的 GitHub Actions 基础:Workflow、Jobs 和 Steps
在编写代码之前,了解 GitHub Actions 的架构很重要。每个流水线都在文件 .github/workflows/*.yml 中定义。主要组件包括:
- Workflow — 即流水线本身。它包含一个或多个 jobs。
- Jobs — 逻辑块,在同一运行器(虚拟机)上执行。Jobs 可以相互依赖。
- Steps — job 内的具体命令:安装 JDK、运行 Maven、发布工件。
对于 Java 项目,关键步骤是配置 Java Development Kit (JDK)。GitHub Actions 提供了现成的操作 actions/setup-java,它支持所有流行的 JDK 发行版(Oracle、OpenJDK、Adoptium)。
name: Java CI/CD Pipeline
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'
- name: Build with Maven
run: mvn clean install --file pom.xml
在此示例中,我们创建了一个基本 workflow,它在推送到 main 分支或向其发起拉取请求时触发。它使用 Ubuntu,安装 JDK 17(Temurin 发行版)并执行 Maven 构建。这是持续集成的最低配置。
2. 构建和测试:Maven、Gradle 和缓存
构建是 CI/CD 的核心。然而,仅仅运行 mvn install 是不够的。在大型项目中,下载依赖项可能需要几分钟。为了加速此过程,请使用缓存。GitHub Actions 允许缓存目录 ~/.m2/repository(对于 Maven)或 ~/.gradle/caches(对于 Gradle)。
以下是 Maven 的缓存示例:
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache Maven dependencies
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Build and run tests
run: mvn clean verify --file pom.xml
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: target/surefire-reports/
请注意上传测试结果步骤中的标志 if: always()。它确保工件