0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · บทเรียน

เวิร์กโฟลว์ข้ามคลังโค้ด

เรียนรู้การเชื่อมเวิร์กโฟลว์ระหว่างคลังโค้ดต่าง ๆ เพื่อจัดการสิ่งที่ต้องพึ่งพาและประสานการนำไปใช้งานที่ซับซ้อน

เวิร์กโฟลว์ข้ามคลังโค้ด เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. CI/CD สำหรับคลังโค้ดแบบรวม
  2. เวิร์กโฟลว์ข้ามคลังโค้ด
  3. การจัดการเวิร์กโฟลว์แบบรวมศูนย์
  4. การกรองเส้นทางและการสร้างแบบเลือกเฉพาะ
← กลับไปที่ CI/CD with GitHub Actions & DevOps Pipelines