在GitHub存储库上显示Jenkins构建的当前状态


182

有没有办法在我项目的GitHub Readme.md上显示Jenkins构建状态?

我使用Jenkins来运行连续集成构建。每次提交后,在最终生成文档和发行包之前,它确保所有内容都能编译并执行单元测试和集成测试。

仍然存在不经意间破坏构建的风险。访问GitHub项目页面的用户最好知道当前的母版处于该状态。


9
为什么这被否决了?我错过的《詹金斯用户指南》中有明显的内容吗?我事先做了Google,却找不到任何东西。
贾斯珀·布鲁斯

1
Travis构建服务器可以执行以下操作,但是我在Osx上使用Jenkins。这是我想要的东西:github.com/CocoaPods/CocoaPods
Jasper Blues


2
指向类似问题的链接建议使用Travis,它目前不支持iOS和OSX,因此无法回答该问题。
Jasper Blues

4
这不是重复的.. travis!= jenkins
Banjocat

Answers:


166

好的,这是设置Jenkins来设置GitHub构建状态的方法。假设您已经配置了GitHub插件的Jenkins,可以在每次推送时进行构建。

  1. 转到GitHub,登录,转到“设置”,“ 个人访问令牌”,然后单击“ 生成新令牌”

    GitHub设置的屏幕截图

  2. 检查repo:status(我不确定这是否有必要,但是我做到了,对我有用。)

    GitHub令牌生成的屏幕截图

  3. 生成令牌,将其复制。

  4. 确保您要使用的GitHub用户是存储库协作者(用于私有存储库)或是具有对您要构建的存储库的推入和拉出访问权限(用于组织存储库)的团队的成员。

  5. 转到您的Jenkins服务器,登录。

  6. 管理詹金斯配置系统
  7. GitHub Web Hook下,选择让Jenkins自动管理URL挂钩,然后指定您的GitHub 用户名和在步骤3中获得的OAuth令牌

    Jenkins全局设置的屏幕截图

  8. 验证它是否与“ 测试凭据”按钮一起使用。 保存设置。

  9. 找到Jenkins作业并在GitHub上添加Set build status提交到构建后步骤

    Jenkins作业配置的屏幕截图

而已。现在进行测试构建,然后转到GitHub存储库以查看它是否有效。单击主存储库页面中的“ 分支 ”以查看构建状态。

单击“分支”的主页的截图

您应该看到绿色的复选标记:

具有构建状态的GitHub分支的屏幕截图


GitHub现在已经更新了他们的授权工作流程,用户不再指定允许的内容,而是应用程序必须在授权过程中要求他们的要求,并且用户批准所请求的权限。
伊恩·沃恩

6
这似乎不适用于Jenkins> 1.609和Github插件v 1.13.3-我找不到选项“让Jenkins自动管理钩子URL”
endre

2
我同意@pyeleven。我正在使用带有Github插件1.16.0和Github API插件1.71的Jenkins LTS 1.625.3。此选项不显示。而是我看到了凭据下拉列表,但是没有列出凭据(即使我已经设置了凭据)。这些凭证会在进入高级->管理其他Github操作->将登录名和密码转换为Github令牌时显示。
shehzan

4
这似乎已经过时了。该答案提到的构建后操作现在已标记为已弃用,还有第二个
Daenyth

1
现在,构建后步骤参数已更改。@Alex的答案正确。
Bibek Mantree

50

同时,Jenkins和GitHub的用户界面发生了一些变化,花了我一段时间才弄清楚现在如何正确配置Jenkins。此处的说明基于Jenkins 2.121.1版。

我还假设您已经通过Webhook或轮询触发了Jenkins Job的配置。这些是我为使其正常运行所采取的步骤:

  1. 配置Github:使用OAuth范围创建个人访问令牌 repo:status
  2. 配置詹金斯:Configure System并添加OAuth的秘密作为GitHub的服务器 -使用Secret Text作为身份验证方法把OAuth的秘密在那里。
  3. 配置您的Jenkins作业:添加 Set GitHub commit status构建后操作。将状态结果设置为One of the default messages and statuses
  4. 在GitHub上检查结果:检查是否在GitHub提交上获得了构建状态和构建执行时间。

配置Github

创建个人访问令牌


在此处输入图片说明


在此处输入图片说明


在此处输入图片说明


配置詹金斯

在此处输入图片说明


在此处输入图片说明


在此处输入图片说明


在此处输入图片说明


在此处输入图片说明


配置詹金斯工作

在此处输入图片说明


在此处输入图片说明


在此处输入图片说明


结果

现在,您将看到提交和分支的状态:

在此处输入图片说明


2
哇终于找到了解决方案,非常感谢!那个“秘密文本”让我感到困惑。
head01

詹金斯(Jenkins)似乎在推动地位,但我的私人回购计划并未兑现。有什么建议?
Patrick Michaelsen

更新:我的问题与我的回购协议的隐私有关。我的凭证设置必须有问题。
Patrick Michaelsen

更新:最终,我发现只有在实际git push触发的情况下,此方法才有效。自己运行构建不会正确触发状态更新。
Patrick Michaelsen

