사용하려는 스크립팅 언어에 대해서는 언급하지 않았으므로 BitBucket API에 대한 HTTP 요청에 대해 구체적으로 이야기하겠습니다.
가정
첫 번째와 마지막 커밋이 빌드에 실패한 BitBucket Repository 가있는 경우 중간이 통과합니다.
커밋 목록 가져 오기
다음 API 메소드를 호출하여 커밋 목록을 얻을 수 있습니다.
https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits
owner
: RichardSlater
repo_slug
: 녹색 커밋 방지 개념
응답은 다음과 같습니다.
{
"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
: 녹색 커밋 방지 개념
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
는 IS status
- 많은 빌드에서 하나의 결과를 확약하는 경우 그들 중 많은 사람들이있을 수 있습니다.
관심있는 빌드의 상태 SUCCESSFUL
가 답이면 즉시 sha
커밋에 대한를 반환 할 수 있습니다 .
첫 번째 단계에서 모든 커밋을 반복합니다. 커밋이 부족하면 에 대한 호출에 포함 된 next
페이지 link
를 따르십시오 /commits
.
완전한 흐름도
높은 수준에서 흐름은 다음과 같습니다.
이것이 Hypermedia API 임을 잊지 마십시오. 가능하면 코드가 "추측"하려고하지 않고 API의 링크를 따라 가십시오.