我正在尝试使用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
我的build.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']
}
}
}
有什么建议我做错了,谢谢
1条答案
按热度按时间tvz2xvvm1#
看起来你缺少了
jenkins-core
依赖项。根据jenkins-spock
documentation:这个库的一些依赖项被标记为Maven提供的作用域。这意味着Maven将把它们拉进来构建和测试这个库,但是当你使用这个库时,你必须自己把这些库作为依赖项拉进来。
在这些库中,有一个
jenkins-core
,它包含您的构建找不到的jenkins.model.Jenkins
类。请尝试将
jenkins-core
依赖项添加到您的文件,并检查它是否解决了问题。