Jenkins Pipeline - 全局共享库git ref覆盖项目repo git info

时间:2017-01-31 18:35:22

标签: jenkins jenkins-pipeline

我的组织已经使用Jenkins 2.0和Pipelines几个月了。我们已经达到了一个关键点,我们需要一个全局库来整合功能并减少Jenkins文件和脚本的配置偏差。我在我们的Bitbucket团队中创建了一个git repo来保存常用功能,第一个是用于向Hipchat和Bitbucket发送构建状态的通知类(例如src / com / team / notifications / Bitbucket.groovy):

package com.team.jenkins.notifications

class Bitbucket implements Serializable {

    def script
    Bitbucket(script) {
        this.script = script
    }

    def started() {
        this.script.bitbucketStatusNotify (
            buildState: 'INPROGRESS'
        )
    }

    def succeeded() {
        this.script.bitbucketStatusNotify (
            buildState: 'SUCCESSFUL'
        )
    }

    def failed(stage, err) {
        this.script.bitbucketStatusNotify (
            buildState: 'FAILED',
            buildDescription: "Build failed during ${stage}: ${err}"
        )
    }
}

我们的开发工作流程依赖于Jenkins使用Bitbucket构建状态通知程序插件构建拉取请求的批准。上面的类&#34;工作&#34;,因为它向bitbucket发送构建状态通知,但问题是它总是将这些通知发送到共享库repo,而不是正在构建的repo < / strong>(例如我们的Java库或webapps之一)。

我已经将上面的库作为一个类和一个全局var实现进行了测试,它们都显式地和隐式地加载到管道脚本中。我还确认了bitbucket-status-notifier插件的正常非共享库使用受共享库git repo的影响,所以看起来根本不能使用该插件,如果有&#39 ; sa共享库带入了管道工作。这是它作为显式库的用法:

@Library('common-jenkins') import com.team.jenkins.notifications.Bitbucket
def bitbucketer

node() {
    stage('init) {
        git url: 'https://user@bitbucket.org/team/repo.git'
        bitbucketer = new Bitbucket(this)
        sh './gradlew clean'
        bitbucketer.started()
    }

    stage('build') {
        try {
            sh './gradlew build'
        } catch (Exception e) {
            bitbucketer.failed('build', e)
        }
        bitbucketer.succeeded()
    }
}

正如https://issues.jenkins-ci.org/browse/JENKINS-40150已经报道的那样,共享库的git repo信息正在流入管道作业的执行中。我们有其他引用Git信息的管道操作,所以我无法将共享库的实际使用范围扩展到我们的其他项目,这种干扰。

我也创建了https://issues.jenkins-ci.org/browse/JENKINS-41602

0 个答案:

没有答案