我的组织已经使用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信息的管道操作,所以我无法将共享库的实际使用范围扩展到我们的其他项目,这种干扰。