我正在使用 Jenkins Pipeline,在捕获输入步骤的结果时遇到一些问题。当我如下声明输入步骤时...
stage('approval'){
steps{
input(id: 'Proceed1', message: 'Was this successful?',
parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Please confirm you agree with this']])
}
}
...一切似乎都运行良好。但是,一旦我尝试从捕获中获取结果(即问题的答案),脚本就不起作用。例如,如下所示的脚本:
pipeline {
agent { label 'master' }
stages {
stage('approval'){
steps{
def result=input(id: 'Proceed1', message: 'Was this successful?', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Please confirm you agree with this']])
echo 'echo Se ha obtenido aprobacion! (como usar los datos capturados?)'
}
}
}
}
...导致以下错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 6: Expected a step @ line 6, column 13.
result=input(id: 'Proceed1', message: 'Was this successful?', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Please confirm you agree with this']])
^
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1073)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
...
at hudson.model.Executor.run(Executor.java:404)
Finished: FAILURE
非常有趣的是,如果我将输入移到管道{}之外,它就可以正常工作。我注意到“def”语句也会发生相同的行为(我可以在 pipeline{} 外部定义和使用变量,但无法在内部定义它)。
我想我一定在这里遗漏了一些非常基本的东西,但是在尝试不同的配置几个小时后,我无法让它工作。难道只是 pipeline{} 中使用的逻辑仅限于很少的命令吗?那么人们如何构建复杂的管道呢?
任何帮助将不胜感激。
最佳答案
脚本 block 允许使用脚本化管道语法,即声明性管道中的几乎所有 Groovy 功能。 请参阅https://jenkins.io/doc/book/pipeline/syntax/用于声明性管道的语法比较和限制。
pipeline {
agent any
...
stages {
stage("Stage with input") {
steps {
script {
def result = input(id: 'Proceed1', message: 'Was this successful?', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Please confirm you agree with this']])
echo 'result: ' + result
}
}
}
}
}
关于jenkins - 捕获 Jenkins 输入步骤的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43224145/