在不同的项目中重用Jenkinsfile

时间:2017-06-19 08:26:44

标签: git jenkins jenkins-pipeline

场景:

我们有一堆项目,每个项目都位于自己的git存储库中。我想用Jenkins 2多分支管道作业构建它们。每个存储库都有一个工作。每个项目的Jenkinsfile看起来都是一样的,并且需要将对构建过程所做的更改推广到每个项目。这些更改可以是构建步骤中的小修复,也可以是添加完整的新构建步骤。

想法:

为了保持尽可能高的维护性,我想只使用一个 Jenkinsfile并将其包含在每个项目中,所以我只需要修改这个Jenkins文件来修改所有项目构建工作流程。

问题

是否有可能(以及如何)实现这一目标。将一个Jenkins文件部署到一堆存储库,这样我只需要更改一个文件来更改所有构建作业吗?

附加

我知道有可能使用shared libraries,我可以在其中定义构建步骤的执行代码。但是如果想要添加一个完整的新构建步骤,我仍然需要修改我不想做的所有jenkins文件。所以我真的在寻找一种方法来共享所有项目的Jenkins文件,如果可能的话。

到目前为止已经尝试了

  1. 我想使用全新的功能来告诉Jenkins jenkinsfile所在的位置,并使用子模块将其包含在每个项目中。但这似乎不起作用,因为Jenkins似乎在git-Server上寻找Jenkins文件,它永远不会出现,因为它是一个子模块......

2 个答案:

答案 0 :(得分:2)

我们使用shared pipeline library来执行此操作。我们在fabric8项目上有很多例子,你可以在github org找到它们。一个特定的example与您的用例类似,可能有所帮助,每个Jenkinsfile调用一个共享函数:

mavenCI{}

来自管道库的matches the reusable code,您可以在其中添加新的构建步骤

答案 1 :(得分:2)

不仅可以将管道步骤放入共享库中。也可以将完整的管道作为全局变量放入共享库中。使用这种方法,每个存储库中的Jenkinsfile只需要一行代码。您可以在一个地方(在共享库中)修改所有项目的管道。

请参阅我的示例:Jenkins pipeline template

Jenkins Dokumentation中还有一小部分关于此主题:https://jenkins.io/doc/book/pipeline/shared-libraries/#defining-a-more-structured-dsl