Java 项目的 CI/CD:GitHub Actions

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

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

开始课程

引言:使用 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()。它确保工件

博客

书籍推荐