Jenkins 多分支管道——将另一个脚本包含到本地 Jenkinsfile 中
Jenkins Multi-Branch Pipeline -- include another script into local Jenkinsfile
我们刚刚开始使用 Jenkins 多分支管道。我喜欢 Jenkins 在创建新分支时自动创建新 Jenkins 作业的想法。它将确保所有可发布的开发都在 Jenkins 中构建。我们有大约 40 或 50 个项目,几乎每个版本都会分支,每次分支时创建这 40 个左右的工作是容易出错的工作。
但是,我看到 Jenkins 中有两种类型的管道构建:
常规管道构建:您在 Jenkins 作业中指定位置和分支。但是,您可以指定是要使用 Jenkins 作业配置中的脚本,还是要使用源存储库中的脚本。这将使我们能够为所有作业维护一个 Jenkinsfile
。如果我们在构建过程中更改某些内容,我们只需要编辑一个 Jenkins 文件。
Multi-Branch Pipeline builds: Jenkins 会在创建新分支时自动为你创建一个新的 Jenkins 作业。这意味着我们不再需要在出现新分支时创建数十个新的 Jenkins 项目。但是,看起来 Jenkinsfile
必须位于项目的根目录中。如果您在构建过程中进行基本更改,则必须更新所有 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()
我们刚刚开始使用 Jenkins 多分支管道。我喜欢 Jenkins 在创建新分支时自动创建新 Jenkins 作业的想法。它将确保所有可发布的开发都在 Jenkins 中构建。我们有大约 40 或 50 个项目,几乎每个版本都会分支,每次分支时创建这 40 个左右的工作是容易出错的工作。
但是,我看到 Jenkins 中有两种类型的管道构建:
常规管道构建:您在 Jenkins 作业中指定位置和分支。但是,您可以指定是要使用 Jenkins 作业配置中的脚本,还是要使用源存储库中的脚本。这将使我们能够为所有作业维护一个
Jenkinsfile
。如果我们在构建过程中更改某些内容,我们只需要编辑一个 Jenkins 文件。Multi-Branch Pipeline builds: Jenkins 会在创建新分支时自动为你创建一个新的 Jenkins 作业。这意味着我们不再需要在出现新分支时创建数十个新的 Jenkins 项目。但是,看起来
Jenkinsfile
必须位于项目的根目录中。如果您在构建过程中进行基本更改,则必须更新所有 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()