我正在将我的项目jenkinsfiles转换为共享库,并在groovy中创建可重用的方法。我正在使用Extended_choice_parameter插件在Jenkins中进行参数化构建。我用它来传递值,例如集群,阶段,凭证等给詹金斯工作。现在,我想使用Jenkins共享库,可以在其中定义带参数的函数,并在带参数的jenkinsfile中调用它们。
虽然在jenkinsFile中使用共享库作为参数,而该共享库是“管道”内部的一个块,但我收到与使用参数函数有关的错误。我已经创建了此文件jobParams.groovy
List commonParams() {
//return list of parameters
def paramsList = [
choice(name: 'stage', choices: ['lab', 'dev', 'qa', 'uat', 'prod'], description: 'select stage name' ),
choice(name: 'playbook',
choices: [ '',
'Linux',
'Unix',
'CentOS',
'Ubuntu',
'Debian'
],
description: 'select the playbook to deploy'
),
credentials(name: 'sshCredentialsId', defaultValue: 'lc_ikep_ansible', credentialType: "Username with password", required: true, description: 'SSH credentials for Ansible' ) ,
string(name: 'ansibleTags', defaultValue: '', description: 'Type in ansibleTags separated by space, example: "pre-install ikep-acls"'),
string(name: 'extraVars', defaultValue: '', description: 'Type in extraVars in format: --extra-vars=\'{key1: {key2: \"value2\", key3: \"value3\"}}\''),
choice(name: 'verboseLogging', choices: ['', '-v', '-vvv', '-vvvv'], description: 'Select ansible verbose logging'),
booleanParam( name: 'forceDeploy',
defaultValue: false,
description: 'Activate to force deployment for non-master branches'
)
]
return paramsList
}
现在,我在jenkinsfile中调用此列表,因为这些参数是在我们单击jenkins中的BUILD之前生成的。使用以下代码,我可以打印上面LIST中定义的所有参数。但是现在我如何使用它作为参数在詹金斯中生成构建参数。
/* Pipeline */
def commonParams = jobParams.commonParams()
String listAsString = "[\"${commonParams.join('", "')}\"]"
echo "printing variables ${listAsString}"
[请提出建议,因为我在搜索互联网时找不到有效的用例。在jenkins文件中的管道块里面,我尝试了以下操作,但它给出了错误说明
pipeline {
agent { label "ansibleDeployments"}
options {
ansiColor('xterm')
disableConcurrentBuilds()
}
environment {
ansibleTags = 'all'
}
parameters {
(listAsString)
}
ERROR
WorkflowScript: 67: Expected a build parameter definition @ line 67, column 5.
(listAsString)
^
似乎您正在传递字符串而不是列表,参数块可能会收到一个列表。
parameters << commonParams
也可以在https://jenkins.io/doc/pipeline/steps/中检查每个闭包的定义