git - Jenkins:使用来自另一个 repo 的 jenkinsfile 构建多分支管道

标签 git jenkins jenkins-pipeline

所以我正在尝试为几个不同的项目制作多分支管道。

这些是基本要求:

  1. 为每个客户开发、阶段、生产三份工作
  2. 对于每个作业,从每个 repo 中提取相应的分支并构建一个机器人
  3. 如果作业正在使用的存储库发生任何变化,则触发该环境的构建

所以这些要求非常简单。

但是还有第四个要求。我想弄清楚的是,我是否可以拥有一个可以容纳我所有 jenkinsfiles 的 repo 协议(protocol),然后构建另一个 repo 协议(protocol)的所有分支。这可能吗?所有其他答案似乎都指向已弃用的解决方案,例如自由式多分支项目。

最佳答案

Is it possible to build a Multibranch Pipeline with a jenkinsfile from another repo?

简答: 不,不是,因为 Multibranch Pipeline 中的每个 Job 总是从配置为监视的同一分支(因此,从同一 repo)引用 Jenkinsfile。并且不包含 Jenkinsfile 的分支不会被索引。

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

  1. 使用自定义 Jenkinsfiles 创建一个 repo(每个分支、每个客户端、每个环境……等等)。 每个 Jenkinsfile 都将描述您要在每个特定情况下执行的阶段。使用 Scripted Pipeline syntax .
  2. 将另一个 Jenkinfile 添加到您的产品存储库中,您可以在其中:使用您的自定义管道检查专用存储库,加载管道并执行它。
  3. 为产品代码库配置多分支管道。

示例

git@github.com:your-org/custom-pipelines.git/Jenkinsfile-dev

// Jenkinsfile-dev

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

    stage ("Build") {

    }

    stage ("Test") {

    }
}

return this

git@github.com:your-org/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()
}

关于git - Jenkins:使用来自另一个 repo 的 jenkinsfile 构建多分支管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54155330/

相关文章:

jenkins - 如何在Linux上的jenkins中设置android ndk

git - 由于 gitattributes eol 设置覆盖未暂存的提交

linux - 在使用 Yocto 构建 Linux 镜像时,pathspec 'gnulib' 与 git 已知的任何文件都不匹配

git pull 请确保您具有正确的访问权限并且存储库存在

matrix - Jenkins 参数化矩阵作业

Jenkins 管道错误 - 未知阶段部分 "sh"和阶段中的步骤必须在步骤 block 中

git - 如何正确切换GIT分支并返回到后面的工作。

java - Jenkins ssh-node 找不到 Java

jenkins - 如何重新运行构建?

jenkins - Jenkins声明式管道Docker注册中心