jenkins - Jenkins 声明式管道 - 从工作区中运行的命令的输出中动态填充输入步骤的选择
问题描述
我想创建一个提示用户选择 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
命令给出的输出的变量或方法。
到目前为止,我已经尝试过:
- 在上一步中将标签设置为环境变量 - 不起作用,因为这些变量由于某种原因在输入块中无法访问
- 调用一个单独的 groovy 方法来运行命令并返回输出 - 不起作用,因为工作区丢失并且命令都在其中运行
/
我已经广泛搜索了一个解决方案,但我能找到的所有示例都通过专门使用脚本化的管道步骤或使用不依赖于工作空间的命令来避免这两个陷阱。
解决方案
通过改进@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}"
}
}
}
}
推荐阅读
- python - 我需要使用 python 验证电子邮件
- php - 每次第二个循环运行php时如何呈现不同的Html
- c - 如何在列表中找到最大的索引
- mysql - sql查询语法case、join和group by
- tcl - 如何测试 expr == 在字符串上的不当使用?
- oracle-apex - 从 Oracle APEX 调用 Mailgun Rest API
- flutter - 无法解析所有工件以进行配置
- c# - 当我使用括号时,它说不能用作方法或委托
- vue.js - TypeError:在 vue 中传播不可迭代实例的尝试无效
- mysql - 在 Vue 中使用 axios 数据不会持久化到 MySQL 数据库