处理多个分支中的Jenkinsfile的常见更新

时间:2018-03-22 08:56:09

标签: git jenkins jenkins-pipeline

我们有一个项目,有几个长寿分支和多个短生活分支。我们将Jenkins与Pipeline插件一起使用,并定义了Multibranch Pipeline作业来构建我们的源代码。我们使用Jenkinsfile来描述项目的构建,测试和部署。

我们的Jenkinsfile完美地完成了这项工作,但它变得有点复杂。根据当前的分支等,我们有一定的逻辑。仅从匹配特定模式的分支构建和部署docker镜像。

因此,我们努力在每个分支中保持Jenkinsfile 相同的。但是,有时我们需要更新Jenkins文件,它要求我们更新所有分支中的相同文件。

如何在所有分支中处理Jenkinsfile的这种“常见更新”,并且仍然可以使用“Multibranch Pipeline”作业类型?是否可以为项目使用单个Jenkins文件,并且仍然可以使用“Multibranch Pipeline”作业类型?

1 个答案:

答案 0 :(得分:1)

这可以使用Shared Libraries来实现。可以有一个包含Jenkinsfile逻辑的地方,并且仍然有" Multibranch Pipeline"工作类型。

首先,为具有结构的公共Jenkinsfile逻辑创建一个新的存储库:

(root)
+- vars
|   +- myJobPipeline.groovy

myJobPipeline.groovy的内容是您的Jenkinsfile内容,并进行了一些修改。例如,它可能是:

#!/usr/bin/groovy

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


    # And here goes your original Jenkinsfile content

    node {
        stage('get the code') {
            checkout scm
        }
        stage('npm install') {
            sh 'npm install'
        }
        ...
}

然后,在Jenkins配置中转到配置系统 - > Global Pipeline Libraries并定义您的共享库存储库。

最后,将项目Jenkinsfile更新为:

#!/usr/bin/env groovy

myJobPipeline {
}

实际管道定义将通过共享库加载。