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

CI/CD สำหรับคลังโค้ดแบบรวม

สำรวจกลยุทธ์เพิ่มประสิทธิภาพไปป์ไลน์ CI/CD ในคลังโค้ดแบบรวม รวมถึงการเลือกเรียกใช้งานตามไฟล์ที่เปลี่ยนแปลง

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

Monorepo คืออะไร

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

ลองนึกภาพว่าเป็นห้องสมุดขนาดใหญ่ที่มีหนังสือ (โครงการ) หลายเล่มอยู่ในอาคารเดียวกัน (คลัง) แทนที่จะมีอาคารแยกสำหรับหนังสือแต่ละเล่ม แนวทางนี้มีทั้งข้อดีและข้อเสีย โดยเฉพาะสำหรับ CI/CD

ความท้าทายของ CI/CD ใน Monorepo

แม้ monorepo จะมีข้อดี เช่น การแบ่งปันโค้ดที่ง่ายขึ้น แต่ก็อาจสร้างความท้าทายให้กับไปป์ไลน์ Continuous Integration/Continuous Delivery (CI/CD):

  • การสร้างที่ช้า: หากการเปลี่ยนแปลงทุกครั้งเรียกใช้การสร้างและชุดการทดสอบทั้งหมดสำหรับ *ทุก* โครงการ ไปป์ไลน์จะทำงานช้ามาก
  • การสิ้นเปลืองทรัพยากร: การเรียกใช้งานที่ไม่เกี่ยวข้องโดยไม่จำเป็นใช้เวลาสร้างและทรัพยากร
  • ความหงุดหงิดของนักพัฒนา: วงจรการได้รับข้อมูลป้อนกลับที่ยาวนานอาจทำให้ความเร็วในการพัฒนาลดลง

ความจำเป็นของ CI/CD แบบเลือกเฉพาะ

หัวใจสำคัญของ CI/CD ที่มีประสิทธิภาพสำหรับ monorepo คือ การเลือกเฉพาะ เราต้องการให้ไปป์ไลน์ฉลาดพอที่จะ:

  • ระบุว่า *อะไร* เปลี่ยนแปลง
  • เรียกใช้งาน CI/CD *เฉพาะ* สำหรับโครงการที่ได้รับผลกระทบจากการเปลี่ยนแปลงนั้น

แนวทางนี้ช่วยประหยัดเวลา ลดการใช้ทรัพยากร และให้ข้อมูลป้อนกลับแก่นักพัฒนาได้รวดเร็วยิ่งขึ้น

การเริ่มทำงานตามเส้นทาง: `on.paths`

GitHub Actions มีวิธีที่มีประสิทธิภาพในการเลือกเฉพาะ โดยใช้ตัวกรอง paths ในตัวเริ่มทำงานของเวิร์กโฟลว์ คุณสามารถระบุไดเรกทอรีหรือไฟล์ที่เมื่อมีการเปลี่ยนแปลงแล้วจะเรียกใช้เวิร์กโฟลว์

หากมีการเปลี่ยนแปลงไฟล์นอกเส้นทางเหล่านี้ เวิร์กโฟลว์จะไม่ทำงาน วิธีนี้เหมาะอย่างยิ่งสำหรับ monorepo

on:
  push:
    branches:
      - main
    paths:
      - 'apps/frontend/**'
      - 'libs/shared/**'

ตัวกรองเส้นทางในการทำงาน

นี่คือตัวอย่างเวิร์กโฟลว์อย่างง่ายที่ทำงานเฉพาะเมื่อมีการส่งการเปลี่ยนแปลงไปยังไฟล์ภายในไดเรกทอรี apps/backend หรือไฟล์ README.md ที่ระบุ

วิธีนี้ช่วยให้เรียกใช้การทดสอบหรือการสร้างที่เกี่ยวข้องกับบริการแบ็กเอนด์ของคุณเท่านั้น

name: Backend CI

on:
  push:
    branches:
      - main
    paths:
      - 'apps/backend/**'
      - 'README.md'

jobs:
  build-backend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build backend app
        run: echo "Building backend..."

การละเว้นเส้นทาง: `paths-ignore`

บางครั้งคุณต้องการให้เวิร์กโฟลว์ทำงานเมื่อมีการเปลี่ยนแปลง *ส่วนใหญ่* แต่ไม่ต้องการให้ทำงานหากมีการแก้ไขเฉพาะไฟล์บางประเภท (เช่น เอกสาร หรือไฟล์บันทึก) ตัวกรอง paths-ignore เหมาะสำหรับกรณีนี้

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

