6

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

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

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

  • 多分支流水线构建:创建新分支时,Jenkins 会自动为您创建一个新的 Jenkins 作业。这意味着当一个新分支出现时,我们不再需要创建几十个新的 Jenkins 项目。但是,它看起来Jenkinsfile必须位于项目的根目录上。如果您在构建过程中进行了基本更改,则必须更新所有 Jenkins 项目。

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

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

4

1 回答 1

5

如果您有跨 repos 的通用构建逻辑,则可以将大部分管道逻辑移动到单独的 groovy 脚本中。然后可以在任何 Jenkinsfile 中引用此脚本。这可以通过检查 groovy 脚本在另一个目录中的 repo 的另一个签出然后执行标准 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()
于 2016-08-25T09:40:00.420 回答