有没有办法在我的项目的 GitHub Readme.md 上显示 Jenkins 构建状态?
我使用 Jenkins 来运行持续集成构建。每次提交后,它确保一切都编译,以及执行单元和集成测试,然后最终生成文档和发布包。
仍然存在不经意间做出破坏构建的事情的风险。访问 GitHub 项目页面的用户最好知道当前 master 处于该状态。
好的,这是设置 Jenkins 以设置 GitHub 构建状态的方法。这假设您已经拥有 Jenkins,并且配置了 GitHub 插件以在每次推送时进行构建。
转到 GitHub,登录,转到Settings,Developer Settings,Personal access tokens并单击Generate new token。
检查repo:status(我不确定这是必要的,但我做到了,它对我有用)。
生成令牌,复制它。
确保您要使用的 GitHub 用户是存储库协作者(对于私有存储库),或者是对您要构建的存储库具有推送和拉取访问权限(对于组织存储库)的团队成员。
转到您的 Jenkins 服务器,登录。
管理 Jenkins →配置系统
在GitHub Web Hook下选择Let Jenkins auto-manage hook URLs,然后指定您的 GitHub用户名和您在第 3 步中获得的OAuth 令牌。
验证它是否与“测试凭据”按钮一起使用。 保存设置。
找到 Jenkins 作业并将Set build status on GitHub commit添加到 post-build 步骤
就是这样。现在进行测试构建并转到 GitHub 存储库以查看它是否有效。单击主存储库页面中的分支以查看构建状态。
您应该看到绿色复选标记:
与此同时,Jenkins 和 GitHub 的 UI 发生了一些变化,我花了一段时间才弄清楚如何正确配置 Jenkins。这里的解释是基于 Jenkins 版本 2.121.1。
我还假设您已经配置了由 webhook 或轮询触发的 Jenkins 作业。这些是我为使其工作而采取的步骤:
repo:status
Configure System
并将 OAuth Secret 添加为GitHub 服务器-Secret Text
用作将 OAuth Secret 放入其中的身份验证方法。Set GitHub commit status
为构建后操作。将状态结果设置为One of the default messages and statuses
。您现在将看到提交和分支的状态:
我所做的很简单:
添加一个总是成功的发布任务插件
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!\"
}"
添加一个发布任务插件,如果“将构建标记为失败”,它将失败
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!\"
}"
您还可以在测试开始时添加对挂起的调用
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!\"
}"
这个插件应该可以工作:https ://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin
您应该能够将这样的徽章嵌入到您的README.md
文件中:
自 2013 年 4 月 26 日起,您现在可以在GitHub 存储库分支页面上查看构建状态:
这意味着这是另一种方式,通过访问 GitHub 项目页面,查看这些状态,而不是只有 Jenkins。
从 2013 年 4 月 30 日开始,提交状态的 API 端点已扩展为允许分支和标签名称,以及提交 SHA。
还有这个插件会给你一个徽章 url,你可以在你的 README.md 中发布它,看起来像这样
https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin
如果你的Github
插件上安装了插件Jenkins
,你可以这样做Post build actions
:
在您的README.md中添加以下行,并根据您的 jenkins 项目更改这两个 URL。
[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)
关于设置 Jenkins 和 GitHub 的受保护分支。我正在使用 Jenkins 2.6,这些是我为使其工作而采取的步骤:
在您的存储库的 GitHub 网页上:
在 Jenkins 服务器上:(确保已安装 Git 和 GitHub 插件)
此外,请确保您的 Jenkins 使用的 GitHub 帐户是存储库的协作者。我已将其设置为写入权限级别。
希望这可以帮助。
我按照亚历克斯的指示,它奏效了。
但是,对于 GitHub Enterprise,您需要在将服务器添加到 Jenkins 时修改 API URL。
例如,如果您的公司是 creditcard.com,那么您的 URL 将是
编辑:
我不再使用这种方法,请使用其他答案之一。
更新:对于我们的具体情况,我最终做了什么:( 以上答案很棒 - 谢谢!)
因为我们的构建服务器不在互联网上,所以我们有一个脚本可以将构建状态发布到 github 的 gh-pages 分支。
GitHub 缓存图像,因此我们创建了 .htaccess 文件,该文件指示构建状态图像的短暂缓存超时。
将它放在带有构建状态图像的目录中:
ExpiresByType image/png "access plus 2 minutes"
这是构建脚本。发布到 gh-pages 的目标是'--publish.site.dry.run'
配置不到 400 行,我们有:
. . 并且此脚本可以在 Jenkins 内部或外部运行,因此:
结果:
项目主页有构建状态,每次构建后更新,以及最新的 API 文档、测试结果和测试覆盖率。
Jently更新你的Github 提交状态(如上面@vonc 所述),不幸的是他们还没有实现Repo Status API
对于管道项目,您可以像这样使用post部分:
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 存储库。
添加到这个答案,还有这个他们已经回答了这个问题,但没有给我们关于这个问题的正确直觉
所以,这是我的直觉:
GH settings -> Developer settings -> Personal access tokens
然后用于公共 GH repo,只需检查 repo:status,对于私有 repo,请检查整个 repo部分资源: