我的项目中的不同子项目有一个长期运行的 Gradle 任务列表。我想使用 Jenkins 声明式管道并行运行它们。
我希望这样的事情可能会起作用:
projects = [":a", ":b", ":c"]
pipeline {
stage("Deploy"){
parallel {
for(project in projects){
stage(project ) {
when {
expression {
someConditionalFunction(project)
}
}
steps {
sh "./gradlew ${project}:someLongrunningGradleTask"
}
}
}
}
}
}
不用说,这会产生编译错误,因为它期望的是 stage 而不是 for。关于如何克服这个问题有什么想法吗?谢谢
我试图使用声明性管道语法减少现有 Jenkinsfile 中的重复代码。最后,我能够理解脚本语法和声明性语法之间的区别。
通过使用 script {} 块包装,可以在声明性管道中使用脚本化管道语法。
查看下面的示例:您将看到从 sleep 命令唤醒后,所有三个并行阶段同时完成。
def jobs = ["JobA", "JobB", "JobC"]
def parallelStagesMap = jobs.collectEntries {
["${it}" : generateStage(it)]
}
def generateStage(job) {
return {
stage("stage: ${job}") {
echo "This is ${job}."
sh script: "sleep 15"
}
}
}
pipeline {
agent any
stages {
stage('non-parallel stage') {
steps {
echo 'This stage will be executed first.'
}
}
stage('parallel stage') {
steps {
script {
parallel parallelStagesMap
}
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)