在jenkins管道中添加带超时的输入

时间:2017-09-18 19:38:25

标签: jenkins jenkins-plugins jenkins-pipeline

目前,使用此脚本,管道正在无限期地等待用户输入,我希望能够像

一样进行更改

如果userinput继续,则继续,如果userinput中止然后中止,如果在60秒内没有用户输入则中止。 我怎么做 ?我对这个脚本做了哪些更改?

node {
stage('dev') {
build job: '11', propagate: false
}
stage('test') {
build job: '12', propagate: false
}
input 'Do you want to proceed to the Deployment?'
stage('prod') {
build job: '13', propagate: false
}
}

1 个答案:

答案 0 :(得分:7)

首先要注意的是,最好不要为输入分配节点,否则它将保持该节点直到超时或直到处理输入。

暂停输入:

node {
    stage('dev') {
        build job: '11', propagate: false
    }
    stage('test') {
        build job: '12', propagate: false
    }
}
timeout(time: 60, unit: 'SECONDS') {
     input 'Do you want to proceed to the Deployment?'
}
node {
    stage('prod') {
        build job: '13', propagate: false
    }
}

您应该在输出中看到类似的内容:

[Pipeline] // node
[Pipeline] timeout
Timeout set to expire in 1 min 0 sec
[Pipeline] {
Do you want to proceed to the Deployment?
Proceed or Abort
[Pipeline] input

另一种解决方案是使用里程碑插件:

node {
    stage('dev') {
        build job: '11', propagate: false
    }
    stage('test') {
        build job: '12', propagate: false
    }
}
input 'Do you want to proceed to the Deployment?'
milestone 1
node {
    stage('prod') {
        build job: '13', propagate: false
    }
}

而不是超时,这将无限期地等待输入,但如果另一个构建运行并通过里程碑1,那么任何尚未通过里程碑1的先前构建将被中止。

或者您可以将其全部包含在超时中,以便为输入超时提供有用的灵活性。

timeout ( time: 24, unit: "HOURS" )  {
    input 'Do you want to proceed to the Deployment?'
    milestone 1
}