CI/CD สำหรับคลังโค้ดแบบรวม
สำรวจกลยุทธ์เพิ่มประสิทธิภาพไปป์ไลน์ CI/CD ในคลังโค้ดแบบรวม รวมถึงการเลือกเรียกใช้งานตามไฟล์ที่เปลี่ยนแปลง
CI/CD สำหรับคลังโค้ดแบบรวม เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 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) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “CI/CD สำหรับคลังโค้ดแบบรวม”
สำรวจกลยุทธ์เพิ่มประสิทธิภาพไปป์ไลน์ CI/CD ในคลังโค้ดแบบรวม รวมถึงการเลือกเรียกใช้งานตามไฟล์ที่เปลี่ยนแปลง คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “CI/CD สำหรับคลังโค้ดแบบรวม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม
ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- CI/CD สำหรับคลังโค้ดแบบรวม
- เวิร์กโฟลว์ข้ามคลังโค้ด
- การจัดการเวิร์กโฟลว์แบบรวมศูนย์
- การกรองเส้นทางและการสร้างแบบเลือกเฉพาะ