每个拉取请求都有一个 Jenkins 作业

a Jenkins job for every pull request

我想做一件非常简单的事情——对于在我的回购下创建的每个新拉取请求,我想创建一个新的 jenkins 作业,配置更相似(运行 一些批次),这将检查正在合并的分支(不是目标分支)。

我也想在 pull request 获得批准后删除此作业,但这并不重要。

我该怎么做?我发现的每个 jenkins 插件都会为我的所有分支或指定的分支列表创建工作,而不仅仅是为新的或未合并的拉取请求

这是解决此问题的一种方法:

  1. 创建一个模板作业,其中包含您要为每个新分支执行的逻辑(即 运行 一些批处理)。
  2. 为您的存储库中的每个新拉取请求创建一个启动的作业。您可以使用简短的 groovy 脚本对 Script SCM Plugin 执行此操作。
  3. 在此触发的作业中,使用 Jobcopy Plugin 克隆 #1 中的作业。将任何字符串(例如 git url)替换为使工作正常进行所需的任何字符串。
  4. 您可以编写另一个在需要删除分支时通过脚本 SCM 插件触发的作业。您可以使用 Groovy Postbuild Plugin 删除它。

这和我们团队做的非常相似(我们有10多个开发分支,也有很多发布分支)

我觉得最简单的方法如下:

应该使用的插件:

gerrit trigger plugin 用于在有新提交进来时触发

job dsl plugin 用于根据dsl脚本生成作业

build flow plugin 用于定义执行流程

  1. 创建一个 Jenkins build flow 作业"EntryPoint"(如果有新的 commit push for review 就会触发这个作业)

  2. 创建作业生成器作业(此作业将调用作业dsl脚本根据输入参数生成模板作业,例如分支)

  3. 创建一个新工作来完成清理工作,或者如 Daniel 所说,您可以使用 groovy post build

  4. build flow job里面,一个简单的流程如下

    //Get current branch from gerrit trigger plugin
    def currentBranch = params[GERRIT_BRANCH]
    //Invoke job generator job and pass the branch info to it
    build ("job_generator",BRANCH:currentBranch )
    //Invoke the generated job by job_generator
    build("$currentBrnch_Build")
    //Remove the generated job
    build("CleanUpJob")
    

好的,我终于成功了,而且比我想象的要容易得多。我找到了一个名为 "Bitbucket pullrequest builder plugin" 的 jenkins 插件,它使为拉取请求构建作业变得异常容易。唯一的问题是我无法让它与任何 OAuth 消费者一起工作,并且不得不给它我自己的凭据。但除此之外,它的效果非常好。