Bạn không đề cập đến ngôn ngữ kịch bản mà bạn muốn sử dụng, vì vậy tôi sẽ nói cụ thể về các yêu cầu HTTP đối với API BitBucket:
Giả định
Nếu bạn có Kho lưu trữ BitBucket có ba lần xác nhận trong đó lần đầu tiên và lần cuối cùng không thực hiện được quá trình xây dựng, phần giữa sẽ vượt qua:
Lấy danh sách các cam kết
Bạn có thể nhận danh sách các cam kết bằng cách gọi phương thức API sau:
https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits
owner
: RichardSater
repo_slug
: greencommitproofofconcept
Phản hồi trông như thế này:
{
"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",
...
}
]
}
Nếu bạn phân tích cú pháp JSON và lặp lại các câu trả lời, bạn có thể trích xuất các trạng thái từ:
values[n].links.statuses.href
Đâu n
là chỉ số, nghĩa là 0
, 1
hoặc 2
trong ví dụ trên. Nếu bạn xây dựng nó từ đầu thì nó sẽ ở định dạng sau.
Lấy danh sách các trạng thái từ cam kết
https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commit/{{sha}}/statuses"
owner
: RichardSater
repo_slug
: greencommitproofofconcept
sha
: 4768815fdc27abf4be17096e7c460f7f68f5d39b
Lưu ý: đây là API Hypermedia có nghĩa là các url có thể thay đổi, vì vậy tôi khuyên bạn nên sử dụng các liên kết từ phản hồi trước đó thay vì cố gắng tạo chúng từ đầu.
Phản hồi từ yêu cầu HTTP ở trên sẽ giống như:
{
"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
}
Từ phản hồi này, bạn có thể trích xuất state
bằng cách sử dụng:
values[n].state
Một lần nữa, đâu n
là status
- có thể có nhiều trong số chúng nếu một cam kết dẫn đến nhiều bản dựng.
Nếu trạng thái của bản dựng mà bạn quan tâm là SUCCESSFUL
thì bạn có câu trả lời của mình và bạn có thể trả lại ngay sha
cho cam kết.
Lặp lại tất cả các cam kết từ giai đoạn đầu tiên, nếu bạn hết các cam kết, hãy theo dõi next
trang link
được bao gồm trong lệnh gọi đến /commits
.
Sơ đồ dòng hoàn chỉnh
Ở mức cao, dòng chảy sẽ như thế này:
Đừng quên đây là API Hypermedia vì vậy bất cứ khi nào có thể, mã của bạn sẽ theo các liên kết trong API thay vì cố gắng "đoán chúng".