Fra*_*ell 21 jenkins jenkins-pipeline
我在项目中的不同子项目上有一个长期运行的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"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
不用说,由于它是期待阶段而不是for,因此会产生编译错误.关于如何克服这个问题的任何想法?谢谢
小智 34
我试图使用声明性管道语法来减少现有Jenkinsfile中的重复代码.最后,我能够围绕脚本语法和声明语法之间的区别.
通过使用script {}块包装脚本管道语法,可以在声明性管道中使用脚本管道语法.
看看下面的例子:从睡眠命令中唤醒后,您将看到所有三个并行阶段同时完成.
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
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13519 次 |
| 最近记录: |