Jenkins 动态声明式管道参数

标签 jenkins groovy jenkins-pipeline

Jenkins 声明式管道中的参数可以是动态的吗?

我希望选择选项值在运行时由函数填充。以下代码确实生成了一个选项列表,但它们似乎已经过时 - 可能是在我第一次运行此代码时生成的。如果 AMI 列表发生变化,选项保持不变。我希望每次选择使用参数构建时都运行它。

def findAMIs() {
    // Find relevant AMIs based on their name
    def sout = new StringBuffer(), serr = new StringBuffer()
    def proc = '/usr/bin/aws --region eu-west-1 ec2 describe-images \
               ' --owners OWNER --filter Name=name,Values=PATTERN \
               ' --query Images[*].{AMI:Name} --output  text'.execute()
    proc.consumeProcessOutput(sout, serr)
    proc.waitForOrKill(10000)
    return sout.tokenize() 
}

def AMIs = findAMIs().join('\n')

pipeline {
    // a declarative pipeline
    agent any

    parameters {
        choice(name: 'Release',
               choices: AMIs)
    }
    ...
 }

编辑 我最终使用了带有扩展选择参数的jenkins-job-builder。暂时不支持groovyScript参数,所以我修改了 https://review.openstack.org/#q,I0c6ac0b49c24b8d3afbc06b003847de2e043c2b8,n,z

编辑 上面的链接失效了,所以这里有另一个 openstack 的链接: https://review.opendev.org/#/c/477003/ 但问题的要点是我向 jenkins-job-builder 添加了一个名为“groovyScriptFile”的新参数,该参数已合并。

最佳答案

用户输入怎么样:

def findAMIs() {
    return UUID.randomUUID().toString().split('-').join('\n')
}

node{
    def userInput = input(
        id: 'userInput', message: 'input parameters', parameters: [
            [
                $class: 'ChoiceParameterDefinition',
                name: 'ami',
                choices: findAMIs(),
                description: 'AMI',
            ],
        ]
    )

    echo ("Selected AMI :: "+userInput)
}

关于Jenkins 动态声明式管道参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570163/

相关文章:

maven - Jenkins 多分支管道 - mvn 未被识别为命令

grails - Grails Executor 插件出错,未找到 bean "persistenceInterceptor"

git - Jenkins 管道环境变量

Jenkins 管道: Should I clean workspace before unstash workspace on new node?

git - 在 Jenkins 管道 checkout 中禁用更改日志

java - Jenkins : Add custom jar in maven project

c# - 在全局级别抑制 StyleCop 警告

groovy - 在构造函数中设置值时,有没有办法为 Groovy 中的 null 对象返回空字符串?

jenkins - 如何在脚本控制台中列出我的所有 Jenkins 凭据?

java - 如果没有运行测试,如何使 Jenkins 构建失败?