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

การกรองเส้นทางและการสร้างแบบเลือกเฉพาะ

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

การกรองเส้นทางและการสร้างแบบเลือกเฉพาะ เป็นบทเรียน CI/CD with GitHub Actions & DevOps Pipelines ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CI/CD with GitHub Actions & DevOps Pipelines และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CI/CD with GitHub Actions & DevOps Pipelines มีบทเรียนทั้งหมด 4 บทเรียน

ปัญหาการสร้างโดยเปล่าประโยชน์

ในโมโนรีโพ การเปลี่ยนแปลงเอกสารไม่ควรทำให้ต้องสร้างและนำระบบแบ็กเอนด์ ฟรอนต์เอนด์ และแอปมือถือไปใช้งานใหม่

การสร้างแบบเลือกเฉพาะส่วนจะทำงานเฉพาะส่วนของไปป์ไลน์ที่ได้รับผลกระทบจากการเปลี่ยนแปลง ช่วยประหยัดเวลาและนาทีการทำงานของตัวรันเนอร์

ตัวกรองเส้นทางบนทริกเกอร์

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

on:
  push:
    paths:
      - 'services/api/**'

การไม่รวมเส้นทาง

คุณสามารถทำในทางกลับกันด้วย paths-ignore โดยให้เวิร์กโฟลว์ทำงานกับทุกอย่าง ยกเว้นเส้นทางที่ระบุ

เหมาะสำหรับข้าม CI เมื่อมีการเปลี่ยนแปลงเฉพาะเอกสาร

on:
  push:
    paths-ignore:
      - 'docs/**'
      - '**.md'

ข้อจำกัดของตัวกรองทริกเกอร์

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

สำหรับกรณีนี้ ให้ตรวจหาการเปลี่ยนแปลงภายในเวิร์กโฟลว์ แล้วเลือกแขนงตามผลลัพธ์

แอ็กชันตรวจหาการเปลี่ยนแปลง

แอ็กชัน dorny/paths-filter จะตรวจสอบส่วนต่างและส่งออกค่าบูลีนสำหรับกลุ่มเส้นทางแต่ละกลุ่มที่ตั้งชื่อไว้

งานถัดไปจะอ่านค่าผลลัพธ์เหล่านี้เพื่อตัดสินใจว่าจะทำงานหรือไม่

  - uses: dorny/paths-filter@v3
    id: changes
    with:
      filters: |
        api:
          - 'services/api/**'
        web:
          - 'services/web/**'

กำหนดเงื่อนไขให้งานทำงานตามการเปลี่ยนแปลง

งานตรวจจับจะแสดงผลลัพธ์ออกมา ส่วนงานถัดไปจะใช้ if ร่วมกับบริบท needs เพื่อทำงานตามเงื่อนไข

  build-api:
    needs: detect
    if: needs.detect.outputs.api == 'true'
    runs-on: ubuntu-latest
    steps:
      - run: ./build-api.sh

เชื่อมต่อผลลัพธ์

งานตรวจจับต้องประกาศ outputs เพื่อส่งต่อผลลัพธ์ของตัวกรอง ให้ งานอื่นอ่านค่าได้

  detect:
    runs-on: ubuntu-latest
    outputs:
      api: ${{ steps.changes.outputs.api }}
      web: ${{ steps.changes.outputs.web }}

เมทริกซ์แบบไดนามิก

สำหรับบริการจำนวนมาก คุณสามารถสร้างเมทริกซ์แบบไดนามิกจากเส้นทางที่เปลี่ยนแปลง เพื่อให้มีเฉพาะบริการที่เปลี่ยนแปลงเท่านั้นที่เข้าสู่เมทริกซ์

สร้างรายการ JSON ในงานหนึ่ง แล้วส่งเข้าเมทริกซ์ของงานถัดไป

    strategy:
      matrix:
        service: ${{ fromJSON(needs.detect.outputs.list) }}

Git Diff สำหรับการตรวจจับ

คุณยังสามารถตรวจหาการเปลี่ยนแปลงด้วย git ดิบได้ โดยเปรียบเทียบคอมมิตปัจจุบันกับฐาน เพื่อแสดงรายการไดเรกทอรีที่เปลี่ยนแปลง

git diff --name-only origin/main...HEAD | cut -d/ -f1-2 | sort -u

การตรวจสอบที่จำเป็นและการข้ามงาน

โปรดระวัง: หากข้ามการตรวจสอบสถานะที่จำเป็นเพราะไม่มีการเปลี่ยนแปลง การป้องกันสาขาอาจบล็อกการรวมโค้ด โดยรอการตรวจสอบนั้น

วิธีแก้คือเพิ่มงานประตูสุดท้ายที่สำเร็จเสมอ และกำหนดให้เป็นการตรวจสอบที่จำเป็นเพียงรายการเดียว เพื่อสรุปงานที่ทำตามเงื่อนไข

  gate:
    needs: [build-api, build-web]
    if: always()
    runs-on: ubuntu-latest
    steps:
      - run: echo 'all required jobs resolved'

แคชแยกตามแพ็กเกจ

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

เมื่อใช้ร่วมกัน ทั้งสองแนวทางช่วยให้ไปป์ไลน์ของโมโนรีโพรวดเร็ว แม้รีโพจะขยายใหญ่ขึ้น

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับการสร้างแบบเลือกเฉพาะส่วน

สรุปทบทวน

คุณได้เรียนรู้การสร้างเฉพาะสิ่งที่เปลี่ยนแปลง

  • paths และ paths-ignore ใช้กำหนดเงื่อนไขให้เวิร์กโฟลว์ทั้งหมด
  • แอ็กชันตรวจหาการเปลี่ยนแปลงจะส่งออกค่าบูลีนแยกตามเส้นทาง
  • งานใช้ if + needs เพื่อทำงานตามเงื่อนไข และสามารถสร้างเมทริกซ์แบบไดนามิกได้
  • เพิ่มงานประตูด้วย always() เพื่อให้เข้ากันได้กับการตรวจสอบที่จำเป็น

การสร้างแบบเลือกเฉพาะส่วนช่วยให้ 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 ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 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