Jenkins多分支管道的自定义项目识别器

问题描述 投票:6回答:2

当您创建Github组织或Bitbucket团队/项目时,其中一个配置项是:

项目识别器:管道Jenkinsfile

除了“Pipeline Jenkinsfile”之外没有其他选项,但是该选项甚至存在这一事实表明开发人员设想人们为顶级目录中没有单个'Jenkinsfile'的项目编写自己的自定义'识别器'回购。

任何人都可以指出我可以安装和使用的任何其他项目识别器的方向,甚至是一些关于从哪里开始实现我自己的识别器的细节?

我的特定用例是在单个存储库中,我们定义了几个工作流,这些工作流在一个仓库中协调代码/配置上的操作,我希望能够使用Bitbucket Team选项动态扫描仓库,找到所有*.Jenkinsfile文件跨所有分支/拉取请求并填充必要的管道。

例如,在repo中是文件:

/pipelines/workflow1.Jenkinsfile
          /workflow2.Jenkinsfile
          /workflow3.Jenkinsfile

我想jenkins创建文件夹结构:

 /team/repo/workflow1/master
                     /dev
                     /PR1
           /workflow2/master
                     /dev
                     /feature-xyz

有关我可以从创建项目识别器开始的地方开始的任何想法(如果这是可能的话)?

github jenkins bitbucket jenkins-pipeline multibranch-pipeline
2个回答
0
投票

我认为你可以通过提供多个具有不同名称的项目识别器来做到这一点,例如:

Project Recognizers ========================================= **Pipeline Jenkinsfile** Script Path: pipeline/workflow1.Jenkinsfile (or path to the file that contains valide Pipeline steps. ========================================= **Pipeline Jenkinsfile** Script Path: pipeline/workflow2.Jenkinsfile (or path to the file that contains valide Pipeline steps. ========================================= **Pipeline Jenkinsfile** Script Path: pipeline/workflow3.Jenkinsfile (or path to the file that contains valide Pipeline steps.

这里的另一个选择可能是Pipeline Shared Groovy Libraries Plugin,关于这个插件的更多细节可以在Extending with Shared Libraries找到。

这种方法使您能够使用自定义脚本(类,步骤等),这意味着您可以根据仓库名称,项目名称等定义自己的流程。


0
投票

截至目前,至少应该有选择为Jenkinsfile提供另一种识别器。这是在JENKINS-34561 - Allow to detect different Jenkinsfile filenames中添加的。您可以在jenkinsci/workflow-multibranch-plugin/pull/59上看到pull请求,这可能有助于提供识别器工作方式的一些背景信息。

就多个被单一来源识别而言,JENKINS-35415 - Multiple branch projects per repository with different recognizersJENKINS-43749 - Support multiple Jenkinsfiles from the same repository是与此非常相似的请求。

comment from Stephen ConnollyJENKINS-43749说了这个:

相反,这要求的是为分支内的每个jenkinsfile创建一个带有管道作业的计算文件夹。

我认为API应该支持,如果有人想要抨击它。我看到的唯一问题是我们可能需要调整branch-api以允许分支作业成为非作业类型(即计算文件夹)

听起来你需要实现一个BranchProjectFactory(例如:WorkflowBranchProjectFactory),它是ComputedFolder的工厂(例如:WorkflowMultiBranchProject)。

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.