首页 > 解决方案 > 从外部 groovy 文件加载 jenkins 参数

问题描述

我有一个很大的 Jenkinsfile,我想将它重新用于其他项目,但是每个项目都有不同的参数,所以我尝试让每个项目只有一个文件,其中只包含如下参数:

詹金斯文件

node {

    checkout scm
    def options = []
    def optionsBuilder = load pwd() + '/global-scripts/optionsBuilder.groovy'
    options.addAll(optionsBuilder.buildOptions(env.JOB_BASE_NAME))


    properties { options }
}

全局脚本/optionsBuilder.groovy

def buildOptions(jobName) {
    echo "load " + pwd() + "/project-scripts/" + jobName + ".groovy"
    def jobOptionsBuilder = load pwd() + "/project-scripts/" + jobName + ".groovy"
    return jobOptionsBuilder.buildOptions()
}
return this

项目脚本/job.groovy

def buildOptions() {
    def options = [buildDiscarder(logRotator(numToKeepStr: '5')),
                   parameters([string(name: 'releaseVersion', defaultValue: env.releaseVersion, description: 'Version that needs to be released'),
                               string(name: 'nextVersion', defaultValue: env.nextVersion, description: 'Next snapshot version' ),
                               string(name: 'branch', defaultValue: env.branch, description: 'Branch that needs to be released'),
                               booleanParam(name: 'sendRocketChatNotification', defaultValue: true, description: 'Send notification to Rocket_Chat'),
                               booleanParam(name: 'sendEmail', defaultValue: true, description: 'Send an email with changelog'),
                               booleanParam(name: 'dryRun', defaultValue: false, description: 'No git push and no mvn deploy')])]


    return options
}
return this

但似乎我找不到正确的语法..詹金斯给我这个错误:

java.lang.ClassCastException: org.jenkinsci.plugins.workflow.multibranch.JobPropertyStep.properties expects java.util.List<hudson.model.JobProperty> but received class org.jenkinsci.plugins.workflow.cps.CpsClosure2
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:394)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.buildArguments(DescribableModel.java:318)

标签: jenkinsgroovyjenkins-pipeline

解决方案


我的印象是,在您的 Jenkinsfile 中,您应该只写

    properties(options)

推荐阅读