使用案例
我们已经设置了一个预提交git钩子,用于lint声明性管道(Jenkinsfiles)。目前,每次发出git commit
时,仓库中的所有Jenkinsfiles都会被lint。我希望通过只lint自上次Gradle执行以来发生更改的Jenkinsfiles来改进流程。我们正在使用Gradle(v7.5.1)来编排Spotless check/apply和Jenkinsfile lint等任务。
示例
我在build. gradle中注册了两个任务。一个任务收集存储库中的所有Jenkinsfiles,另一个任务对它们进行lint。为了简洁起见,我简化了下面列出的任务。
def jenkinsfiles = []
task getJenkinsfiles {
doLast {
jenkinsfiles = ['Jenkinsfile1', 'Jenkinsfile2', 'Jenkinsfile3']
//println(jenkinsfiles)
}
}
task lintJenkinsfiles {
dependsOn getJenkinsfiles
inputs.file(jenkinsfiles)
outputs.file('lintJenkinsfile.cache')
doLast {
println(jenkinsfiles)
}
}
结果
getJenkinsfiles
首先执行,没有问题。如果我取消getJenkinsfiles
任务中的println(jenkinsfiles)
注解,该值将输出到控制台。但是,lintJenkinsfiles
失败,并声明path may not be null or empty string. path='[]'
.
如何引用task 1中填充的变量作为task 2中的输入?
1条答案
按热度按时间kh212irz1#
我设法将这两个任务合并为一个任务,
getJenkinsfiles
中的脚本直接放在lintJenkinsfiles
中的inputs.files(jenkinsfiles)
之上,以获取所有Jenkinsfiles,inputs
从inputs.file
更改为inputs.files
,以处理字符串数组(Jenkinsfiles位置)。