使用するスクリプト言語については何も触れていないので、特にBitBucket APIへのHTTPリクエストについて説明します。
仮定
最初と最後の3つのコミットが含まれているBitBucketリポジトリがある場合、最初と最後のビルドでエラーが発生し、中間は合格です。
コミットのリストを取得する
次のAPIメソッドを呼び出すことで、コミットのリストを取得できます。
https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits
owner
:RichardSlater
repo_slug
:greencommitproofofconcept
応答は次のようになります。
{
"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
:RichardSlater
repo_slug
:greencommitproofofconcept
sha
:4768815fdc27abf4be17096e7c460f7f68f5d39b
注:これはハイパーメディア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
完全なフロー図
高レベルでは、フローは次のようになります。
これはハイパーメディアAPIであることを忘れないでください。可能な限り、コードを「推測」するのではなく、APIのリンクをたどってください。