Github Actions是由Github提供的CI/CD服务,它对公共仓库是免费的。对于私有仓库,每个GitHub账户都能获得一定的免费时间和存储空间,这取决于账户使用的产品。
在这篇博文中,你将学习如何为基于Maven的Java项目运行JUnit 5测试创建一个简单的工作流,以及如何在README.md文件中添加构建状态徽章。
这是Ewelina Fiedorowicz的客座文章,她是一位雄心勃勃的初级Java程序员,对新技术持开放态度,渴望接受新挑战。
目录
问题
在每个push
,用Maven在Java项目中运行JUnit 5测试,并缓存下载的依赖项,以加快后续运行速度。
解决方案
TL;DR
完整的工作流程,由一个包含四个步骤的工作组成,用于在Java项目中用Maven运行JUnit测试的自动化过程:
name: tests
on: push
jobs:
run_tests:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Set up JDK 14
uses: actions/setup-java@v1
with:
java-version: 14
- name: Cache Maven packages
uses: actions/cache@v2
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Run tests with Maven
run: mvn -B test --file pom.xml
复制代码
工作流语法介绍
工作流文件使用YAML语法,扩展名为.yml
或.yaml
。所有工作流文件都必须放在项目根部的.github/workflows
目录中。
你可以创建自己完全定制的工作流,也可以使用Github社区提供的动作。你可以在Github Marketplace中找到它们)。
工作流程由以下部分组成:
name
(可选):一个工作流名称,将显示在版本库的动作页面上。on
(必需的):一个触发工作流的事件( , , , 等等)。你可以指定一个或多个事件,也可以定义要运行的分支或标签。工作流也可以使用cron语法进行调度。push
pull request
page build
env
(可选):环境变量。它们可以为整个工作流程、单个工作或某个步骤设置。建议使用Github Secrets来向工作流传递令牌或秘密。秘密是加密的环境变量,只暴露给选定的行动。
在Github Actions文档中了解更多关于存储秘密的信息:
jobs
(至少需要一个):它是一个要在运行器上执行的实际任务列表。每个工作必须有一个唯一的标识符,并可能包括几个属性,例如。runs-on
(需要):你可以选择一种机器来运行任务(Windows、Linux或macOS)或你自己的运行器。steps
:一连串的任务。每个步骤可以是一个简单的shell命令,也可以是一个由各种步骤组成的行动。一个动作可以在你自己的资源库、任何其他公共资源库或Docker注册表中定义。有些动作需要输入,可以使用with
关键字来传递。
工作流程的语法可以在Github Actions文档中找到。
第1步:签出版本库
第一步是签出版本库。为了做到这一点,请使用checkout
动作:
- name: Checkhout the repository
uses: actions/checkout@v2
复制代码
第2步:设置JDK 14
要配置 Java 环境,使用setup-java
动作。您可以选择各种Java版本,包括major、minor和early access:
- name: Set up JDK 14
uses: actions/setup-java@v1
with:
java-version: 14
复制代码
第3步:缓存Maven包
使用Github社区提供的cache
动作来缓存下载的依赖项和构建输出。Path参数定义了要缓存或恢复的运行器上的文件路径。Key参数用于搜索缓存。如果没有匹配,将创建一个新的缓存条目,并在路径目录下用所提供的密钥保存。Restore-keys参数是可选的,包含一个备选密钥的列表:
- name: Cache Maven packages
uses: actions/cache@v2
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
复制代码
第4步:用Maven运行测试
最后,使用mvn
命令来运行测试:
- name: Test with Maven
run: mvn -B test --file pom.xml
复制代码
徽章
在README.md文件中添加徽章是一种很好的方式,可以向版本库访问者展示你的项目构建正确,所有测试都通过了。
要获得一个工作流的徽章,只需将以下URL中的占位符替换为相关信息。注意,<WORKFLOW_NAME>是在.yml文件的第一行定义的名字,它不一定是文件名:
https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_NAME>/badge.svg
复制代码
要在项目中添加一个徽章,请按以下方式包好徽章的链接,并粘贴在README.md文件的顶部:

复制代码
徽章将在提交和推送更改到版本库后出现。
总结
工作流成功触发后,你会在Github仓库的行动页面中看到日志和结果。Github Actions使用退出代码来定义一个动作是通过还是失败。任何非零的退出代码都被认为是失败。
源代码
这篇文章的源代码可以在Github上找到。