Jenkins:使用另一个仓库中的jenkinsfile构建多分支管道

时间:2019-01-11 23:25:33

标签: git jenkins jenkins-pipeline

因此,我正在尝试为一些不同的项目制作多分支管道。

这些是基本要求:

  1. 每个客户的三个工作开发,阶段,产品
  2. 对于每项工作,请从每个仓库中提取相应的分支并构建一个机器人
  3. 如果作业使用的存储库中有任何更改,请触发该环境的构建

因此这些要求非常简单。

但是有第四个要求。我要弄清楚的是,如果我可以拥有一个可以容纳我所有jenkinsfiles的存储库,然后构建另一个存储库的所有分支。这可能吗?所有其他答案似乎都指向不推荐使用的解决方案,例如自由式Multibranch项目。

1 个答案:

答案 0 :(得分:1)

  

是否可以使用另一个仓库中的jenkinsfile构建多分支管道?

简短答案: 不,不是,因为Multibranch Pipeline中的每个Job始终从配置为监视的同一分支(因此,来自相同的仓库)引用Jenkinsfile。不包含Jenkinsfile的分支不会被索引。

扩展答案: 为了或多或少地实现您的要求,我将执行以下操作:

  1. 使用自定义Jenkinsfiles(每个分支,每个客户端,每个环境...等等)创建一个仓库。 每个Jenkinsfile将描述每种情况下要执行的阶段。使用Scripted Pipeline syntax
  2. 在您的产品仓库中添加另一个Jenkinfile:使用自定义管道签出专用的仓库,加载管道并执行。
  3. 为产品回购配置多分支管道。

示例

git@github.com:您的组织/custom-pipelines.git/Jenkinsfile-dev

// Jenkinsfile-dev

def stages() {
    stage ("Checkout") {
        checkout scm
    }

    stage ("Build") {

    }

    stage ("Test") {

    }
}

return this

git@github.com:您的组织/product-repo.git/Jenkinsfile

// Jenkinsfile

node ("ubuntu") {
    // Checkout custom Jenkinsfiles
    stage ("Checkout pipelines") {
        git url: "git@github.com:your-org/custom-pipelines.git", 
            branch: "master", 
            credentialsId: "github-ssh"
    }

    load ("Jenkinsfile-${env.BRANCH_NAME}").stages()
}