1
Manage Hooks框突出显示,但未在上面的图像中打勾,这是否意味着保存时应取消选中该框?
Perplexabot

37

我所做的很简单:

  1. 安装Hudson Post Task插件
  2. 在此处创建个人访问令牌:https : //github.com/settings/tokens
  3. 添加一个后任务插件,该插件总是能够成功

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"success\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has succeeded!\"
    }"
    
  4. 添加一个发布后任务插件,如果“将构建标记为失败”,它将导致失败

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"failure\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has failed!\"
    }"
    
  5. 您也可以在测试开始时将呼叫添加到待定

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"pending\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build is pending!\"
    }"
    

发布构建任务配置的屏幕截图


您也可以从管道中执行此操作-例如,您可以通过它进行调用sh,甚至可以利用Jenkins凭证存储与withCredentials
Ivan Kolmychek



11

提交状态API可以让你看到了“ 回购以下状态API ”。

从2013年4月26日起,您现在可以在GitHub repo分支页面上查看构建状态

在GitHub repo分支上建立状态

这意味着这是另一种方式,通过访问GitHub项目页面来查看这些状态,而不是仅拥有Jenkins。

从2013年4月30日开始,用于提交状态API端点已扩展为允许分支和标签名称以及提交SHA


我该把URL放在哪里?是否有插件,或者我必须在构建步骤中卷曲用户?
伊恩·沃恩

@IanVaughan你是什么意思“打”?看什么?要看到一个状态,这将是一个curldeveloper.github.com/v3/repos/statuses/...
VonC

抱歉,是的,我知道可以使用curl,而且我知道API接口,更多的是将curl放在哪里,如果没有,可以使用curl的更高层次的抽象吗?也就是说,我可以在构建开始之前先声明curl / PR正在构建,然后再添加一个curl POST,但是这一切似乎都非常低,我希望有一个更高级别的插件可以为我做这些事情。
伊恩·沃恩

从那以后,我发现Janky(对于我的用例而言相当繁重)似乎可以满足我的要求。
伊恩·沃恩


7

如果您的计算机上Github安装了插件Jenkins,则可以这样操作Post build actions

在github上设置构建状态



4
这个答案缺少细节:如何在GitHub上创建OAuth访问令牌以让GitHub插件使用设置构建状态所需的API?此令牌需要什么权限?我可以在Jenkins配置中的哪里指定用户名/令牌?
Marius Gedminas 2014年

2
这真的没有帮助,您如何进入此对话框窗口?
Oz123

5

在您的README.md中的下面添加一行,并根据您的jenkins项目更改两个URL。

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)

图形是否自动加载?似乎不适合我...
HX_unbanned

是的,它不起作用。您必须刷新页面。
Kaushal

3

关于设置Jenkins和GitHub的受保护分支。我正在使用Jenkins 2.6,以下是我使其工作的步骤:

在存储库的GitHub网页上:

  1. 导航到设置>分支。
  2. 在“保护分支”下,单击“选择一个淹没的分支”菜单,然后选择要设置为“受保护的分支”的分支。
  3. 根据需要启用选项。

在Jenkins服务器上:(确保已安装Git和GitHub插件)

  1. 导航到管理Jenkins>配置系统。
  2. 在GitHub下,将API URL设置为https://api.github.com。虽然这是默认值。
  3. 选择您为凭证生成的令牌。如果尚未生成令牌,请单击“高级...”,然后单击“其他操作”,您可以将您的登录名和密码转换为令牌并将其用作凭证。

另外,请确保您的Jenkins使用的GitHub帐户是该存储库的协作者。我已经设置了写权限级别。

希望这可以帮助。




1

编辑:

我不再使用这种方法,请使用其他答案之一。

更新:对于特定的案例,我最终做了什么:( 以上答案很好-谢谢!)

因为我们的构建服务器不在Internet上,所以我们有一个脚本可以将构建状态发布到github中的gh-pages分支。

  • 开始构建图章失败
  • 建造邮票成功结束
  • 项目在主要项目之后运行以发布结果->生成状态,API文档,测试报告和测试范围。

GitHub缓存图像,因此我们创建了.htaccess文件,该文件指示构建状态图像的缓存超时时间较短。

将其放入带有构建状态映像的目录中:

ExpiresByType image/png "access plus 2 minutes"

这是构建脚本。发布到gh页的目标是'--publish.site.dry.run'

少于400行的配置,我们有:

  • 编译检查
  • 单元和集成测试
  • 测试报告
  • 代码覆盖率报告
  • API文件
  • 发布到Github

。。并且此脚本可以在Jenkins内外运行,以便:

  • 开发人员可以在提交之前运行此脚本,从而减少了影响他人的构建失败的可能性。
  • 故障很容易在本地重现。

结果:

项目主页具有构建状态,每次构建后都会更新,以及最新的API文档,测试结果和测试范围。


很棒的反馈,比我的答案更精确。+1
VonC

1
构建脚本链接已失效
Saikat

您是否有指向脚本的实时链接?
伊恩

已经停止使用这种方法-我认为其他答案会更好。
贾斯珀·布鲁斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.