Jenkins多分支管道 - 在本地Jenkinsfile中包含另一个脚本

时间:2016-08-18 16:40:08

标签: jenkins-pipeline jenkinsfile

我们刚刚开始使用Jenkins多分支管道。我喜欢Jenkins在创建新分支时自动创建新Jenkins作业的想法。它将确保Jenkins正在构建所有可释放的开发。我们有大约40或50个项目几乎每个版本都会分支,每次分支时创建大约40个左右的工作都是容易出错的工作。

但是,我发现Jenkins中有两种类型的管道构建:

  • 常规管道构建:您在Jenkins作业中指定位置和分支。但是,您可以指定是要在Jenkins作业配置中使用脚本,还是在源存储库中使用脚本。这样我们就可以为所有工作维持一个Jenkinsfile。如果我们在构建过程中更改了某些内容,我们只需编辑一个Jenkins文件。

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

我希望能够使用多分支管道构建,但是我想指定从我们的存储库中提取Jenkinsfile的位置,或者包含来自的Jenkinsfile主存储库URL。

有没有办法用Jenkins多分支管道做到这一点?

1 个答案:

答案 0 :(得分:4)

如果您在repos中有共同的构建逻辑,则可以将大部分管道逻辑移动到单独的groovy脚本中。然后可以在任何Jenkinsfile中引用此脚本。 这可以通过检查groovy脚本所在的repo的另一个checkout到另一个目录然后执行标准groovy加载来完成,或者更好的方法是将它存储为Jenkins全局脚本库中的groovy脚本 - 这本质上是詹金斯内部的一个独立的git仓库 (有关详细信息,请参阅https://github.com/jenkinsci/workflow-cps-global-lib-plugin/blob/master/README.md)。

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

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

这样可以在任何Jenkins文件中通过

调用公共函数
scriptName.methodName()