首页 > 解决方案 > 在本地运行 Azure Pipeline Gradle 任务

问题描述

我正在尝试通过在本地运行它来调试 Azure Pipeline 中的 Gradle 任务。任务的 YAML 定义是:

- task: Gradle@2
  displayName: 'Test Project'
  inputs:
    gradleWrapperFile: 'gradlew'
    gradleOptions: '-Xmx7000m'
    sonarQubeRunAnalysis: true
    sonarQubeGradlePluginVersion: 2.6.2
    testRunTitle: $(DISPLAY_NAME)
    codeCoverageToolOption: JaCoCo
    publishJUnitResults: true
    testResultsFiles: '**/build/test-results/test/TEST-*.xml'
    tasks: "test -Dtest.profile=unit --parallel"

我试图找出等效的本地命令。我已经到了

./gradlew test -DcodeCoverageToolOption=JaCoCo -Dtest.profile=unit --parallel

但是,我不确定如何传递其他参数,例如codeCoverageToolOption: JaCoCo

标签: gradleazure-pipelines

解决方案


1.codeCoverageToolOption:JaCoCo

对于 Azure Devops,codeCoverageToolOption: JaCoCo意味着选择一个代码覆盖工具JaCoCo来确定测试用例覆盖的代码。但是,gradle 没有这样的命令来选择要使用的代码覆盖率工具。

在 gradle 中,类似的操作是首先添加JaCoCo插件。现在,您可以调用task 来创建代码覆盖率报告。dependenciesbuild.gradlejacocoTestReport

./gradlew test jacocoTestReport

注意:如果文件不存在,该jacocoTestReport任务将不执行任何操作。test.exec所以,你应该总是先运行testorbuild任务


2. 测试结果文件

对于testResultsFiles在 YAML 中,它用于指定应该放入的测试结果文件。但是,对于 gradle,它的默认路径是build/reports/jacoco/test/html/index.html在您的build.gradle文件中指定的。简单示例:

task codeCoverageReport(type: JacocoReport) {
    executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
    subprojects.each {
        sourceSets it.sourceSets.main
    }
    reports {
        xml.enabled true
        xml.destination "${buildDir}/reports/jacoco/{TestResultFileName}.xml"
        html.enabled false
        csv.enabled false
    }
}

3. 发布JUnitResults: true

在 azure devops 中,我们不会使用 gradle 命令将测试结果文件发布到 VSTS。我们使用脚本来实现这一点:CodeCoverage Publish


推荐阅读