在这篇简短的文章中,我们将讨论如何为Java项目(例如Spring Boot Projects)设置GitHub动作。我们还整合了jacoco以生成代码覆盖信息。
配置jacoco
我们必须在build.gradle
文件中设置jacoco。脚本是这样的:
plugins {
/* Other plugins */
id 'jacoco'
}
/* Other configurations and dependencies */
test {
testLogging {
events "passed", "failed", "skipped"
}
finalizedBy jacocoTestReport
}
jacoco {
toolVersion = "0.8.9"
}
jacocoTestReport {
dependsOn test // tests are required to run before generating the report
reports {
xml.required = false
csv.required = true
html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
}
}
这里有一些解释:
plugins {
/* Other plugins */
id 'jacoco'
}
我们必须在plugins
中包含jacoco,以用于Java项目的代码覆盖范围生成器。
test {
testLogging {
events "passed", "failed", "skipped"
}
finalizedBy jacocoTestReport
}
testLogging
部分是可选的。这只是为了向您展示哪些测试代码已通过,失败和跳过。
jacocoTestReport {
dependsOn test // tests are required to run before generating the report
reports {
xml.required = false
csv.required = true
html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
}
}
在此部分中,我们设置了在HTML页面中保存代码覆盖报告的位置。当我们在本地计算机上测试代码时,我们可以使用它来查看代码覆盖信息。对于GitHub Action的情况,我们仅使用.CSV输出进行代码覆盖。下图是Jacoco输出的一个示例。但是,我们不将其用于这种情况。
默认情况下,jacoco
将在build/reports/jacoco/test/jacocoTestReport.csv
中保存.csv输出。我们将使用它在下一步中配置GitHub动作脚本。
配置GitHub动作工作流程代码
name: Java CI
on:
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permissions to Gradle wrapper
run: chmod +x gradlew
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
- name: Run test
run: ./gradlew test
- name: Generate JaCoCo Badge
uses: cicirello/jacoco-badge-generator@v2
with:
jacoco-csv-file: build/reports/jacoco/test/jacocoTestReport.csv
这里有一些解释:
name: Java CI
对于这种情况,我们将github动作命名为Java CI
。您可以随心所欲地命名。
on:
pull_request:
branches:
- master
on:pull_request
指定何时应触发工作流程。在这种情况下,我们希望在每个拉请求上触发脚本。在此示例中,我们将其设置为master
分支。这意味着每次开发人员向master
分支提出拉请请求时,此工作流程将被触发。
jobs:
tests:
runs-on: ubuntu-latest
jobs
部分定义将作为工作流程的一部分运行的作业。在这种情况下,我们将这项工作命名为tests
。
runs-on: ubuntu-latest
指定作业将运行的操作系统环境。我们将Ubuntu的最新版本用于此示例。
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permissions to Gradle wrapper
run: chmod +x gradlew
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
- name: Run test
run: ./gradlew test
- name: Generate JaCoCo Badge
uses: cicirello/jacoco-badge-generator@v2
with:
jacoco-csv-file: build/reports/jacoco/test/jacocoTestReport.csv
steps
部分包含将作为作业一部分执行的步骤列表。
-
uses: actions/checkout@v3
:此步骤查看存储库的代码,允许随后的步骤访问和与项目文件进行交互。 -
name: Set up JDK 17
:此步骤在Runner环境上设置JDK 17。动作actions/setup-java
用于执行此操作。 -
run: chmod +x gradlew
:此步骤授予对Gradle包装脚本执行权限,允许在下一步中执行它。 -
name: Validate Gradle wrapper
:此步骤使用gradle/wrapper-validation-action
来验证Gradle包装器。 -
run: ./gradlew test
:此步骤使用gradle包装器运行了gradle的test
任务。test
任务负责执行Java项目的测试。 -
name: Generate JaCoCo Badge
:此步骤使用cicirello/jacoco-badge-generator
操作来生成代码覆盖徽章。徽章基于jacocoTestReport.csv
文件中存储的Jacoco测试覆盖范围数据,该数据通常是由Gradle Build在测试执行过程中生成的。
让我们进行测试
工作流程
要测试您的工作流程是否有效,您必须向GitHub存储库创建拉动请求。您可以关注此GitHub documentation关于如何创建拉请请求(PR)。
如果通过了所有测试,您将在PR上收到此通知:
否则,您将收到失败的通知。您可以使用此信息来考虑是否接受PR。
您可以单击显示所有检查以查看详细信息。如果输入详细信息,您将看到一些有关工作流程的信息。
在运行测试零件中,您可以看到有关测试执行的细节。
代码覆盖范围
要获取代码覆盖信息,请打开您的github存储库>操作。然后,您将获取所有先前执行的工作流的列表,如这样,列表是及时订购的:
如果您选择其中一个,则会得到:
在测试摘要中一部分,您可以看到您的代码覆盖范围。
结论
自动化单元测试是软件开发生命周期中CI(连续集成)的重要组成部分。通过利用GITHUB操作来处理单元测试,我们在软件开发中自动化CI的一个方面。