詹金斯条件阶段

时间:2019-09-19 16:51:32

标签: jenkins continuous-integration devops

我正在使用声明性詹金斯管道。我有一个阶段,可以像这样从用户那里获取输入

//Input 
    stage ('Manual Input'){
        agent none
        steps {
            input message: "Please Approve", ok: 'Approve'
        }
    }

我不希望在詹金斯(Jenkins)等待手动步骤完成时阻止任何特工,所以我使用了agent none

我想知道是否有一种方法可以使该阶段有条件地执行。

详细说明:

pipeline {
agent none

parameters {
    choice(choices: "No\nYes",
        description: 'Choose Yes to wait for Manual Input',
        name: 'Input')
}
stages {

    stage ('Stage_1'){
        agent any
        steps {
           //Some Steps here
        }
    }

    //Input stage which should only get executed if ${Input} is Yes
    // Or else Directly go to Stage 3

    stage ('Manual Input'){
        agent none
        steps {
            input message: "Please Approve", ok: 'Approve'
        }
    }

stage ('Stage_3'){
        agent any
        steps {
           //Some Steps here
        }
    }
}
}

我希望Jenkins执行“ Stage_1”,然后仅在参数“ Input”为“ Yes”时执行“手动输入”阶段,否则跳过“手动输入”阶段并转到“ Stage_3”。

由于if/else,我无法在“手动输入”阶段的script{}块中执行agent none。会引发错误。

非常感谢您的帮助! TIA

1 个答案:

答案 0 :(得分:0)

基本上,您要做的就是在第二阶段添加一个when语句,您希望它看起来像这样:

stage ('Manual Input'){
    agent none
    when{
        expression { params.Input == 'Yes' }
    }
    steps {
        input message: "Please Approve", ok: 'Approve'
    }
}

您可以在此here上找到文档。 (对于这种情况,您会发现equals更合适)