使用jenkins管道来构建github pull请求

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

这似乎是GH和詹金斯更重要但不太了解和记录的特征之一,这似乎完全打败了CI的目的......

我正在尝试设置一个简单的,“在拉开请求时打开一个构建”Jenkins的工作。我已经扫描了几十个帖子,有些已有几年了,但还没有找到一个实际可行的解决方案,从头到尾。我在GH Pull Request Builder插件中使用GH 2.15.4和Jenkins 2.89.3。我已经尝试过设置管道工作和自由式项目,遵循各种“如何”的帖子和文档。什么都没有按预期工作。差远了。我已经设法使一些功能正常工作,但并非没有大量的试错法实验,这并没有让我在使用它时感到温暖。 Webhooks在完成所需的工作方面同样毫无价值,因为Jenkins的工作似乎没有任何工作,无论它是如何配置的。

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

持续集成/詹金斯/支

持续集成/詹金斯/ PR-头

持续集成/詹金斯/ PR-合并

显然没有办法删除或编辑这些......他们只是出现了詹金斯的礼貌。我已经看过一些讨论,但是有些解释相互矛盾,所以它们可能只是过时,不准确等等。我想知道“什么是什么”所以我知道哪些应该是'必要'作为PR状态检查的一部分。

任何指针将不胜感激!

github jenkins-pipeline jenkins-plugins
2个回答
2
投票

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

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-pull请求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

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

我的Jenkins设置的URL是https://jenkinsci.dorian.com。所以,在“有效载荷URL”框中,我放了https://jenkinsci.dorian.com/github-webhook/

我将设置保留为“application / json”和“send me everything”和“active”

Webhooks区域有一个方便的“最近交付”部分,可以显示您的webhooks是否正在向Jenkins提供。起初,我的网址错误,所以我的旁边有红色的X.现在,它们都是绿色的复选标记。

Github访问令牌

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

把你想要的任何东西放在描述中。在“选择范围”下,如果您只想让它工作,请选择列表中的每个复选框。

我选择了:

  • 回购:状态
  • 写:repo_hook
  • 阅读:repo_hook
  • 管理员:org_hook

点击“保存”,系统会显示您的密钥。将其复制到安全的地方(我们很快就会使用它)。

配置Jenkins

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

转到Jenkins-Manage Jenkins->配置系统

找到Github部分,然后单击Add Github Server

在凭据下,单击“添加”。你将被带到一个菜单。选择“秘密文字”

  • 范围:全球
  • 秘密:粘贴您之前的访问令牌
  • ID :(我留空了)
  • 描述:DorianGithubCreds

点击保存。然后,从凭证列表中选择DorianGithubCreds。

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

现在转到Github Pull Request Builder

  • GitHub服务器API URL:https://api.github.com
  • Jenkins URL覆盖:(空白)
  • 共享秘密:(空白)
  • 证书:DorianGithubCreds
  • 自动管理webhooks:true
  • 其他一切都是空白的

配置作业

转到应该构建您的仓库的工作在左侧菜单中选择“配置”

在Projects-> Github Organization下

  • 证书:DorianGithubCreds
  • 所有者:多利安
  • 行为: 发现分支 策略:排除也作为PR提交的分支机构 发现来自原点的拉取请求 策略:将拉取请求与当前目标分支修订合并 发现来自分叉的拉取请求 策略:将拉取请求与当前目标分支修订合并 信任:来自具有管理员或写入权限的用户
  • 项目认可人员 管道Jenkinsfile 路径:Jenkinsfile(我的Jenkinsfile在项目根目录中)
  • 构建策略:(故意空白)

通知

现在,当我执行pull请求时,或者每当我向pull请求发布更改时,Jenkins都会为该分支运行一个新的构建。

Github中的Pull Request本身也列出了底部的“Status Checks”。当构建处于挂起状态时,状态检查为黄色。如果成功,它将获得绿色复选标记。如果失败,它会变成红色X.

我最初遇到了一个问题,因为我有一个旧的Jenkins盒子,它也被配置为管理Github webhooks并构建拉取请求。它的构建失败了所以它的通知是我的拉请求。我通过阻止旧的Jenkins盒子构建我的最新分支来解决这个问题。一旦旧Jenkins盒子停止构建,来自新Jenkins盒子的通知就会通过Github。

包起来

而已!这就是我故意配置的一切。请尝试我的配置,看看它是否适合您。如果我遗漏了任何东西,请告诉我。

配置Jenkins和Github的难点在于,尽管有很多指南,但这些建议经常相互冲突,很多都已过时(有时甚至官方文档都已过时)。

尽管如此,这里有一些资源:

  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

0
投票

GitHub具有“添加webhook”功能,可以在存储库设置 - > Webhooks部分中访问。这有4个输入1.有效负载URl - 输入Jenkins网址2.内容类型 - 应用程序/ json 3.秘密 - 如果你想配置秘密,这是可选的4.你希望触发哪个事件的webhook? - 选择“让我选择单个事件”选项可以看到一堆复选框选项,选中“拉取请求”选项。当Pull请求打开时,此选项将向Jenkins发送请求

下一步是在Jenkins中创建一个作业,它将监听GitHub事件并启动构建

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