我们刚刚开始争取使用CI-CD,作为一个小小的步骤,我们将尝试每隔几个小时使用最新的绿色开发更新堆栈。我对Git / Bitbucket相当陌生,无法弄清楚如何确保Jenkins进行的结帐将最后一次提交由Jenkins标记为绿色,而不仅仅是“最后一次提交”作为笼统的声明。
我们已经安装了Bitbucket Build Status Notifier插件,因此Bitbucket会在运行单元测试后跟踪哪些提交是绿色的。有没有办法利用此信息来确保选择正确的提交?
我们刚刚开始争取使用CI-CD,作为一个小小的步骤,我们将尝试每隔几个小时使用最新的绿色开发更新堆栈。我对Git / Bitbucket相当陌生,无法弄清楚如何确保Jenkins进行的结帐将最后一次提交由Jenkins标记为绿色,而不仅仅是“最后一次提交”作为笼统的声明。
我们已经安装了Bitbucket Build Status Notifier插件,因此Bitbucket会在运行单元测试后跟踪哪些提交是绿色的。有没有办法利用此信息来确保选择正确的提交?
Answers:
您没有提及要使用的脚本语言,因此我将专门讨论对BitBucket API的HTTP请求:
如果您有一个其中包含三个提交的BitBucket存储库,则第一个和最后一个使构建失败,则中间正在通过:
您可以通过调用以下API方法获取提交列表:
https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits
owner
:理查德·斯莱特repo_slug
:绿色commitproofofconcept
响应如下所示:
{
"pagelen": 30,
"values": [
{
"hash": "4768815fdc27abf4be17096e7c460f7f68f5d39b",
"repository": { ... },
"links": {
...
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/RichardSlater/greencommitproofofconcept/commit/4768815fdc27abf4be17096e7c460f7f68f5d39b/statuses"
}
},
"author": { ... },
"parents": [ ... ],
"date": "2017-04-10T11:38:18+00:00",
"message": "README.md edited online with Bitbucket",
"type": "commit"
},
{
"hash": "49d7110b98616358d16055960a4abdf2926b890d",
...
},
{
"hash": "42d357f1df7a7d7bcf1f10a9f3a5a40d85d5b11c",
...
}
]
}
如果您解析JSON并遍历响应,则可以从以下位置提取状态:
values[n].links.statuses.href
n
索引在哪里,即0
,1
或2
在以上示例中。如果要从头开始构建此文件,它将采用以下格式。
https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commit/{{sha}}/statuses"
owner
:理查德·斯莱特repo_slug
:绿色commitproofofconceptsha
:4768815fdc27abf4be17096e7c460f7f68f5d39b
注意:这是一个Hypermedia API,这意味着URL 可能会更改,因此我建议使用上一个响应中的链接,而不是尝试从头开始生成它们。
来自上述HTTP请求的响应将类似于:
{
"pagelen": 10,
"values": [
{
"key": "POC-01",
"name": "Build #1",
"repository": { ... },
"url": "http://devops.stackexchange.com/q/809/397",
"links": { ... },
"refname": null,
"state": "FAILED",
"created_on": "2017-04-10T13:04:28.261734+00:00",
"updated_on": "2017-04-10T13:04:28.261759+00:00",
"type": "build",
"description": "Changes by Richard Slater"
}
],
"page": 1,
"size": 1
}
从此响应中,您可以提取出以下state
用法:
values[n].state
又哪里n
是status
-可能有很多人,如果一个提交导致许多版本。
如果您关心的构建状态是,SUCCESSFUL
则您有答案,可以立即返回sha
提交。
循环从第一阶段开始的所有提交,如果用尽了所有提交,请遵循对的调用中包含的next
页面。link
/commits
从高层次看,流程如下所示:
不要忘记这是一个Hypermedia API,因此您的代码应尽可能遵循API中的链接,而不要尝试“猜测”它们。
在典型的持续交付/部署管道中,将发生以下情况:
目的是避免从源代码构建解决方案两次,而要构建一次,然后多次部署。您可以在Sonartype Nexus中实施批准以定义环境批准过程,即Dev→Test→UAT→Stage→Production。
就是说...如果您已经阅读了之前的所有文章,但仍想从源代码管理中获取最新的绿色版本,则可以使用以下两种方法之一:
master-green
使用该标签master
。如果您想了解有关如何使用上述方法的具体细节,请随时发表后续问题。