Anda tidak menyebutkan bahasa scripting yang ingin Anda gunakan, jadi saya akan berbicara secara khusus tentang permintaan HTTP ke API BitBucket:
Asumsi
Jika Anda memiliki Repositori BitBucket yang memiliki tiga commit di dalamnya, yang pertama dan yang terakhir gagal membangun, yang di tengah lewat:
- 4768815 ❌
- 49d7110 ✅
- 42d357f ❌
Dapatkan daftar komitmen
Anda bisa mendapatkan daftar komitmen dengan memanggil metode API berikut:
https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits
owner
: RichardSlater
repo_slug
: greencommitproofofconcept
Responsnya seperti ini:
{
"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",
...
}
]
}
Jika Anda menguraikan JSON dan mengulangi tanggapan, Anda dapat mengekstrak status dari:
values[n].links.statuses.href
Di mana n
indeks, yaitu 0
, 1
atau 2
dalam contoh di atas. Jika Anda membuat ini dari awal, itu akan dalam format berikut.
Dapatkan daftar status dari komit
https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commit/{{sha}}/statuses"
owner
: RichardSlater
repo_slug
: greencommitproofofconcept
sha
: 4768815fdc27abf4be17096e7c460f7f68f5d39b
Catatan: ini adalah API Hypermedia yang artinya url dapat berubah jadi saya akan merekomendasikan menggunakan tautan dari respons sebelumnya daripada mencoba membuatnya dari awal.
Respons dari permintaan HTTP di atas akan seperti:
{
"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
}
Dari respons ini Anda dapat mengekstrak state
menggunakan:
values[n].state
Lagi di mana n
adalah status
- mungkin ada banyak dari mereka jika salah satu komit mengakibatkan banyak membangun.
Jika keadaan untuk bangunan yang Anda pedulikan adalah SUCCESSFUL
maka Anda memiliki jawaban Anda dan Anda dapat segera mengembalikannya sha
untuk komit.
Ulangi semua komit dari fase pertama, jika Anda kehabisan komit, ikuti next
halaman link
yang termasuk dalam panggilan ke /commits
.
Diagram Alir Lengkap
Pada level tinggi, alirannya akan terlihat seperti ini:
Jangan lupa ini adalah Hypermedia API sehingga sedapat mungkin minta kode Anda untuk mengikuti tautan di API daripada mencoba untuk "menebaknya".