2016-08-18 52 views
3

我们刚刚开始使用Jenkins多分支管道。我喜欢詹金斯在创建新分支时自动创建新Jenkins作业的想法。它将确保所有可发布的开发工作都在Jenkins中进行。我们有大约40或50个项目在几乎每个版本中都会分支,每次分支时创建40个左右的作业都是容易出错的工作。Jenkins多分支管道 - 将另一个脚本放入本地Jenkins文件

但是,我看到有两种类型的管道建立在詹金斯:

  • 普通管道建立:你在你的詹金斯作业指定位置和分支。但是,您可以指定是要在Jenkins作业配置中使用脚本还是使用源代码库中的脚本。这将使我们能够为我们的所有工作维持一个单一的Jenkinsfile。如果我们在构建过程中改变某些东西,我们只需编辑一个Jenkins文件。

  • 多分支管道建立:当创建新分支时,詹金斯将自动为您创建一个新的Jenkins作业。这意味着我们不再需要在发生新分支时创建许多新的Jenkins项目。但是,它看起来像Jenkinsfile必须位于项目的根目录。如果您在构建过程中进行了基本更改,则必须更新所有Jenkins项目。

我希望能够利用多分支管道建设,但我想要么指定从我们的仓库拉起Jenkinsfile,或包括从存储库URL主Jenkinsfile

有没有办法与詹金斯多分支管道做到这一点?

回答

3

如果您在repos之间有共同的构建逻辑,那么可以将大部分管道逻辑移动到单独的groovy脚本中。这个脚本可以在任何Jenkinsfile中被引用。 这可以通过检查repo的另一个结账来完成,即groovy脚本进入另一个目录,然后执行标准groovy加载,或者,更好的方法是将其作为groovy脚本存储在Jenkins全局脚本中图书馆 - 这本质上是Jenkins 内部的自包含git回购(有关更多详细信息,请参阅https://github.com/jenkinsci/workflow-cps-global-lib-plugin/blob/master/README.md)。

我们有一个类似的需求,并在一个脚本中创建了一个全局groovy方法,该脚本在Git中维护并在其更改后部署到/ vars /下的Jenkins'全局脚本库中: 脚本 'scriptName.groovy' 有

def someMethod(){ 
    //some build logic 
    stage 'Some Stage' 
    node(){ 
    //do something 
    } 
} 

这样的常见功能可以在任何Jenkinsfile通过

scriptName.methodName() 
+0

没错被调用,看看[这个答案](HTTP://计算器。 com/questions/36727721/jenkinsfile-and-different-strategies-for-branches/42653451#42653451)以获取更多示例。 – rbellamy

+0

另外,如果您提供方法名称“call”,则可以使用脚本文件名称进行调用。所以,如果你有一个文件/vars/scriptName.groovy,你会用它像scriptName() – 0neel

+0

而且不要错过这个链接https://jenkins.io/doc/book/pipeline/shared-libraries/ – 0neel