如何为动态阶段添加超时?
How do I add a timeout to dynamic stages?
我们有一个相当大的 Jenkins 管道,我们正在尝试使用动态阶段来减少它。不幸的是,我们要替换的阶段使用 options {}
构造,这在该动态模型中似乎无效。这是一个示例,如果您删除选项,它将 运行 正常:
def list = ["Stage-1","Stage-2","Stage-3","Stage-4","Stage-5","Stage-6","Stage-7","Stage-8","Stage-9","Stage-10","Stage-11","Stage-12","Stage-13","Stage-14","Stage-15"];
pipeline {
agent any
stages {
stage('Dynamic Stages') {
steps {
script {
parallel dynamicStages(list)
}
}
}
}
}
def dynamicStages(stageList) {
def stages = [:];
for(int i=0; i < stageList.size(); i++) {
def sname = stageList[i];
stages[sname] = {
option {
timeout(time: 1, unit: 'MINUTES')
}
stage(sname) {
echo "Element: $sname";
sh 'pwd; sleep 5; echo "Hello World"'
}
}
}
return stages;
}
有没有办法使用动态阶段的选项,如果没有,超时可以用不同的方式实现吗?
def dynamicStages(stageList) {
def stages = [:].asSynchronized() // don't ask
for (def sname : stageList) {
def final_name = sname // don't ask
stages[final_name] = {
stage(final_name) {
node("some_node") { // what agent should be running this?
timeout(time: 1, unit: 'MINUTES') {
echo "Element: ${final_name}"
sh 'pwd; sleep 5; echo "Hello World"'
}
}
}
}
}
return stages
}
我们有一个相当大的 Jenkins 管道,我们正在尝试使用动态阶段来减少它。不幸的是,我们要替换的阶段使用 options {}
构造,这在该动态模型中似乎无效。这是一个示例,如果您删除选项,它将 运行 正常:
def list = ["Stage-1","Stage-2","Stage-3","Stage-4","Stage-5","Stage-6","Stage-7","Stage-8","Stage-9","Stage-10","Stage-11","Stage-12","Stage-13","Stage-14","Stage-15"];
pipeline {
agent any
stages {
stage('Dynamic Stages') {
steps {
script {
parallel dynamicStages(list)
}
}
}
}
}
def dynamicStages(stageList) {
def stages = [:];
for(int i=0; i < stageList.size(); i++) {
def sname = stageList[i];
stages[sname] = {
option {
timeout(time: 1, unit: 'MINUTES')
}
stage(sname) {
echo "Element: $sname";
sh 'pwd; sleep 5; echo "Hello World"'
}
}
}
return stages;
}
有没有办法使用动态阶段的选项,如果没有,超时可以用不同的方式实现吗?
def dynamicStages(stageList) {
def stages = [:].asSynchronized() // don't ask
for (def sname : stageList) {
def final_name = sname // don't ask
stages[final_name] = {
stage(final_name) {
node("some_node") { // what agent should be running this?
timeout(time: 1, unit: 'MINUTES') {
echo "Element: ${final_name}"
sh 'pwd; sleep 5; echo "Hello World"'
}
}
}
}
}
return stages
}