在GitHub repo上显示Jenkins构建的当前状态

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

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

仍然存在无意中提交一些破坏构建的内容的风险。对于访问GitHub项目页面的用户来说,知道当前主程序处于该状态是很好的。

118769 次浏览

这个插件应该工作:https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

你应该能够像这样将徽章嵌入到你的README.md文件中:

build passing

提交状态API允许你看到“回购状态API”。

自2013年4月26日起,你现在可以在你的GitHub回购分支页面上看到构建状态:

build status on GitHub repo branches

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

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

编辑:

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

更新:对于我们的特定情况,我最终做了什么: (上面的回答很棒-谢谢!)

因为我们的构建服务器不在互联网上,我们有一个脚本来发布构建状态到github中的gh-pages分支。

  • 开始构建戳记失败
  • 构建结束,戳记成功
  • 项目在主项目之后运行,以发布结果——>构建状态、API文档、测试报告和测试覆盖率。

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

把这个和build-status镜像放在一起:

ExpiresByType image/png "access plus 2 minutes"

这是构建脚本。发布到gh-pages的目标是< em >“——publish.site.dry.run”< / em >

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

  • 编译检查
  • 单位,集成测试
  • 测试报告
  • 代码覆盖率报告
  • API文档
  • 发布到Github

。。这个脚本可以在Jenkins内部或外部运行,这样:

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

结果:

项目主页面有构建状态,在每次构建后更新,以及最新的API文档、测试结果和测试覆盖率。

我所做的很简单:

  1. 安装Hudson Post Task插件
  2. 在这里创建个人访问令牌:https://github.com/settings/tokens
  3. 添加一个Post Task插件,总是放置成功

    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. Add a Post Task Plugin that will put failure if "marked build as failure"

    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. You can also add a call to pending at the beginning of tests

    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!\"
    }"
    

Screenshot of the Post build task configuration

Jently更新你的Github提交状态(如上所述@vonc),不幸的是,他们还没有实现回购状态API

如果你在你的Jenkins上安装了Github插件,你可以在Post build actions中这样做:

set build status on github

好的,下面是如何设置Jenkins来设置GitHub构建状态。这里假设你已经有了Jenkins和GitHub插件,可以在每次推送时进行构建。

  1. 打开GitHub,登录,进入设置开发人员设置个人访问令牌,然后点击生成新令牌

    截图of generate new token

  2. 检查回购:状态(我不确定这是必要的,但我这样做了,它为我工作)。

    截图of generate new token

  3. 生成令牌,复制它。

  4. 确保你要使用的GitHub用户是存储库合作者(用于私人回购),或者是对你想构建的存储库具有推拉访问权限的团队成员(用于组织回购)。

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

  6. 管理詹金斯配置系统

  7. GitHub Web Hook下选择让Jenkins自动管理钩子url,然后指定你的GitHub 用户名和你在步骤3中得到的OAuth令牌

    截图of Jenkins global settings

  8. 验证它与测试证书按钮一起工作。保存设置。

  9. 找到Jenkins作业并将在GitHub提交时设置构建状态添加到构建后的步骤中

    截图of Jenkins job configuration

就是这样。现在做一个测试构建,去GitHub存储库看看它是否工作。在主存储库页面中单击分支机构查看构建状态。

点击'分支'的主页截图

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

 GitHub分支的截图与构建状态

还有这个插件,它会给你一个徽章的url,你可以在你的README中发布。Md,看起来像这样

build passing

https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

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

在你的仓库的GitHub网页上:

  1. 进入“设置>分支”。
  2. 在“保护分支”下,单击 选择一个分支淹没菜单,并选择你想要的分支 设置为受保护的分支。李< / >
  3. 根据需要启用这些选项。

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

  1. 进入“Manage Jenkins > Configure System”界面。
  2. 在GitHub下,将API URL设置为https://api.github.com。尽管这是默认值。
  3. 为凭证选择生成的令牌。如果您还没有生成令牌,请单击Advanced…然后在附加操作中,您可以将您的登录名和密码转换为令牌,并将其用作您的凭据。

此外,确保Jenkins使用的GitHub帐户是存储库的合作者。我设置了写权限级别。

希望这能有所帮助。

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

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

与此同时,Jenkins和GitHub的UI发生了一些变化,我花了一段时间才弄清楚如何正确配置Jenkins。这里的解释基于Jenkins版本2.121.1。

我还假设你已经配置了你的Jenkins Job由webhook或轮询触发。 这些是我采取的步骤,让它工作:

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

配置Github

Create Personal Access Token


enter image description here


enter image description here


enter image description here


配置詹金斯

enter image description here


enter image description here


enter image description here


enter image description here


enter image description here


配置Jenkins Job

enter image description here


enter image description here


enter image description here


结果

你现在会看到你的提交和分支的状态:

enter image description here

我遵循亚历克斯的指示,它工作了。

但是,对于GitHub企业,在将服务器添加到Jenkins时需要修改API URL。

例如,如果您的公司是creditcard.com,您的URL将是

https://github.creditcard.com/api/v3/

对于管道工程,你可以像这样使用帖子部分:

void setBuildStatus(String message, String state) {
step([
$class: "GitHubCommitStatusSetter",
reposSource: [$class: "ManuallyEnteredRepositorySource", url: "https://github.com/my-user/my-repo"],
contextSource: [$class: "ManuallyEnteredCommitContextSource", context: "ci/jenkins/build-status"],
errorHandlers: [[$class: "ChangingBuildStatusErrorHandler", result: "UNSTABLE"]],
statusResultSource: [ $class: "ConditionalStatusResultSource", results: [[$class: "AnyBuildResult", message: message, state: state]] ]
]);
}


pipeline {
agent any


triggers {
githubPush()
}


stages {


stage('Hello') {
steps {
echo 'Hello World'
}
}


}


post {
success {
setBuildStatus("Build succeeded", "SUCCESS");
}
failure {
setBuildStatus("Build failed", "FAILURE");
}
}
}

只需改变"https://github.com/my-user/my-repo"满足你的github回购。

参考:https://stackoverflow.com/a/47162309/4261333

加上这个答案,也加上这个答案他们已经回答了这个问题,但没有给我们一个关于这个问题的正确直觉

我的直觉是这样的:

  • 我们需要添加状态到我们的GitHub提交,这个状态是基于我们的Jenkins构建的结果。
  • 要做到这一点,我们需要让Jenkins访问GitHub API而不是repo,我们通过OAuth来做到这一点,我们可以创建指向GH settings -> Developer settings -> Personal access tokens的令牌,然后对于公共GH回购只需检查repo:status,对于私有回购检查整个回购区
  • 创建访问令牌后,您需要将其添加到Jenkins服务器:
  • 复制并粘贴访问令牌到GitHub插件部分设置,在ur 詹金斯配置
  • 创建一个GH服务器,默认为api.github.com,并添加访问令牌作为秘密文本凭据。
  • 最后一步是添加后构建设置当你创建你的管道。

< >强资源:< / >强

  • 下面是次视频的一个部分,他在其中进行了上述步骤。
  • 阅读有关OAuth