【问题标题】:How can I define additional parameters in jenkinsfile who inherit from a pipeline shared lib?如何在从管道共享库继承的 jenkinsfile 中定义其他参数?
【发布时间】:2018-12-25 05:41:29
【问题描述】:

我想增加一种扩展 Jenkins 管道中定义的全局参数的可能性。每个调用默认管道的 JenkinsFile 都有默认参数,他可以自己定义参数,如下所示:

@Library('mylib') _ 
generic_pipeline {

 parameters {
            choice(choices: namespaces, description: 'namespaces ?', name: 'namespaceIdChoice')
            string(defaultValue: "$BRANCH_NAME-$BUILD_NUMBER", description: 'What is the project name ?', name: 'projectName')
            }

}

我的 generic_pipeline 在共享库 generic_pipeline.groovy 中定义 他们已经有这样的默认参数:

def call(Closure body) {
    def params = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = params
    body()


    pipeline {

        agent {
            label 'master'
        }

        parameters {
            string(defaultValue: "defaultParam2", description: 'What is defaultParam2 ?', name: 'defaultParam2')
        }
    }
}

我该怎么做?如何为继承定义附加参数?

谢谢

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-shared-libraries


    【解决方案1】:

    我们在 /vars 下有一个单独的 jobParams.groovy 来设置常用参数

    List commonParams() {
         //return list of parameters
         def paramsList = [
             choice(name: 'ACCOUNT_NAME', choices: ['account1', 'account2'].join('\n'),  description: 'Account Name'),
             choice(name: 'AWS_REGION', choices: PipelineUtils.regions.join('\n'), description: 'AWS Region to build/deploy'),
        ]
    
         return paramsList
    }
    

    然后在您的 Jenkinsfile 中,将列表与具体内容连接起来:

    List commonParams = jobParams.commonParams()
    properties([
            buildDiscarder(logRotator(numToKeepStr: '20')),
            parameters([
                choice(name: 'MY_SPECIFIC_PARAM', choices: ['1', '2', '3'].join('\n'), description: ''),
                choice(name: 'PARAM2', choices: ['value'].join('\n'), description: ''),
            ] + commonParams)
        ])
    

    【讨论】:

    • 我对管道很陌生,我们如何访问共享库中定义的特定列表值?println commonParams.ACCOUNT_NAMEprintln "${commonParams.ACCOUNT_NAME} 不起作用,有什么帮助吗?谢谢。
    • 所以这将返回一个选项列表,您将其附加到现有的选项列表中。访问它是 params.ACCOUNT_NAME,因为一旦作业执行,它们看起来就像是一起定义的。您从共享库中获取列表的事实不相关
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    相关资源
    最近更新 更多