Buildkite
ทางการจัดการไปป์ไลน์และบิลด์ของ Buildkite
คุณทำอะไรได้บ้างด้วย Buildkite MCP?
- ตรวจสอบบิลด์ล่าสุด — ขอให้ผู้ช่วยแสดงรายการบิลด์ล่าสุดของไปป์ไลน์และแสดงรายละเอียดของบิลด์ที่ระบุ โดยใช้
list_buildsและget_build - ตรวจสอบงานที่ล้มเหลว — ดึงรายการงาน อ่านหรือค้นหาบันทึก และติดตามเอาต์พุตเพื่อหาสาเหตุที่บิลด์ล้มเหลว โดยใช้
list_jobs,search_logsและtail_logs - ลองงานที่ล้มเหลวอีกครั้งอย่างปลอดภัย — ดูตัวอย่างงานที่จะลองใหม่ด้วยการจำลองการทำงานก่อน จากนั้นลองใหม่เฉพาะกรณีที่โครงสร้างพื้นฐานขัดข้องด้วย
retry_failed_jobsหรือลองงานเดียวอีกครั้งด้วยretry_job - รอบิลด์ที่กำลังทำงานอยู่ — ขอให้ผู้ช่วยรอจนกว่าบิลด์จะเสร็จสิ้นก่อนรายงานผล โดยใช้
wait_for_build - เปรียบเทียบบิลด์ — ถามว่า "มีอะไรเปลี่ยนแปลงบ้างนับตั้งแต่บิลด์นี้ทำงานได้ครั้งล่าสุดบน main?" แล้วดูการเปรียบเทียบระดับงานของขั้นตอนที่เริ่มล้มเหลวและขั้นตอนที่กลับมาทำงานได้อีกครั้ง
เอกสาร
buildkite-mcp-server
เซิร์ฟเวอร์ Model Context Protocol (MCP) ที่เปิดเผยข้อมูล Buildkite (pipelines, builds, jobs, tests) ให้เครื่องมือ AI และโปรแกรมแก้ไข
ดูเอกสารฉบับเต็มได้ที่ buildkite.com/docs/apis/mcp-server.
การลอง build ใหม่ด้วยสิทธิ์ที่จำกัด
ชุดเครื่องมือ retries รองรับการตรวจสอบความล้มเหลวและลอง jobs ใหม่โดยไม่ต้องมีสิทธิ์เขียน build ในวงกว้าง ซึ่งประกอบด้วย list_builds, get_build,
wait_for_build, list_jobs, get_job, search_logs, tail_logs, read_logs,
retry_job, และ retry_failed_jobs โดยต้องใช้ scopes read_builds,
read_build_logs, และ retry_builds ไม่ใช่ write_builds.
buildkite-mcp-server stdio --enabled-toolsets retries
retry_failed_jobs จะลองใหม่เฉพาะความล้มเหลวของโครงสร้างพื้นฐาน ใช้ตัวเลือก dry_run
เพื่อตรวจสอบรายการที่จะลองใหม่โดยไม่ดำเนินการจริง ส่วน retry_job
จะลอง job ที่ระบุใหม่ ทั้งสองเป็นเครื่องมือที่เปลี่ยนแปลงข้อมูลและไม่รวมอยู่ใน
--read-only ชุดเครื่องมือนี้ไม่มีการดำเนินการสร้างใหม่ สร้าง build ใหม่ ยกเลิก หรือปลดบล็อก
เครื่องมือลองใหม่ที่มีอยู่ยังคงใช้ได้ใน builds; การเลือก
builds หรือ all ยังคงต้องใช้ write_builds สำหรับการเปลี่ยนแปลงอื่น ๆ
API ของ Buildkite ต้องเปิดใช้ฟีเจอร์ RetryBuildsScope เพื่อให้เจ้าของโทเค็นยอมรับ
retry_builds; โทเค็น write_builds ที่มีอยู่ยังคงใช้ได้
Hosted MCP OAuth สามารถเลือกชุดเครื่องมือนี้ด้วย /mcp/x/retries เมื่อเซิร์ฟเวอร์ hosted
นำรีลีสที่มีฟีเจอร์นี้มาใช้ การเลือกชุดเครื่องมือผ่าน request headers
จะไม่เปลี่ยน OAuth scopes ของโทเค็นที่มีอยู่
สำหรับผู้ใช้ไลบรารี WithDisabledToolsets และชุดเครื่องมือที่ปิดใช้งานของ HTTP factory
จะยกเว้นสมาชิกทั้งหมดของชุดเครื่องมือเหล่านั้น แม้จะอยู่ในกลุ่มที่ทับซ้อนกันก็ตาม
ตัวอย่างเช่น การปิดใช้ logs จะนำเครื่องมือ log ออกจาก retries ด้วย;
การปิดใช้ retries จะนำเครื่องมือตรวจสอบและลองใหม่ออกจากกลุ่มอื่น ๆ ด้วย
การกำหนดค่า pipelines ของ GitHub Actions
create_pipeline และ update_pipeline รองรับ provider_settings และ
branch_configuration ของ GitHub หากไม่ระบุคีย์ provider ระบบจะใช้ค่าเริ่มต้นของ API เมื่อสร้าง
หรือคงค่าเดิมไว้เมื่ออัปเดต ค่า false ที่ระบุไว้อย่างชัดเจนจะยังคงอยู่ ตั้งค่า
filter_condition หรือ pull_request_branch_filter_configuration เป็น null
เพื่อล้างค่า โดยสตริงว่างจะถูกส่งเป็นสตริงว่าง ตั้งค่า branch_configuration: null ขณะอัปเดต
เพื่อล้างตัวกรอง branch ที่มีอยู่ เมื่อสร้าง หากไม่ระบุตัวกรอง branch เป็น null หรือเป็นค่าว่าง
ระบบจะใช้ค่าเริ่มต้น null ของ API การตอบกลับแบบเต็มของ get_pipeline และ
list_pipelines จะคงการตั้งค่า GitHub ที่รองรับไว้ สตริงการตอบกลับของ go-buildkite
ไม่สามารถแยกความแตกต่างระหว่าง null กับค่าว่างได้ จึงไม่ควรสร้างการอัปเดตบางส่วนขึ้นใหม่จากข้อมูลที่อ่านกลับมา
ทำตาม การตั้งค่า GitHub Actions ด้วยตนเอง.
ตั้งค่า skip_queued_branch_builds และ cancel_running_branch_builds ที่ครอบคลุมทั้ง branch
เป็น false เพื่อหลีกเลี่ยงการข้ามหรือยกเลิก workflow builds อื่นใน branch เดียวกัน ใช้
create_webhook: false: การตั้งค่า provider ไม่ได้จัดเตรียม trigger เฉพาะสำหรับ GitHub
Actions หรือ webhook ของ trigger นั้น และเครื่องมือ webhook ที่มีอยู่จะสร้าง webhook
แบบดั้งเดิมของ repository ความพร้อมใช้งานของฟีเจอร์ฝั่งเซิร์ฟเวอร์และสิทธิ์ของโทเค็นยังคงมีผล
การยอมรับการตั้งค่าไม่ได้ยืนยันว่า workflow จะทำงานได้
เมื่อสร้าง ให้ระบุ configuration ที่ไม่ใช่ค่าว่าง หรือ pipeline_template_uuid
ที่ได้รับอนุมัติ แต่ห้ามระบุทั้งสองอย่าง เมื่ออัปเดต ให้เว้น pipeline_template_uuid
ไว้เพื่อคงการกำหนดเดิม ระบุ UUID เพื่อกำหนด template โดยไม่ใช้ configuration
หรือส่ง null เพื่อนำออก การนำออกอาจระบุ configuration ใหม่ได้ด้วย
API จะบังคับใช้ข้อกำหนดการกำหนดค่าและนโยบาย template ขององค์กร การตอบกลับ pipeline แบบเต็ม
จะคง UUID ที่กำหนดไว้ ส่วน go-buildkite จะละเว้นฟิลด์นี้เมื่อการกำหนดในคำตอบเป็น null หรือไม่มีอยู่
ใช้ get_pipeline_github_webhook_processing,
enable_pipeline_github_webhook_processing, และ
disable_pipeline_github_webhook_processing เพื่อตรวจสอบหรือเปลี่ยนการประมวลผล
GitHub webhook แบบดั้งเดิม เครื่องมือเหล่านี้ใช้ GET/PUT/DELETE github-webhooks ไม่ใช่
endpoint สำหรับสร้าง POST webhook เครื่องมือเหล่านี้จะไม่ลบ repository webhooks หรือ
เปลี่ยน dedicated GitHub Actions triggers การตอบกลับจะคง enabled และข้อมูลเมตา
disabled_at กับ disabled_by ที่เป็น nullable ไว้; disabled_by คือชื่อผู้ใช้
ทั้งสามเครื่องมือต้องใช้ Full Access, pipeline ประเภท GitHub หรือ GitHub Enterprise และ
องค์กรต้องลงทะเบียนใช้ expanded webhook triggers การเรียก GET ต้องใช้ read_pipelines;
การเปิด/ปิดต้องใช้ write_pipelines และจะไม่รวมในโหมดอ่านอย่างเดียว ข้อผิดพลาด 404 อาจหมายถึง
ไม่มี controls เหล่านี้ ไม่ได้หมายความว่าไม่มี pipeline ระบบจะแสดง API errors โดยไม่ถือว่าความล้มเหลว
หมายถึงสถานะปิดใช้งาน
สัญญาการทำงานเหล่านี้ผ่านการทดสอบด้วย HTTP fixtures สังเคราะห์ในเครื่อง ความพร้อมใช้งานบน hosted, สิทธิ์, การคงข้อมูล และการทำงานของ workflow ต้องตรวจสอบแยกต่างหาก การทำงานสำเร็จในเครื่อง ไม่ได้ยืนยันว่าระบบที่ deploy แล้วรองรับ การจัดการ dedicated GitHub Actions trigger ไม่รวมอยู่ด้วย
การเปรียบเทียบ builds
เครื่องมืออ่านอย่างเดียว compare_builds ในชุดเครื่องมือ investigations ตอบคำถาม เช่น
“มีอะไรเปลี่ยนไปบ้างนับจาก build นี้ทำงานได้ครั้งล่าสุดบน main?” ระบุ org_slug,
pipeline_slug และ build_number เป้าหมาย ระบบจะเลือก build ก่อนหน้าที่สร้างล่าสุด
ซึ่งขณะนี้ผ่านแล้ว บน pipeline เดียวกันและ branch เดียวกันแบบตรงกัน โดยไม่กำหนดว่า baseline
ต้องผ่านแล้วในเวลาที่ target เริ่มทำงาน ระบุ baseline_build_number เพื่อเปรียบเทียบกับ build
ที่เจาะจงใน pipeline นั้นแทน ซึ่งอาจเป็น build ที่ล้มเหลวหรืออยู่บน branch อื่นก็ได้
คำตอบจะระบุ baseline และกฎการเลือก นับผลลัพธ์จาก jobs ทั้งหมด และส่งคืนการเปรียบเทียบ jobs
สูงสุด 100 รายการ โดยจัดลำดับให้ jobs ที่เพิ่งล้มเหลว กลับมาทำงานได้ และยังคงล้มเหลวอยู่มาก่อน
การจับคู่ใช้ step keys, job type, ค่า matrix และ parallel index/total เมื่อทั้งสอง jobs ไม่มี keys
ระบบจะใช้ชื่อที่ไม่ว่างและตรงกันทุกประการร่วมกับ type, group key, ค่า matrix และ parallel index/total
เป็นทางเลือก โดยใช้เฉพาะเมื่อชุดค่าดังกล่าวไม่ซ้ำกันในแต่ละ build คู่ที่จับคู่ได้จะแสดง
match_method: "step_key" หรือ "name_fallback"; การจับคู่ด้วยวิธีสำรองจะแสดงคำเตือนว่าเป็นการจับคู่แบบคาดเดา
jobs ที่ไม่มีชื่อและไม่มี key รวมถึงตัวตนที่ซ้ำกันจะจับคู่ไม่ได้ keys ที่ระบุไว้อย่างชัดเจนจะไม่ใช้ชื่อเป็นทางเลือก
แม้ key จะถูกเพิ่ม ลบ หรือเปลี่ยนระหว่าง builds ก็ตาม รายการที่เพิ่ม/ลบหมายถึงตัวตนของ job
ปรากฏอยู่ใน build เพียงรายการเดียว ดังนั้นการเปลี่ยนชื่อ jobs ที่ไม่มี key หรือการเปลี่ยนค่า matrix
หรือ parallelism ก็อาจทำให้เกิดรายการเพิ่ม/ลบได้ ระบบจะไม่นับ attempts ที่ลองใหม่ แต่จะแสดงสถานะ
ของ attempt สุดท้ายและจำนวนครั้งที่ลองใหม่
เวลาทำงานและส่วนต่างจะครอบคลุมเฉพาะ attempts สุดท้าย เวลาจัดตารางคือช่วงจาก
scheduled_at ถึง started_at ไม่ใช่เวลารอ dependency หรือการดำเนินการด้วยตนเอง
ข้อมูลเหล่านี้ไม่ใช่การเปรียบเทียบเวลารวมของ build หรือค่าใช้จ่ายรวมจากการลองใหม่ หาก timestamp
ขาดหายหรือไม่สอดคล้องกัน ระบบจะไม่แสดงเวลาที่เกี่ยวข้อง builds ที่ยังไม่เสร็จจะระบุไว้อย่างชัดเจนว่า
เป็น snapshot ที่อาจเปลี่ยนแปลงได้
การเปลี่ยนแปลงใด ๆ ใน soft_failed จะรายงานเป็น state_changed:
การเปลี่ยนระหว่างความล้มเหลวแบบ soft และ hard แม้ทั้งสอง jobs จะมีสถานะ failed
และการเปลี่ยนระหว่าง jobs ที่ผ่านกับ jobs ที่ soft-failed ซึ่งจะไม่รายงานเป็น newly_failing
หรือ recovered เพราะ soft failure ไม่ได้ขัดขวาง build build baseline ที่ผ่านแล้วอาจมี jobs
ที่ soft-failed ได้
โดยค่าเริ่มต้น jobs ที่เพิ่งเกิดความล้มเหลวซึ่งขัดขวางการทำงานสูงสุดสามรายการจะแสดง log 20 รายการล่าสุด:
เริ่มจาก jobs newly_failing ก่อน ตามด้วย jobs state_changed ที่กลายเป็น hard failure
เช่น job ที่ soft-failed ใน baseline แต่ละรายการจำกัดเนื้อหา log ไว้ที่ 8 KiB ตั้งค่า
include_logs: false เพื่อละเว้น logs ข้อผิดพลาดของ log จะไม่ทำให้การเปรียบเทียบถูกทิ้ง
ยกเว้นข้อผิดพลาดการยืนยันตัวตน HTTP 401 ซึ่งจะส่งต่อผ่านเส้นทางการยืนยันตัวตนใหม่ของเซิร์ฟเวอร์
เครื่องมือนี้ต้องใช้ scopes read_builds และ read_build_logs ใช้
get_build_failure_summary หรือ tail_logs เพื่อตรวจสอบเพิ่มเติม; step ที่ล้มเหลวร่วมกัน
ไม่ได้ยืนยันว่ามีสาเหตุรากเดียวกัน หรือทำให้การลองใหม่ปลอดภัย
การค้นหา baseline จะตรวจสอบ candidates ได้สูงสุด 500 รายการ หากไม่พบ ระบบจะแจ้งว่าไม่ได้ทำการเปรียบเทียบ และขอให้ระบุ baseline อย่างชัดเจน รายการ jobs จำกัดไว้ที่ 1,000 jobs ต่อ build; หากมีมากกว่านั้น ระบบจะแสดงข้อผิดพลาดแทนการแสดงผลเพิ่ม/ลบที่ไม่ครบถ้วน ระบบจะแจ้งรายการผลลัพธ์ที่ละเว้นแยกต่างหาก จากจำนวนผลลัพธ์ทั้งหมดที่ครบถ้วน
การตรวจสอบ workflows ของ Test Engine
เครื่องมืออ่านอย่างเดียว list_test_workflows และ get_test_workflow ในชุดเครื่องมือ
tests จะแสดง monitors, filters, การดำเนินการแจ้งเตือน/กู้คืน และลิงก์
ที่กำหนดค่าไว้สำหรับ suite ทั้งสองต้องใช้ read_suites และสิทธิ์เข้าถึง suite ระบุ
org_slug และ test_suite_slug (slug หรือ UUID) เพื่อแสดงรายการ workflows:
{"org_slug": "acme", "test_suite_slug": "backend"}
หากต้องการตรวจสอบรายการใดรายการหนึ่ง ให้เรียก get_test_workflow โดยใช้ organization และ suite
เดียวกัน และส่ง id ของรายการนั้นเป็น workflow_id.
ใช้ labels ที่กำหนดค่าไว้ร่วมกับ list_tests เพื่อค้นหา tests ที่ทำเครื่องหมายไว้; labels
เพียงอย่างเดียวไม่ได้จัดอันดับความไม่เสถียร workflows อธิบายการกำหนดค่า ไม่ใช่หลักฐานว่ามีการดำเนินการ
หรือประวัติเหตุการณ์ เครื่องมือทั้งสองจะแทนที่ webhook endpoints ด้วย [REDACTED] เสมอ
ไม่ว่าผู้เรียกจะมีสิทธิ์ API ใดก็ตาม
การตรวจสอบ span aggregates ของ Test Engine
ชุดเครื่องมืออ่านอย่างเดียว tests มีเครื่องมือ span aggregate สี่รายการที่ต้องใช้
read_suites:
list_span_aggregate_scopes: ระบุorg_slug,test_suite_slugและperiodซึ่งเป็นตัวเลือก เพื่อแสดงรายการ instrumentation scopes โดยเรียงตามระยะเวลารวม ต้องเปิดใช้การรับข้อมูล OTel traces aggregates มีความละเอียดระดับชั่วโมงและเก็บรักษาไว้หนึ่งเดือน ช่วงเวลาที่ร้องขอต้องอยู่ภายในขอบเขตประวัติ API ขององค์กรlist_span_aggregate_scopes_for_build: ระบุorg_slugและbuild_uuidเพื่อแสดงรายการ instrumentation scopes ใน suites ที่มองเห็นได้ของ build ต้องเปิดใช้การรับข้อมูล OTel traces และต้องมีสิทธิ์เข้าถึง pipeline ของ buildlist_span_aggregate_names: ระบุorg_slug,test_suite_slugและscope_nameเพื่อดูสถิติชื่อ spans ของ suite รองรับค่าperiodและการเก็บรักษาแบบเดียวกับlist_span_aggregate_scopesรวมถึงตัวเลือกsortและlimitที่อธิบายไว้ด้านล่าง ต้องเปิดใช้การรับข้อมูล OTel traceslist_span_aggregate_names_for_build: ระบุorg_slug,build_uuid(ไม่ใช่ หมายเลข build ของ pipeline) และscope_nameเพื่อดูสถิติชื่อ spans ใน suites ที่มองเห็นได้ของ build ใช้สตริงว่างสำหรับ scope ที่ไม่มีชื่อ ต้องมีสิทธิ์เข้าถึง pipeline ของ buildsortซึ่งเป็นตัวเลือก มีค่าเริ่มต้นเป็น-totalและlimitมีค่าเริ่มต้นเป็น 20 (สูงสุด 100) ตรวจสอบspan_names_truncatedก่อนถือว่าผลลัพธ์ครบถ้วน
ระยะเวลามีหน่วยเป็น nanoseconds ผลรวมคือผลรวมของระยะเวลา spans ไม่ใช่การวัดเวลาตามนาฬิกา
ค่า p50 และ p95 เป็นค่าประมาณ ไม่มีเครื่องมือ span aggregate ใดรองรับการแบ่งหน้า เครื่องมือชื่อ spans
ทั้งสองยอมรับ scope_name ที่เป็นค่าว่างสำหรับ scope ที่ไม่มีชื่อ และส่งคืน
span_names_truncated เมื่อมีชื่อเพิ่มเติม
การใช้งานไลบรารี
ควรถือว่า Go API ที่ส่งออกของโมดูลนี้ยังไม่เสถียร และอาจมีการเปลี่ยนแปลงที่ทำให้ใช้งานร่วมกันไม่ได้ ขณะที่เราพัฒนาโปรเจกต์นี้ต่อไป
ความปลอดภัย
เพื่อให้แน่ใจว่าเซิร์ฟเวอร์ MCP ทำงานในสภาพแวดล้อมที่ปลอดภัย เราแนะนำให้เรียกใช้ใน container
อิมเมจนี้สร้างจาก cgr.dev/chainguard/static และทำงานในฐานะผู้ใช้ที่ไม่มีสิทธิ์ระดับสูง
การส่งต่อ identity headers ผ่านโหมด HTTP
การติดตั้ง HTTP แบบ self-hosted สามารถส่งต่อ headers ที่เลือกไว้จาก MCP request ขาเข้าแต่ละรายการไปยัง API ของ Buildkite ได้:
BUILDKITE_API_TOKEN=bkua_xxx \
buildkite-mcp-server http \
--passthrough-http-header X-User-Identity
ระบุ --passthrough-http-header ซ้ำเพื่ออนุญาตให้ใช้ headers ได้มากกว่าหนึ่งรายการ หรือกำหนดค่า
BUILDKITE_PASSTHROUGH_HTTP_HEADERS เป็นรายการที่คั่นด้วยจุลภาค ระบบจะส่งต่อเฉพาะ headers ที่อนุญาตไว้อย่างชัดเจน
และส่งต่อไปยัง origin ที่กำหนดค่าไว้ใน BUILDKITE_BASE_URL เท่านั้น โดยจะนำ headers เหล่านี้ออก
จาก requests ที่ถูก redirect ไปที่อื่น
หากต้องการยืนยันตัวตน MCP request แต่ละรายการด้วย Buildkite API token ของตนเอง ให้อนุญาต
Authorization และไม่ต้องระบุ token ระดับ process:
BUILDKITE_PASSTHROUGH_HTTP_HEADERS=Authorization \
buildkite-mcp-server http
ในโหมดนี้ ทุก request ของ /mcp ต้องมี header Authorization
ที่ไม่ว่างเพียงรายการเดียว หากไม่มีข้อมูลรับรอง ระบบจะตอบกลับ HTTP 401; เซิร์ฟเวอร์จะไม่ใช้
API token ที่ใช้ร่วมกันเป็นทางเลือก reverse proxy ที่อยู่หน้าเซิร์ฟเวอร์ MCP มีหน้าที่ตรวจสอบสิทธิ์ผู้เรียก
และกำหนดหรือตรวจสอบ identity headers ที่ส่งต่อ
ไม่รองรับการส่งต่อส่วนหัวในโหมด stdio ก่อนให้บริการบันทึกงาน เซิร์ฟเวอร์จะตรวจสอบว่าผู้เรียกปัจจุบันสามารถเข้าถึงบันทึกงานได้ การตรวจสอบนี้จะดำเนินการกับทุกคำขอใช้เครื่องมือบันทึก รวมถึงกรณีที่ข้อมูลบันทึกถูกแคชไว้แล้ว
การมีส่วนร่วม
แนวทางการพัฒนาอยู่ใน DEVELOPMENT.md.
ใบอนุญาต
MIT © Buildkite
SPDX-License-Identifier: MIT