on:
  pull_request:
    branches:
      - main
    paths-ignore:
      - 'docs/**'
      - '**/*.md'

การเรียกใช้แบบเลือกเฉพาะแบบไดนามิกด้วย `git diff`

สำหรับตรรกะที่ซับซ้อนยิ่งขึ้น คุณสามารถใช้คำสั่ง Git อย่าง git diff ภายในขั้นตอนของเวิร์กโฟลว์เพื่อตรวจสอบการเปลี่ยนแปลงแบบไดนามิก วิธีนี้ช่วยให้คุณสร้างเงื่อนไขที่กำหนดเองได้

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

ตัวอย่างการเรียกใช้งานตามเงื่อนไข

ขั้นตอนเวิร์กโฟลว์นี้ใช้ git diff เพื่อตรวจสอบว่ามีไฟล์ใดภายใต้ apps/api/ เปลี่ยนแปลงระหว่างการส่งมอบปัจจุบันกับสาขาฐานหรือไม่ หากมีการเปลี่ยนแปลง ระบบจะตั้งค่าตัวแปรผลลัพธ์ api_changed เป็น 'true'

จากนั้นสามารถใช้ผลลัพธ์นี้ควบคุมว่างาน 'deploy API' จะทำงานหรือไม่

jobs:
  check-changes:
    runs-on: ubuntu-latest
    outputs:
      api_changed: ${{ steps.diff.outputs.api_changed }}
    steps:
      - uses: actions/checkout@v4
      - name: Check API changes
        id: diff
        run: |
          if git diff --quiet ${{ github.event.before }} ${{ github.sha }} -- apps/api/;
          then
            echo "api_changed=false" >> $GITHUB_OUTPUT
          else
            echo "api_changed=true" >> $GITHUB_OUTPUT
          fi

  deploy-api:
    needs: check-changes
    if: needs.check-changes.outputs.api_changed == 'true'
    runs-on: ubuntu-latest
    steps:
      - name: Deploy API
        run: echo "Deploying API..."

โครงสร้าง Monorepo สำหรับ CI/CD

โครงสร้าง monorepo ที่เป็นระเบียบช่วยให้ CI/CD แบบเลือกเฉพาะทำได้ง่ายขึ้นอย่างมาก การจัดกลุ่มไฟล์และโครงการที่เกี่ยวข้องไว้ในไดเรกทอรีที่กำหนดไว้อย่างชัดเจนทำให้ใช้ตัวกรอง paths ได้อย่างมีประสิทธิภาพ

  • /apps/frontend
  • /apps/backend
  • /libs/shared
  • /docs

การแยกส่วนอย่างชัดเจนช่วยให้กำหนดเป้าหมายของเวิร์กโฟลว์ได้อย่างแม่นยำ

แบบทดสอบ CI/CD ใน Monorepo

การปรับ CI/CD ให้เหมาะสมสำหรับ monorepo มีความสำคัญอย่างยิ่งต่อการรักษาความเร็วในการพัฒนาและการใช้ทรัพยากรอย่างมีประสิทธิภาพ ลองพิจารณาว่ากลยุทธ์ใดเหมาะที่สุดสำหรับจัดการความท้าทายของฐานโค้ดขนาดใหญ่ที่รวมทุกอย่างไว้ด้วยกัน

สรุปและขั้นตอนถัดไป

คุณได้เรียนรู้วิธีจัดการความท้าทายด้าน CI/CD ใน monorepo ด้วยการใช้ การเรียกใช้งานเฉพาะงานที่เกี่ยวข้อง การใช้ตัวกรอง paths ของ GitHub Actions และเทคนิค git diff ขั้นสูงช่วยให้มั่นใจได้ว่าไปป์ไลน์จะทำงานเฉพาะสิ่งที่จำเป็น

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

คำถามที่พบบ่อย

บทเรียน “CI/CD สำหรับคลังโค้ดแบบรวม” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “CI/CD สำหรับคลังโค้ดแบบรวม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CI/CD with GitHub Actions & DevOps Pipelines ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CI/CD with GitHub Actions & DevOps Pipelines มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “CI/CD สำหรับคลังโค้ดแบบรวม”

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

บทเรียน “CI/CD สำหรับคลังโค้ดแบบรวม” ใช้เวลานานแค่ไหน

บทเรียน 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