Jenkins声明性管道-从工作区中的命令运行输出动态填充输入步骤的选择

时间:2019-03-07 10:31:37

标签: jenkins groovy jenkins-pipeline

我想创建一个输入步骤,提示用户选择git标签。为此,我想用git tag返回的值填充一个下拉框。

这是我当前的管道:

pipeline {
    agent any
    stages {
        stage('My Stage') {
            input {
                message "Select a git tag"
                parameters {
                    choice(name: "git_tag", choices: TAGS_HERE, description: "Git tag")
                }
            }
            steps {
                echo "The selected tag is: ${git_tag}"
            }
        }
    }
}

我希望TAGS_HERE是包含git tags命令给定输出的变量或方法。

到目前为止,我已经尝试过:

  • 在上一步中将标签设置为环境变量-不起作用,因为由于某些原因,这些变量在输入块中无法访问
  • 调用一个单独的常规方法来运行命令并返回输出-不起作用,因为丢失了工作空间并且命令全部在/中运行

我已经在广泛地寻找解决方案,但是我发现的所有示例都可以通过专门使用脚本管道步骤或使用不依赖于工作空间的命令来避免这两个陷阱。

2 个答案:

答案 0 :(得分:1)

通过改善@hakamairi的答案,您可以执行以下操作:

pipeline {
    agent any
    stages {
        stage('My Stage') {
            steps {
                script {
                    def GIT_TAGS = sh (script: 'git tag -l', returnStdout:true).trim()
                    inputResult = input(
                        message: "Select a git tag",
                        parameters: [choice(name: "git_tag", choices: "${GIT_TAGS}", description: "Git tag")]
                    )
                }
            }
        }
        stage('My other Stage'){
            steps{
                echo "The selected tag is: ${inputResult}"
            }
        }
    }
}

答案 1 :(得分:0)

也许您不在节点中(以旧的管道脚本方式),可以尝试一下。可能不需要script

pipeline {
    agent any
    stages {
        stage('My Stage') {
            steps {
                def inputResult = input {
                    message "Select a git tag"
                    parameters {
                        choice(name: "git_tag", choices: getTags(), description: "Git tag")
                    }
                }
                echo "The selected tag is: ${inputResult.git_tag}"
            }
        }
    }
}

getTags应该返回以换行符分隔的选项。