jenkins - 捕获 Jenkins 输入步骤的结果

标签 jenkins

我正在使用 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/

相关文章:

jenkins - 如何将 meteor 的速度测试与 Jenkins 集成?

batch-file - Psexec 仅通过 Jenkins 显示第一行

jenkins - 带有 Bitbucket 分支插件的多分支管道的 DSL 种子作业抑制分支的自动构建

gradle - Gradle:无法创建com.android.build.gradle.internal.dsl.SigningConfig_Decorated类型的实例

git - 如何从 Jenkins 中的构建中排除 git 分支

shell - Jenkins 将 shell 输出保存到 var

jenkins - 在运行时从 Jenkins 工作流脚本获取构建日志?

jenkins - Jenkins在日志中打印Kubernetes插件授权承载 token

svn - Subversion,如果结帐失败/挂起,则启用重试

android - 'node' 不被识别为 jenkins 的内部或外部命令错误