使用$ {sha1}忽略分支的Jenkins Pull Request构建器

Bos*_*h99 9 continuous-integration github jenkins jenkins-plugins

我正在尝试设置Jenkins PR builder插件,以便在新的pull请求中点击github.我已经跟着文档,并尝试了"许多"不同的配置,但我似乎无法通过这个:

" 忽略refs/heads/jenkins_testing,因为它与任何配置的refspecs都不匹配 "

如果我将分支说明符留空,则PR上的"任何"更改触发构建.从此,我知道

  • github repo正在被发现
  • 凭据很好
  • 我正在轮询,而不是使用钩子,这是有效的
  • refspec至少"接近"合适
  • 通知显示松弛

Refspec:我只使用规定的PR设置 -

+refs/pull/*:refs/remotes/origin/pr/*
Run Code Online (Sandbox Code Playgroud)

分支 我尝试了很多设置

${sha1}                  - ignored 
${ghprbActualCommit}     - ignored
branch-id                - gets built, but I need "any" PR
** (blank)               - too much gets built, undesirable
Run Code Online (Sandbox Code Playgroud)

Jenkins/PR builder配置:

詹金斯配置

投票结果仍然存在:

詹金斯投票日志

我知道这个错误导致了这个问题,但是从1.31更新到1.33后,问题仍然存在.

我已经阅读了关于运行两个进程的内容,但我不确定为什么我需要它(请解释,如果有的话).

看到什么错在我的配置?任何澄清或建议都是最受欢迎的.

干杯 -

Jas*_*lan 8

看来,根据refspec +refs/pull/*:refs/remotes/origin/pr/*,您希望此项目构建拉取请求.

但是,您似乎已启用Poll SCM触发器以及Github Pull Request Builder(GHPRB)触发器.

请记住,GHPRB插件已经是一个触发器.启用其他触发器的唯一原因是,如果您希望此项目构建正常分支.如果是这种情况,请参阅本文的底部以获取有关此用例的更多信息.

因此,第一步是确保启用的唯一触发器是GHPRB插件.

下一步是要认识到您没有使用Github webhooks - 可能是由于防火墙限制.这意味着您正在使用一个cronjob,它将使用Github API检查Pull Request更新并将其与上次轮询进行比较以检测更改.

这意味着您的凭据必须正确,首先.您可以在GHPRB插件部分下检查Jenkins的系统设置部分(您必须是管理员)中的凭据.确保凭据具有查看,评论等所需的所有权限.

如果所有这些都是正确的,日志可能会为您提供更多信息.如果您是管理员,则可以转到管理Jenkins并查找系统日志.通过查看日志,您可能会发现与您的问题相关的错误.

在你的情况下,因为我是你的系统管理员并且为了第三方的利益而输入所有这些,我注意到我们看到在尝试访问API时从GitHub插件中抛出FileNotFound异常.

原因?

GHPRB插件使用Github插件与API通信,因此轮询Pull请求.Project urlGithub插件的字段用于生成轮询请求的API URL.

删除.gitURL 的一部分!即使在浏览器中访问URL时它会完美地找到,如果你.git在API中添加后缀到项目名称,它会生气并且会给你一个404.通过从Project url字段中删除此后缀,GitHub插件将解析API请求的正确URL路径,并且生活是美好的.

建立PR和正常分支

为了对Pull请求和普通分支使用单个Jenkins项目,您需要做一些额外的事情.

  1. 为其他分支启用触发器,例如GitHub挂钩或SCM轮询
  2. 更新refspec配置,不仅包括您当前配置的pull request refspec,还包括您希望构建的分支的refspec.例如,如果您希望所有标记和分支都可用于构建,则可以使用+refs/pull/*:refs/remotes/origin/pr/* +refs/heads/*:refs/remotes/origin/*
  3. 因为分支说明符通常设置为${sha1}用于构建PR,并且除非GHPRB插件触发构建,否则不会创建此环境变量,您需要将此项目转换为参数化构建并创建一个名为sha1默认值等于如果您没有使用GHPRB插件,通常在Branch Specifier下放置的分支,然后确保Branch Specifier字段引用该${sha1}变量.如果GHPRB插件用于触发构建,则GHPRB插件将覆盖此参数,否则默认值将用于其他触发器.这也使您有机会通过在构建时从UI(或脚本)指定参数来手动运行构建.

您可能需要进行一些其他调整,但这些是立即浮现在脑海中的主要调整.

  • 你的Jenkins-fu很强壮,先生. (2认同)