jar*_*ndl 8 groovy jenkins jenkins-pipeline
Jenkins声明性管道中的参数可以是动态的吗?
我希望在运行时通过函数填充选项选项值.以下代码确实生成了一个选项列表,但它们似乎是陈旧的 - 可能是在我第一次运行此代码时生成的.如果AMI列表发生变化,则选择保持不变.我想在每次选择时运行它build with parameters.
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)
}
...
}
Run Code Online (Sandbox Code Playgroud)
编辑
我最终使用jenkins-job-builder扩展选择参数.它目前不支持该groovyScript参数,所以我修改了它https://review.openstack.org/#q,I0c6ac0b49c24b8d3afbc06b003847de2e043c2b8,n,z
dag*_*ett 16
用户输入怎么样:
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)
}
Run Code Online (Sandbox Code Playgroud)
小智 9
还有另一种解决方案:您可以在"管道"之前使用"属性"步骤 - 您也可以使用活动选择插件:
properties([
parameters([
[
$class: 'ChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
description: '',
filterable: false,
name: 'Release',
randomName: 'choice-parameter-21337077649621572',
script: [
$class: 'GroovyScript',
fallbackScript: '',
script: '''// 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()'''
]
]
])
])
pipeline {
...
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,第一次开始构建时,它会失败.第二次启动它应该是"使用参数构建".
希望能帮助到你.
对于需要声明式管道语法选项的任何人,我在另一个问题中找到了一个很好的解决方案,它对我有所帮助。
这是我基于此的建议。您应该能够使用创建${WORKSPACE}/list文件的代码生成更动态的列表
pipeline {
agent any
stages {
stage("Release scope") {
steps {
script {
// Prepare a list and write to file
sh "echo \"patch\nminor\nmajor\" > ${WORKSPACE}/list"
// Load the list into a variable
env.LIST = readFile (file: "${WORKSPACE}/list")
// Show the select input
env.RELEASE_SCOPE = input message: 'User input required', ok: 'Release!',
parameters: [choice(name: 'RELEASE_SCOPE', choices: env.LIST, description: 'What is the release scope?')]
}
echo "Release scope selected: ${env.RELEASE_SCOPE}"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助
| 归档时间: |
|
| 查看次数: |
21362 次 |
| 最近记录: |