เวิร์กโฟลว์ข้ามคลังโค้ด
เรียนรู้การเชื่อมเวิร์กโฟลว์ระหว่างคลังโค้ดต่าง ๆ เพื่อจัดการสิ่งที่ต้องพึ่งพาและประสานการนำไปใช้งานที่ซับซ้อน
เวิร์กโฟลว์ข้ามคลังโค้ด เป็นบทเรียน CI/CD with GitHub Actions & DevOps Pipelines ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CI/CD with GitHub Actions & DevOps Pipelines และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CI/CD with GitHub Actions & DevOps Pipelines มีบทเรียนทั้งหมด 4 บทเรียน
บทนำสู่เวิร์กโฟลว์ข้ามคลัง
ในการพัฒนาซอฟต์แวร์สมัยใหม่ แอปพลิเคชันมักประกอบด้วยหลายองค์ประกอบที่กระจายอยู่ในคลังต่าง ๆ ลองนึกถึงไมโครเซอร์วิส ไลบรารีที่ใช้ร่วมกัน หรือการกำหนดค่าการปรับใช้ที่แยกกัน
การประสานงานเวิร์กโฟลว์ข้ามคลังที่แยกจากกันเหล่านี้ช่วยให้มีความเป็นโมดูลและแยกขอบเขตความรับผิดชอบได้ดียิ่งขึ้น บทเรียนนี้จะสำรวจวิธีดำเนินการดังกล่าวด้วย GitHub Actions
เหตุใดจึงต้องประสานงานข้ามคลัง
ตามปกติแล้ว เวิร์กโฟลว์ GitHub Actions จะอยู่ภายในขอบเขตของคลังเดียว แต่ถ้าคุณต้องการสิ่งต่อไปนี้:
- สร้างอาร์ติแฟกต์ในคลังหนึ่ง แล้วเรียกใช้การปรับใช้ในอีกคลังหนึ่ง
- ใช้คลังกำหนดค่าร่วมเพื่อเรียกใช้การอัปเดตในคลังบริการหลายแห่ง
- บังคับใช้นโยบายความปลอดภัยที่จัดการจากคลังส่วนกลางกับคลังอื่นทั้งหมด
เวิร์กโฟลว์ข้ามคลังช่วยแก้ปัญหาสถานการณ์ที่ซับซ้อนเหล่านี้ได้
การเชื่อมต่อคลัง: `repository_dispatch`
GitHub Actions มีประเภทเหตุการณ์พิเศษที่เรียกว่า repository_dispatch ซึ่งทำหน้าที่คล้ายเว็บฮุกที่กำหนดเองสำหรับคลัง GitHub ของคุณ
- เวิร์กโฟลว์หนึ่ง (ผู้ส่ง) จะส่งคำขอ API ไปยัง GitHub
- เวิร์กโฟลว์อีกตัวหนึ่ง (ผู้รับ) ในคลังอื่นจะรอฟังเหตุการณ์เฉพาะนี้
วิธีนี้ช่วยให้เรียกใช้เวิร์กโฟลว์ข้ามคลังต่าง ๆ ได้โดยทางโปรแกรม
การตั้งค่าเวิร์กโฟลว์ผู้รับ
หากต้องการรับเหตุการณ์ repository_dispatch เวิร์กโฟลว์ในคลังเป้าหมายต้องได้รับการกำหนดค่าให้รอฟังเหตุการณ์นี้ โดยใช้คีย์เวิร์ด on:
เวิร์กโฟลว์ใน repo-B อาจมีลักษณะดังนี้:
name: Receive Dispatch Event
on:
repository_dispatch:
types: [my-custom-event]
jobs:
process-event:
runs-on: ubuntu-latest
steps:
- name: Log event payload
run: |
echo "Event type: ${{ github.event.action }}"
echo "Payload: ${{ toJSON(github.event.client_payload) }}"ทำความเข้าใจการกำหนดค่าผู้รับ
ในตัวอย่างก่อนหน้านี้:
on: repository_dispatch:แจ้งให้ GitHub รอฟังเหตุการณ์นี้types: [my-custom-event]ระบุว่าเวิร์กโฟลว์นี้จะทำงานเฉพาะเมื่อเหตุการณ์ที่ส่งมามีประเภทmy-custom-eventคุณสามารถกำหนดได้หลายประเภทgithub.event.actionจะมีประเภทของเหตุการณ์อยู่ (เช่นmy-custom-event)github.event.client_payloadเก็บข้อมูลที่กำหนดเองซึ่งส่งมาพร้อมกับการส่งเหตุการณ์
การเรียกใช้งานเหตุการณ์: การส่งจากที่เก็บโค้ดอื่น
หากต้องการเรียกใช้งานเหตุการณ์ repository_dispatch คุณต้องส่งคำขอ HTTP POST ไปยังส่วนติดต่อโปรแกรมประยุกต์ของ GitHub โดยสามารถดำเนินการได้ด้วย curl หรือส่วนติดต่อบรรทัดคำสั่งของ GitHub (gh cli) จากภายในเวิร์กโฟลว์ GitHub Actions อื่นหรือสคริปต์
ข้อกำหนดสำคัญ:
- เจ้าของและชื่อของที่เก็บโค้ดเป้าหมาย
typeของเหตุการณ์ที่เวิร์กโฟลว์ผู้รับกำลังรอรับclient_payloadสำหรับข้อมูลที่กำหนดเอง- โทเค็นการเข้าถึงส่วนบุคคลของ GitHub (PAT) ที่มีขอบเขต
repo
ตัวอย่าง: การส่งเหตุการณ์ด้วย `gh cli`
นี่คือตัวอย่างเวิร์กโฟลว์ใน repo-A ที่ส่งเหตุการณ์ไปยัง repo-B โปรดสังเกตว่าเราใช้ข้อมูลลับสำหรับโทเค็นและส่ง client_payload ไปด้วย
name: Trigger Deploy Workflow
on:
push:
branches: [main]
jobs:
dispatch:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install GitHub CLI
run: sudo apt-get update && sudo apt-get install gh -y
- name: Dispatch event to repo-B
env:
GH_TOKEN: ${{ secrets.CROSS_REPO_PAT }}
run: |
gh api \
--method POST \
-H "Accept: application/vnd.github.v3+json" \
/repos/YOUR_ORG/repo-B/dispatches \
-f event_type='my-custom-event' \
-f client_payload='{"ref":"${{ github.ref }}", "sha":"${{ github.sha }}"}'การรักษาความปลอดภัยในการเข้าถึงระหว่างที่เก็บโค้ด
GITHUB_TOKEN เริ่มต้นที่เวิร์กโฟลว์ได้รับนั้นจำกัดอยู่เฉพาะที่เก็บโค้ดซึ่งเวิร์กโฟลว์กำลังทำงานอยู่ หากต้องการเรียกใช้งานเหตุการณ์ในที่เก็บโค้ด *อื่น* คุณต้องใช้โทเค็นที่มีสิทธิ์กว้างขึ้น
- ใช้ โทเค็นการเข้าถึงส่วนบุคคล (PAT) ที่มีขอบเขต
repo - จัดเก็บ PAT นี้เป็น ข้อมูลลับของที่เก็บโค้ด (เช่น
CROSS_REPO_PAT) ในที่เก็บโค้ดที่เป็นผู้เรียก - อย่าเขียนค่า PAT ไว้ตายตัวโดยตรงในไฟล์เวิร์กโฟลว์
การส่งข้อมูลที่กำหนดเองด้วย `client_payload`
client_payload คือออบเจ็กต์ JSON ที่คุณสามารถใส่ไว้เมื่อส่งเหตุการณ์ ซึ่งมีความสำคัญอย่างยิ่งสำหรับการส่งบริบทหรือข้อมูลจากเวิร์กโฟลว์ที่เรียกใช้งานไปยังเวิร์กโฟลว์ที่รับข้อมูล
ตัวอย่างข้อมูลที่คุณอาจส่งไป:
- ค่า SHA ของการส่งยืนยันหรือชื่อสาขาที่เรียกใช้งานการสร้าง
- เป้าหมายสภาพแวดล้อม (เช่น "staging", "production")
- หมายเลขรุ่นของสิ่งประดิษฐ์ที่จะนำไปใช้งาน
โปรดจำไว้ว่า client_payload จะปรากฏในบันทึกการทำงานของเวิร์กโฟลว์ ดังนั้นควรหลีกเลี่ยงข้อมูลละเอียดอ่อน
ตรวจสอบความเข้าใจอย่างรวดเร็วเกี่ยวกับเวิร์กโฟลว์ข้ามที่เก็บโค้ด
คุณได้เรียนรู้วิธีประสานงานเวิร์กโฟลว์ระหว่างที่เก็บโค้ด GitHub ต่าง ๆ แล้ว มาตรวจสอบความเข้าใจองค์ประกอบสำคัญกัน
สรุป: การประสานงานระหว่างที่เก็บโค้ด
คุณได้เรียนรู้วิธีนำเวิร์กโฟลว์ข้ามที่เก็บโค้ดมาใช้งานด้วย repository_dispatch สำเร็จแล้ว!
- เหตุผล: เพื่อจัดการการพึ่งพาและประสานงานการนำไปใช้งานที่ซับซ้อนระหว่างที่เก็บโค้ดหลายแห่ง
- วิธีการ: เวิร์กโฟลว์ผู้ส่งเรียกใช้ส่วนติดต่อโปรแกรมประยุกต์ของ GitHub ซึ่งจะเรียกใช้งานเวิร์กโฟลว์ผู้รับในที่เก็บโค้ดอื่น
- ส่วนสำคัญ: ชนิดเหตุการณ์
repository_dispatchและค่าtypesที่ตรงกันในเวิร์กโฟลว์ผู้รับ - ข้อมูล: ใช้
client_payloadเพื่อส่งข้อมูลที่ไม่ละเอียดอ่อนระหว่างเวิร์กโฟลว์ - ความปลอดภัย: ใช้ PAT ที่มีขอบเขต
repoและจัดเก็บเป็นข้อมูลลับเสมอสำหรับการเข้าถึงข้ามที่เก็บโค้ด
ความสามารถอันทรงพลังนี้ช่วยให้มีไปป์ไลน์ CI/CD ที่ยืดหยุ่นสูงและแยกออกจากกันได้
คำถามที่พบบ่อย
บทเรียน “เวิร์กโฟลว์ข้ามคลังโค้ด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เวิร์กโฟลว์ข้ามคลังโค้ด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CI/CD with GitHub Actions & DevOps Pipelines ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CI/CD with GitHub Actions & DevOps Pipelines มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เวิร์กโฟลว์ข้ามคลังโค้ด”
เรียนรู้การเชื่อมเวิร์กโฟลว์ระหว่างคลังโค้ดต่าง ๆ เพื่อจัดการสิ่งที่ต้องพึ่งพาและประสานการนำไปใช้งานที่ซับซ้อน คุณปฏิบัติ CI/CD with GitHub Actions & DevOps Pipelines ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CI/CD with GitHub Actions & DevOps Pipelines หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน CI/CD with GitHub Actions & DevOps Pipelines บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “เวิร์กโฟลว์ข้ามคลังโค้ด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน CI/CD with GitHub Actions & DevOps Pipelines นี้ได้ไหม
ได้ บทเรียน CI/CD with GitHub Actions & DevOps Pipelines ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- CI/CD สำหรับคลังโค้ดแบบรวม
- เวิร์กโฟลว์ข้ามคลังโค้ด
- การจัดการเวิร์กโฟลว์แบบรวมศูนย์
- การกรองเส้นทางและการสร้างแบบเลือกเฉพาะ