การดำเนินการแบบมีเงื่อนไขและการพึ่งพาระหว่างงาน
ควบคุมเวลาที่ขั้นตอนและงานจะทำงานด้วยเงื่อนไข if คีย์เวิร์ด needs นิพจน์ และฟังก์ชันตรวจสอบสถานะในเวิร์กโฟลว์ของ GitHub Actions
การดำเนินการแบบมีเงื่อนไขและการพึ่งพาระหว่างงาน เป็นบทเรียน 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 บทเรียน
เหตุใดเงื่อนไขจึงสำคัญ
ไม่ใช่ทุกขั้นตอนที่ควรทำงานทุกครั้ง คุณอาจต้องการให้ขั้นตอนปรับใช้ทำงานเฉพาะบนสาขา main หรือให้ขั้นตอนแจ้งเตือนทำงานเฉพาะเมื่อมีบางอย่างล้มเหลว
ระบบการทำงานของ GitHub ช่วยให้คุณเพิ่มเงื่อนไขให้กับขั้นตอนหรืองานใด ๆ เพื่อควบคุมว่าจะให้ทำงานหรือไม่
คีย์เงื่อนไข
เพิ่มคีย์ if: ให้กับขั้นตอน ขั้นตอนนั้นจะทำงานก็ต่อเมื่อนิพจน์ประเมินค่าได้เป็น จริง
นิพจน์ภายใน if ไม่จำเป็นต้องมีตัวครอบ ${{ }} แต่จะใช้ตัวครอบดังกล่าวก็ได้
steps:
- name: Deploy
if: github.ref == 'refs/heads/main'
run: ./deploy.shออบเจ็กต์บริบท
เงื่อนไขอ่านค่าจาก ออบเจ็กต์บริบท ที่อธิบายการทำงาน:
github— เหตุการณ์ รีเฟอเรนซ์ ผู้กระทำ และค่าแฮชenv— ตัวแปรสภาพแวดล้อมjobและsteps— สถานะของงานก่อนหน้าrunner— OS และสถาปัตยกรรม
ตัวอย่างเช่น github.event_name จะบอกว่าการส่งหรือคำขอดึงเป็นตัวกระตุ้นการทำงานหรือไม่
ฟังก์ชันตรวจสอบสถานะ
โดยค่าเริ่มต้น ขั้นตอนจะถูกข้ามหากขั้นตอนก่อนหน้าล้มเหลว หากต้องการเปลี่ยนพฤติกรรมนี้ ให้ใช้ฟังก์ชันสถานะ:
success()— เป็นจริงหากไม่มีขั้นตอนก่อนหน้าใดล้มเหลว (ค่าเริ่มต้น)failure()— เป็นจริงหากมีขั้นตอนก่อนหน้าใดล้มเหลวalways()— ทำงานไม่ว่าจะเกิดอะไรขึ้นcancelled()— เป็นจริงหากการทำงานถูกยกเลิก
- name: Notify on failure
if: failure()
run: echo 'Build failed, sending alert'เรียกใช้การล้างข้อมูลเสมอ
รูปแบบที่ใช้กันทั่วไปคือการมีขั้นตอนล้างข้อมูลที่ต้องทำงานแม้ว่าขั้นตอนก่อนหน้าจะล้มเหลว ให้ใช้ if: always()
วิธีนี้รับประกันว่าทรัพยากรชั่วคราว คอนเทนเนอร์ หรือรายงานการทดสอบจะได้รับการจัดการไม่ว่าผลลัพธ์จะเป็นอย่างไร
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: logs
path: ./logsการพึ่งพางานด้วย needs
คีย์เวิร์ด needs ทำให้งานหนึ่งรอให้งานอื่นเสร็จสิ้น หากไม่มีคีย์นี้ งานจะทำงานแบบขนานกัน
งานที่ระบุไว้ใน needs ต้องเสร็จสิ้นสำเร็จก่อนที่งานที่พึ่งพางานนั้นจะเริ่มทำงาน
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: npm test
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- run: ./deploy.shการพึ่งพาหลายงาน
งานหนึ่งสามารถพึ่งพาหลายงานได้โดยส่งรายการให้กับ needs งานนั้นจะรอให้งานทั้งหมดเสร็จสิ้น
วิธีนี้ใช้สร้างรูปแบบการรวมผลลัพธ์ ซึ่งงานสุดท้ายจะทำงานก็ต่อเมื่องานแบบขนานทั้งหมดเสร็จสิ้นสำเร็จ
release:
needs: [lint, test, build]
runs-on: ubuntu-latest
steps:
- run: echo 'all checks passed'งานแบบมีเงื่อนไข
คีย์ if ใช้กับงานได้เช่นเดียวกับขั้นตอน ไม่ได้จำกัดเฉพาะขั้นตอนเท่านั้น เงื่อนไขระดับงานจะตัดสินใจว่างานทั้งหมดจะทำงานหรือไม่
ในตัวอย่างนี้ งานปรับใช้จะทำงานเฉพาะเมื่อมีการส่งไปยัง main แต่ยังคงพึ่งพาการทดสอบ
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: ./deploy.shการใช้ผลลัพธ์ของงาน
งานสามารถส่งข้อมูลต่อไปยังงานถัดไปผ่าน outputs งานที่พึ่งพาจะอ่านข้อมูลเหล่านี้ผ่านบริบท needs
วิธีนี้ทำให้เงื่อนไขขึ้นอยู่กับค่าที่คำนวณไว้ก่อนหน้าได้ เช่น เวอร์ชันมีการเปลี่ยนแปลงหรือไม่
check:
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.diff.outputs.changed }}
steps:
- id: diff
run: echo 'changed=true' >> $GITHUB_OUTPUTการรวมเงื่อนไข
คุณสามารถรวม นิพจน์ด้วย && (และ) || (หรือ) และ ! (ไม่)
ตัวอย่างนี้จะทำงานเฉพาะเมื่อเป็นการส่งไปยัง main ที่สำเร็จและไม่ได้มาจากคลังที่แยกออกมา
if: success() && github.ref == 'refs/heads/main' && github.event_name == 'push'if always พร้อม needs
โปรดระวัง: งานที่มี needs จะถูกข้ามหากการพึ่งพางานใดงานหนึ่งล้มเหลว หากต้องการให้งานรายงานสุดท้ายทำงานไม่ว่าผลลัพธ์จะเป็นอย่างไร ให้ใช้ needs ร่วมกับ if: always()
ภายในงานนี้ คุณสามารถตรวจสอบ needs.<job>.result เพื่อกำหนดว่าจะรายงานอะไร
report:
needs: [test, build]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo ${{ needs.test.result }}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับการทำงานแบบมีเงื่อนไข
ทบทวน
คุณได้เรียนรู้การควบคุมลำดับการทำงานของเวิร์กโฟลว์ด้วย เงื่อนไขและการพึ่งพา
ifใช้กำหนดเงื่อนไขให้งานและขั้นตอนผ่านนิพจน์- ฟังก์ชันสถานะอย่าง
failure()และalways()ใช้เปลี่ยนพฤติกรรมการข้ามเมื่อเกิดความล้มเหลว needsใช้สร้างลำดับการทำงานและรูปแบบการรวมผลลัพธ์outputsของงานส่งค่าต่อให้กับเงื่อนไขในภายหลัง
องค์ประกอบพื้นฐานเหล่านี้ช่วยให้คุณสร้างไปป์ไลน์ที่แม่นยำและมีประสิทธิภาพ
คำถามที่พบบ่อย
บทเรียน “การดำเนินการแบบมีเงื่อนไขและการพึ่งพาระหว่างงาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การดำเนินการแบบมีเงื่อนไขและการพึ่งพาระหว่างงาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CI/CD with GitHub Actions & DevOps Pipelines ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CI/CD with GitHub Actions & DevOps Pipelines มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การดำเนินการแบบมีเงื่อนไขและการพึ่งพาระหว่างงาน”
ควบคุมเวลาที่ขั้นตอนและงานจะทำงานด้วยเงื่อนไข if คีย์เวิร์ด needs นิพจน์ และฟังก์ชันตรวจสอบสถานะในเวิร์กโฟลว์ของ GitHub Actions คุณปฏิบัติ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้างแบบเมทริกซ์สำหรับหลายสภาพแวดล้อม
- การแคชทรัพยากรที่ต้องพึ่งพาเพื่อเพิ่มความเร็ว
- เวิร์กโฟลว์และแอ็กชันที่นำกลับมาใช้ซ้ำได้
- การดำเนินการแบบมีเงื่อนไขและการพึ่งพาระหว่างงาน