Jenkins 多分支管道——将另一个脚本包含到本地 Jenkinsfile 中

Jenkins Multi-Branch Pipeline -- include another script into local Jenkinsfile

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

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

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

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

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

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

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

这样可以通过

在任何 Jenkinsfile 中调用通用函数
scriptName.methodName()