คุณไม่ได้พูดถึงภาษาสคริปต์ที่คุณต้องการใช้ดังนั้นฉันจะพูดเฉพาะเกี่ยวกับคำขอ HTTP ไปยัง BitBucket API:
สมมติฐาน
หากคุณมีที่เก็บ BitBucketที่มีสามคอมมิทในคอมมิชชันแรกและอันสุดท้ายที่ไม่สามารถสร้างบิวด์กลางจะผ่าน:
- 4768815 ❌
- 49d7110 ✅
- 42d357f ❌
รับรายการคอมมิท
คุณสามารถรับรายการการกระทำได้โดยการเรียกวิธีการ 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
หมายเหตุ:นี่คือ 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 แทนที่จะพยายาม "เดาพวกเขา"