2016-08-19 120 views
15

我有一个Git仓库与我想建立的代码,但我不是“允许”在其根目录中添加Jenkinsfile(这是一个Debian软件包,所以我不能添加文件到上游源)。有没有办法将Jenkinsfile存储在一个存储库中并让它从另一个存储库构建代码?由于我的代码库有几个分支要构建(每个Debian发行版都有一个分支),所以这应该是一个多分支管道。在代码或Jenkinsfile存储库中提交应该触发构建。詹金斯multibranch管道与Jenkinsfile从不同的存储库

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

回答

6

简短的回答是:你不能做到这一点与multibranch pipeline。多分支管道仅设计(至少现在)以Pipeline script from SCM风格执行特定管道,在项目的根部固定使用Jenkinsfile。您可以使用Multi-Branch Project插件制作多分支自由式项目。首先,您需要像定义multibranch pipeline configuration一样定义您的multibranch freestyle configuration。 选择这个新的项目如下所示:

New Freestyle multi-branch project

这种类型的配置将表现为multibranch pipeline类型完全一样,也就是说,它会造成你与你配置的名称和子项目的文件夹它自动检测到的每个分支。

实现应该然后是小菜一碟:

  1. 指定您SCM库在多分支配置
  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... 
} 

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

的一个,这种解决方案的主要缺点是,你将只负责对所有的建立一个作业,使其更难调试。如果成功/失败,您仍然可以让您的多分支项目变为蓝/红色,但您必须返回build-job才能找到构建的真正问题。

+5

该自由式多分支选项现在似乎已正式废弃。 Jenkins _does目前没有提供一个选项来为Jenkinsfile完全不存在的项目进行多分支构建。这真的很糟糕 – kert