我正在尝试使用Spock框架编写一个小的groovy测试文件来加载Jenkinsfile。
我正试图写一些单元测试来验证Jenkinsfile是否按预期工作并且使用这些单元测试来查看对Jenkinsfile的任何更新是否破坏了任何
下面是我的Jenkins测试文件
package tests.library
import com.homeaway.devtools.jenkins.testing.JenkinsPipelineSpecification
public class JenkinsfileWithPropertySpec extends JenkinsPipelineSpecification {
protected Script Jenkinsfile
def setup() {
Jenkinsfile = loadPipelineScriptForTest("pipelineConfig/Jenkinsfile")
}
def "Jenkinsfile"() {
when:
Jenkinsfile.run()
then:
1 * getPipelineMock("node")("legacy", _)
1 * getPipelineMock("echo")("hello world")
}
}
当我试着用gradle运行它时,它失败了,错误:
$ ~/source/gradle/gradle-8.0.2/bin/gradle clean test
> Task :compileTestGroovy FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileTestGroovy'.
> Unable to load class com.homeaway.devtools.jenkins.testing.JenkinsPipelineSpecification due to missing dependency Ljenkins/model/Jenkins;
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 1s
2 actionable tasks: 2 executed
我的构建。Gradle包含以下内容:
apply plugin: 'groovy'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'junit:junit:4.13'
testImplementation 'org.codehaus.groovy:groovy-all:2.4.14'
testImplementation 'org.spockframework:spock-core:1.1-groovy-2.4'
testImplementation 'com.lesfurets:jenkins-pipeline-unit:1.1'
testImplementation 'cglib:cglib-nodep:3.2.2'
testImplementation 'org.objenesis:objenesis:1.2'
testImplementation 'org.assertj:assertj-core:3.7.0'
testImplementation 'com.homeaway.devtools.jenkins:jenkins-spock:2.1.5'
}
sourceSets {
test {
groovy {
srcDirs= ['pipelineTests/groovy']
}
}
}
任何指针我做错了什么。由于
看起来您缺少jenkins-core
依赖项。根据jenkins-spock
文档:
这个库的一些依赖项被标记为Maven提供的作用域。这意味着Maven将拉入它们来构建和测试这个库,但是当您使用这个库时,您必须自己将这些库作为依赖项拉入。
在这些库中有一个jenkins-core
,包含jenkins.model.Jenkins
类的库,您的构建无法找到。
请尝试添加jenkins-core
依赖到你的文件,并检查它是否解决了问题。