使用jenkins管道构建github拉请求

时间:2019-03-20 15:12:08

标签: github jenkins-pipeline jenkins-plugins

这似乎是GH和Jenkins的更重要但又很少了解和记录的功能之一,似乎完全破坏了CI的目的...

我正在尝试在詹金斯(Jenkins)中建立一个简单的“在拉动请求打开时启动构建”作业。我已经扫描了数十篇已有数年历史的帖子,但是还没有找到一种可行的解决方案,而且还没有开始。我在GH Pull Request Builder插件中使用GH 2.15.4和Jenkins 2.89.3。我尝试按照各种“如何”张贴文章和文档来设置管道作业和自由样式项目。没有任何预期的效果。差远了。我已经设法使某些功能起作用,但并非没有经过反复试验的尝试,这并没有使我感到困惑。 Webhooks对于完成所需的任务同样毫无价值,因为无论如何配置,Jenkins似乎都无法解决。

对于初学者来说,是否有任何参考文献或文档来说明Jenkins自动创建的以下状态检查:

连续积分/詹金斯/分支

continuous-integration / jenkins / pr-head

continuous-integration /詹金斯/ pr-merge

显然,没有办法删除或编辑这些……它们只是“出现”詹金斯的礼貌。我看过一些讨论,但有些解释相互矛盾,因此它们可能已经过时,不准确,等等。我想知道“做什么”,因此我知道在PR状态检查中应该“要求”哪些内容

任何指针将不胜感激!

2 个答案:

答案 0 :(得分:2)

我同意,这个问题很棘手,因为多年来詹金斯及其插件已经发生了很大的变化。让我告诉您我如何完成您的要求。我将发布所有版本号(大部分是最新的)。

Jenkins版本:2.176.1(java -jar /usr/share/jenkins/jenkins.war --version)

插件

  • github 1.29.4
  • github-api 1.9
  • github-branch-source 2.5.3
  • github-pullrequest 0.2.5
  • pipeline-github-lib 1.0

此外,我使用了Blue Ocean界面,这可能会影响事物(谁知道)

  • blueocean 1.17.0
  • blueocean-git-pipeline 1.17.0
  • blueocean-github-pipeline 1.17.0

Github Webhooks

首先,为您的系统设置Webhooks。 This is a good guide for Github Webhooks 转到您的Github存储库,然后单击“设置”选项卡。然后在左侧菜单中选择“ Webhooks”:

我的Jenkins设置的URL为https://jenkinsci.dorian.com。因此,在“有效载荷网址”框中,我输入了https://jenkinsci.dorian.com/github-webhook/

我将设置保留为“ application / json”,“将所有内容发送给我”和“活动”

“ Webhooks”区域有一个方便的“最近发送”部分,可以向您显示您的Webhooks是否正进入Jenkins。刚开始,我输入的网址错误,因此我的旁边有红色的X。现在,它们都是绿色的对勾。

Github访问令牌

许多指南建议您为Jenkins提供一个个人访问令牌,以与您的仓库进行通信。为此,请转到右上角的帐户头像,然后选择设置->开发人员设置->个人访问令牌->生成令牌

根据需要输入任何内容。在“选择范围”下,如果只希望它起作用,请选中列表中的每个复选框。

我选择了:

  • repo:status
  • write:repo_hook
  • 阅读:repo_hook
  • admin:org_hook

点击保存,您将看到您的秘密密钥。将此文件复制到安全的地方(我们会尽快使用)。

配置Jenkins

现在是最困难的部分。尝试安装上面列出的所有插件。

转到Jenkins-管理Jenkins->配置系统

找到 Github 部分,然后单击“添加Github服务器”

在凭据下,单击“添加”。您将被带到菜单。选择“秘密文本”

  • 范围:全球
  • 秘密:粘贴以前的访问令牌
  • ID :(我将此留空)
  • 说明:DorianGithubCreds

保存。然后,从凭据列表中选择DorianGithubCreds。

要进行测试,请点击“测试连接”。我的返回“用户dnrahamim验证的凭据”,速率限制:4998

现在转到 Github Pull Request Builder

  • GitHub Server API URL:https://api.github.com
  • Jenkins URL覆盖:(空白)
  • 共享的秘密:(空白)
  • 凭据:DorianGithubCreds
  • 自动管理网络挂钩:true
  • 其他所有内容都是空白

配置作业

转到应建立回购协议的工作 在左侧菜单中选择“配置”

在项目下-> Github组织

  • 凭据:DorianGithubCreds
  • 所有者:Dorian
  • 行为:
    • 发现分支
      • 策略:排除也作为PR归档的分支
    • 发现来源的拉取请求
      • 策略:将拉取请求与当前目标分支修订合并
    • 发现叉子的拉取请求
      • 策略:将拉取请求与当前目标分支修订合并
      • 信任:来自具有“管理员”或“写入”权限的用户
  • 项目识别器
    • 管道Jenkinsfile
      • 路径:Jenkinsfile(我的Jenkinsfile在项目根目录中)
  • 构建策略:(故意空白)

通知

现在,当我执行请求请求时,或者每当我对请求请求进行更改时,Jenkins都会为该分支运行新的构建。

Github中的Pull Request本身也在底部列出了其“状态检查”。当构建挂起时,状态检查为黄色。如果成功,它将显示一个绿色的选中标记。如果失败,则会显示红色的X。

最初,我遇到了一个问题,因为我有一个旧的Jenkins盒子,该盒子还配置为管理Github Webhooks和构建请求请求。它的构建失败了,所以它的通知是通过我的请求请求发出的。我通过防止旧的Jenkins盒子建立我的最新分支来解决此问题。旧的Jenkins盒子停止构建后,新的Jenkins盒子发出的通知会将其发送到Github。

总结

就是这样!这就是我有意配置的所有内容。请尝试我的配置,看看它是否适合您。让我知道是否遗漏了任何东西。

使用Github配置Jenkins的困难之处在于,尽管有很多指南,但建议经常相互冲突,并且很多建议已经过时了(有时甚至官方文档也已过时)。

不过,这里有一些资源:

  1. This is a good guide for Github Webhooks
  2. Github's Whitepaper on CI with Jenkins (It doesn't explain much in detail but it gives a good overview)
  3. Github pull request builder plugin
  4. Semi-official SO post for showing build status on Github repo

答案 1 :(得分:0)

GitHub具有“添加Webhook”功能,可在存储库设置-> Webhooks部分中访问。有4个输入 1.有效负载URl-输入詹金斯网址 2.内容类型-application / json 3.机密-如果要配置机密,这是可选的 4.您想触发哪个事件? -选择“让我选择单个事件”选项 一堆复选框选项可见,请选中“拉请求”选项。打开Pull请求后,此选项将向Jenkins发送请求

下一步是在Jenkins中创建一个作业,该作业将监听GitHub事件并开始构建