注:GitHub Enterprise Server 2.22 上的 GitHub Actions 支持是有限的公测版。 测试已结束。 GitHub Actions 现在一般可用于 GitHub Enterprise Server 3.0 或更新版本。 更多信息请参阅 GitHub Enterprise Server 3.0 发行说明。
- 有关升级到 GitHub Enterprise Server 3.0 或更新版本的更多信息,请参阅“升级 GitHub Enterprise Server”。
- 有关在升级后配置 GitHub Actions 的更多信息,请参阅 GitHub Enterprise Server 3.0 的文档。
注: GitHub 托管的运行器目前在 GitHub Enterprise Server 上不受支持。 您可以在 GitHub 公共路线图 上查看有关未来支持计划的更多信息。
简介
本指南介绍如何使用 Gradle 构建系统为 Java 项目创建执行持续集成 (CI) 的工作流程。 您创建的工作流程将允许您查看拉取请求提交何时会在默认分支上导致构建或测试失败; 这个方法可帮助确保您的代码始终是健康的。 您可以扩展 CI 工作流程以缓存文件并且从工作流程运行上传构件。
GitHub 托管的运行器有工具缓存预安装的软件,包括 Java Development Kits (JDKs) 和 Gradle。 有关软件以及 JDK 和 Gradle 预安装版本的列表,请参阅 GitHub 托管的运行器的规格。
基本要求
您应该熟悉 YAML 和 GitHub Actions 的语法。 更多信息请参阅:
建议您对 Java 和 Gradle 框架有个基本的了解。 更多信息请参阅 Gradle 文档中的入门指南。
在 GitHub Enterprise Server 上使用自托管的运行器
在包含自托管运行器的 GitHub Enterprise Server 上使用设置操作(例如 actions/setup-LANGUAGE
)时,您可能需要在没有连接互联网的运行器上设置工具缓存。 更多信息请参阅“在没有互联网连接的自托管运行器上设置工具缓存”。
从 Gradle 工作流程模板开始
GitHub 提供有 Gradle 工作流程模板,应该适用于大多数基于 Gradle 的 Java 项目。 更多信息请参阅 Gradle 工作流程模板。
要快速开始,您可以在创建新工作流程时选择预配置的 Gradle 模板。 更多信息请参阅“GitHub Actions 快速入门”。
您也可以通过在仓库的 .github/workflow
目录中创建新文件来手动添加此工作流程。
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档管理。
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Build with Gradle
run: ./gradlew build
此工作流程执行以下步骤:
checkout
步骤在运行器上下载仓库的副本。setup-java
步骤配置 Adoptium 的 Java 11 JDK。- “验证 Gradle 包装器”步骤验证源树中存在的 Gradle Wrapper JAR 文件的校验和。
- “使用 Gradle 构建”步骤运行
gradlew
wrapper 脚本以确保可以创建您的代码构建、测试通过和包。
在创建构建和测试工作流程时,默认工作流模板是很好的起点,然后您可以自定义模板以满足项目的需求。
在其他操作系统上运行
初学者工作流程模板使用 GitHub 托管的 ubuntu-latest
运行器将作业配置为在 Linux 上运行。 您可以更改 runs-on
键,让您的作业在其他操作系统上运行。 例如,您可以使用 GitHub 托管的 Windows 运行器。
runs-on: windows-latest
或者,您可以在 GitHub 托管的 macOS 运行器上运行。
runs-on: macos-latest
您还可以在 Docker 容器中运行作业,或者提供在自己的基础架构上运行的自托管运行器。 更多信息请参阅“GitHub Actions 的工作流程语法”。
指定 JVM 版本和架构
初学者工作流程模板将 PATH
设置为包含 OpenJDK 8,用于 x64 平台。 如果要使用不同的 Java 版本或面向不同的架构(x64
或 x86
),您可以使用 setup-java
操作选择不同的 Java 运行时环境。
例如,要使用 Adoptium 提供的用于 x611 平台的 11 版 JDK,您可以使用 setup-java
操作,将 java-version
、distribution
和 architecture
参数配置为 '11'
、'adopt'
和 x64
。
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11 for x64
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
architecture: x64
更多信息请参阅 setup-java
操作。
构建和测试代码
您可以使用与本地相同的命令来构建和测试代码。
初学者工作流程默认将运行 build
任务。 在默认的 Gradle 配置中,此命令将下载依赖项、构建类别、运行测试并将类别打包为可分发格式,如 JAR 文件。
如果使用不同的命令来构建项目,或者想要使用不同的任务,则可以指定这些命令。 例如,您可能想要运行在 ci.gradle 文件中配置的 package
任务。
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Run the Gradle package task
run: ./gradlew -b ci.gradle package
缓存依赖项
使用 GitHub 托管的运行器时,您可以缓存依赖项以加速工作流程运行。 运行成功后,您的本地 Gradle 缓存将存储在 GitHub Actions 基础架构中。 在未来的工作流程运行中,缓存将会恢复,因此不需要从远程包仓库下载依赖项。 You can cache dependencies simply using the setup-java
action or can use cache
action for custom and more advanced configuration.
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
cache: gradle
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Build with Gradle
run: ./gradlew build
- name: Cleanup Gradle Cache
# Remove some files from the Gradle cache, so they aren't cached by GitHub Actions.
# Restoring these files from a GitHub Actions cache might cause problems for future builds.
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties
此工作流程将保存本地 Gradle 包缓存的内容,位于运行器主目录的 .gradle/caches
和 .gradle/wrapper
目录中。 缓存键将是 gradle 构建文件(包括 Gradle wrapper 属性文件)的哈希内容,因此对它们的任何更改都将使缓存无效。
将工作流数据打包为构件
构建成功且测试通过后,您可能想要上传生成的 Java 包作为构件。 这会将构建的包存储为工作流程运行的一部分,并允许您下载它们。 构件可帮助您在拉取请求合并之前在本地环境中测试并调试它们。 更多信息请参阅“使用构件持久化工作流程”。
Gradle 通常会在 build/libs
目录中创建 JAR、EAR 或 WAR 等输出文件。 您可以使用 upload-artifact
操作上传该目录的内容。
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- run: ./gradlew build
- uses: actions/upload-artifact@v2
with:
name: Package
path: build/libs