Jenkins multibranch管道与来自不同存储库的Jenkinsfile

Kol*_*l00 21 jenkins jenkins-pipeline

我有一个Git存储库,其中包含我想构建的代码,但我不允许Jenkinsfile在其根目录中添加一个(它是Debian软件包,因此我无法将文件添加到上游源代码中).有没有办法将其存储Jenkinsfile在一个存储库中并让它从另一个存储库构建代码?由于我的代码库有几个分支要构建(每个Debian版本一个),这应该是一个多分支管道.在代码或Jenkinsfile存储库中提交应该触发构建.

奖金复杂性:我有几个这样的代码/打包存储库,我想重复使用Jenkinsfile它们.因此它应该以某种方式动态获取正确的Git URL以供使用.要构建的分支在所有存储库中具有相同的名称.

jsn*_*now 13

我发现的最好方法是使用远程 Jenkinsfile Provider 插件。https://plugins.jenkins.io/remote-file/

这将在“构建配置”>“模式”下添加一个选项“通过远程 Jenkinsfile 提供程序插件”,然后您可以指向 Jenkinsfile 所在的另一个存储库。我发现这是比 Pipeline Multibranch Defaults Plugin 更好的解决方案,它使您可以将 Jenkins 文件存储在 Jenkins 本身中,而不是存储在源代码管理中。

  • 这应该是正确答案,谢谢。 (2认同)

Pom*_*m12 10

简短的回答是:你不能用一个multibranch pipeline.Multibranch管道仅设计(至少现在)以Pipeline script from SCM样式执行特定管道,并固定Jenkinsfile在项目的根目录.

但是,您可以使用为多分支自由式项目制作的多分支项目插件.首先,你需要像你一样定义你的.选择此新项目如下所示:multibranch freestyle configurationmultibranch pipeline configuration

新的自由式多分支项目

这种类型的配置将与multibranch pipeline类型完全相同,即它将为您创建一个文件夹,其中包含您的配置名称和自动检测到的每个分支的子项目.

那么实施应该是小菜一碟:

  1. SCM在multibranch配置中指定您的存储库
  2. 在标准的自由式项目中调用另一个构建作为构建/后构建的一部分,除了您必须调用参数化作业(让我们调用它build-job)并为其提供存储库信息,即Git URL和当前分支(你可以使用预定义的变量$GIT_URL$GIT_BRANCH为此目的)
  3. 在您的中build-job,只需定义内联管道或从SCM检出的管道脚本,并在此脚本内部执行SCM检出并继续执行您需要构建的步骤.build-job管道内容示例:

.

node() {
  stage 'Checkout'
  checkout scm: [$class: 'GitSCM', branches: [[name: '*/${GIT_BRANCH}']], userRemoteConfigs: [[url: '${GIT_URL}']]]

  stage 'Build'
  // Build steps...
}
Run Code Online (Sandbox Code Playgroud)

当然,如果你的不同multibranches项目需要有点区别对待,你也可以使用中间项目(比方说build-project-A,build-project-B...),将依次调用通用build-job管道)

这个解决方案的一个主要缺点是,您只需要一个工作负责所有构建,这使得调试变得更加困难.如果成功/错误,你仍然会让你的multibranch项目变成蓝色/红色,但是你必须回去调用build-job以找到构建的真正问题.

  • 现在,自由式多分支选项似乎已被正式弃用.Jenkins _does not_目前提供了为Jenkinsfile不存在的项目提供多分支构建的选项.这真的很糟糕 (16认同)