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

时间:2017-04-28 17:04:12

标签: github jenkins bitbucket jenkins-pipeline multibranch-pipeline

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

  

项目识别器:管道Jenkinsfile

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

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

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

例如,在repo中是文件:

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

我希望jenkins能够创建文件夹结构:

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

关于我可以从创建项目识别器开始执行此操作的任何想法(如果可能的话)?

2 个答案:

答案 0 :(得分: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找到。

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

答案 1 :(得分:0)

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

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

comment from Stephen Connolly中的JENKINS-43749说明了这一点:

  

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

     

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

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

祝你好运!