我已经使用Jenkins声明性管道查找了一些用户输入参数的示例,但是所有示例都使用脚本化管道。以下是我正在努力实现的代码示例:
pipeline {
agent any
stages {
stage('Stage 1') {
steps {
input id: 'test', message: 'Hello', parameters: [string(defaultValue: '', description: '', name: 'myparam')]
sh "echo ${env}"
}
}
}
}
我似乎无法弄清楚如何访问 myparam 变量,如果有人可以帮助我,那就太好了。 感谢
答案 0 :(得分:11)
使用输入时,在全局管道级别使用 agent none 非常重要,并将代理分配给各个阶段。将输入过程放在一个单独的阶段,该阶段也使用 agent none 。如果为输入阶段分配代理节点,则该代理执行程序将保留此构建的保留,直到用户继续或中止构建过程。
此示例应有助于使用输入:
def approvalMap // collect data from approval step
pipeline {
agent none
stages {
stage('Stage 1') {
agent none
steps {
timeout(60) { // timeout waiting for input after 60 minutes
script {
// capture the approval details in approvalMap.
approvalMap = input id: 'test', message: 'Hello', ok: 'Proceed?', parameters: [choice(choices: 'apple\npear\norange', description: 'Select a fruit for this build', name: 'FRUIT'), string(defaultValue: '', description: '', name: 'myparam')], submitter: 'user1,user2,group1', submitterParameter: 'APPROVER'
}
}
}
}
stage('Stage 2') {
agent any
steps {
// print the details gathered from the approval
echo "This build was approved by: ${approvalMap['APPROVER']}"
echo "This build is brought to you today by the fruit: ${approvalMap['FRUIT']}"
echo "This is myparam: ${approvalMap['myparam']}"
}
}
}
}
当输入函数返回时,如果它只返回一个参数,则直接返回该值。如果输入中有多个参数,则返回值的映射(散列,字典)。为了捕获这个值,我们必须放弃groovy脚本。
最好将输入代码包装在超时步骤中,以便构建在较长时间内不会保持未解析状态。