附加到作业属性

时间:2017-08-31 14:36:01

标签: jenkins jenkins-pipeline jenkins-job-dsl

我在job-dsl.groovy中定义的作业参数会被管道中定义的那些覆盖。

我正在使用job-dsl-plugin和Jenkins管道为每个git分支生成Jenkins作业。我的代码存储在gitLab中,它们需要gitLab集成。我使用gitlab-plugin提供。问题出在' gitLabConnection'看起来它只能从Jenkins管道内部应用。

因此,如果在job-dsl中,我会这样做:

branches.each { branch ->
String safeBranchName = branch.name.replaceAll('/', '-')
if (safeBranchName ==~ "^release.*")
{
    return
}

def branch_folder = "${basePath}/${safeBranchName}"
folder branch_folder

pipelineJob("$branch_folder/build") {
    logRotator {
        numToKeep 20
    }
    parameters {
        stringParam("BRANCH_NAME", "${safeBranchName}", "")

        stringParam("PROJECT_NAME", "${basePath}", "")
    {
}

然后在我的Jenkins管道中,我会添加' gitLabConnection'

node('node_A') {
properties([
    gitLabConnection('gitlab.internal')
])

stage('clean up') {
    deleteDir()
}
///(...)

我必须这样做:

node('node_A') {
properties([
    gitLabConnection('gitlab.internal'),
    parameters([
        string(name: 'BRANCH_NAME', defaultValue: BRANCH_NAME, description: ''),
        string(name: 'PROJECT_NAME', defaultValue: PROJECT_NAME, description: '')
    ])
])

stage('clean up') {
    deleteDir()
}
///(...)

这样我的BRANCH_NAME和PROJECT_NAME就不会被覆盖。 还有另一种解决方法吗? 是否可以附加' gitLabConnection(' gitlab.internal')'到Jenkins管道中的属性?

2 个答案:

答案 0 :(得分:0)

不幸的是,似乎还没有一种方法可以做到这一点。 https://issues.jenkins-ci.org/browse/JENKINS-43758对此进行了一些讨论,我可能最终会打开一个功能请求,以允许人们“附加到属性”

答案 1 :(得分:-1)

有两种解决方法。第一个仅使用Jenkins管道代码,但是如果选择此路径,则初始作业运行很可能会失败。最初的失败将发生,因为在第一次运行作业时,管道会创建Jenkins作业参数。一旦创建了参数,作业就可以工作。

  1. 选项'1'-仅使用Jenkins管道。
    'Pipeline Syntax'/'Snippet Generator'中检查:
    “此项目已参数化”。
    添加您需要的参数,然后点击“生成管道脚本”。就我而言,我得到:

    属性([ gitLabConnection(gitLabConnection:'my_gitlab_connection',jobCredentialId:'',useAlternativeCredential:false), [$ class:'JobRestrictionProperty'], 参数([ 字符串(默认值:“测试”,描述:“测试”,名称:“测试”,修剪:假) ]), valveJobProperty(类别:[],limitOneJobWithMatchingParams:false,maxConcurrentPerNode:0,maxConcurrentTotal:0,paramsToUseForLimit:'',油门已启用:false,油门选项:'项目') ])

  2. 选项'2'-更复杂,但功能也更强大。由于上述问题,我终于接受了。
    使用Jenkins Job DSL插件-https://github.com/jenkinsci/job-dsl-plugin Gitlab插件与此https://github.com/jenkinsci/gitlab-plugin#declarative-pipeline-jobs

  3. 配合使用非常好