我正在构建一个 jenkins 共享库(在 groovy 中)并使用JenkinsPipelineUnit和 gradle 对其进行测试。运行./gradlew test jacocoTestReport
正常,但报告几乎是空的(只是标题);没有覆盖范围。
以下是我的 build.gradle 的相关部分:
plugins {
id 'groovy'
id 'application'
id 'jacoco'
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.5.4'
testCompile 'junit:junit:4.12'
testCompile 'com.lesfurets:jenkins-pipeline-unit:1.1.1-custom' // minor adaptations, but that's another story
}
test {
systemProperty "pipeline.stack.write", System.getProperty("pipeline.stack.write")
}
jacocoTestReport {
group = "Reporting"
reports {
xml.enabled true
csv.enabled false
}
additionalSourceDirs = files('vars')
sourceDirectories = fileTree(dir: 'vars')
}
我认为问题在于我的“源”文件位于vars目录中,而不是像普通 groovy 项目中预期的那样位于src/groovy中。然而,这是 Jenkins 共享库的要求。
我尝试指定
sourceSets {
main {
groovy {
srcDir 'vars'
}
}
}
但随后 gradle 将开始编译这个共享库,而它应该在使用时被加载;这打破了一切......
我的文件夹结构如下所示:
├── build.gradle
├── src
│ └── test
│ ├── groovy
│ │ └── TestSimplePipeline.groovy
│ └── resources
│ └── simplePipeline.jenkins
└── vars
├── MyPipeline.groovy
└── sh.groovy
我认为我的问题与https://github.com/jenkinsci/JenkinsPipelineUnit/issues/119有关,但我不知道如何在 gradle 中使用为 maven 提出的更改(甚至不确定它们是否适用于 jacoco)。