เรียกใช้งาน workflow บน GitHub ของคุณอัตโนมัติหลังจากที่ล้มเหลว
บางครั้ง workflow บน GitHub Actions ของคุณอาจจะทำงานไม่ดีและล้มเหลวด้วยเหตุผลแปลก ๆ มาดูกันว่าคุณสามารถเรียกใช้งานมันอัตโนมัติได้อย่างไรเพื่อประหยัดเวลา
บางครั้ง workflow บน GitHub Actions ของคุณอาจจะทำงานไม่ดีและล้มเหลวด้วยเหตุผลแปลก ๆ มาดูกันว่าคุณสามารถเรียกใช้งานมันอัตโนมัติได้อย่างไรเพื่อประหยัดเวลา
พวกเราชื่นชอบ GitHub Actions มันทรงพลังและเสนอพื้นที่ฟรีที่กว้างขวาง
เมื่อโปรเจกต์ของเราเติบโตขึ้น เราได้เพิ่มการทดสอบการเชื่อมต่อเพิ่มมากขึ้นใน workflow ของเราใน GitHub Actions เช่นเดียวกับโปรเจกต์ที่เยี่ยมอื่น ๆ เราเรียกใช้การทดสอบของเราทุกคำร้องขอดึง, การพุช, และการปล่อย
อย่างไรก็ตาม เนื่องจากธรรมชาติของการทดสอบการเชื่อมต่อ บางครั้ง workflow ของเราล้มเหลวด้วยเหตุผลแปลก ๆ มันอาจจะเป็นปัญหาเครือข่าย, ปัญหากับเบราว์เซอร์, หรือเหตุผลอื่น ๆ ที่ยากจะทำซ้ำ
เมื่อ workflow ล้มเหลว เราต้องเรียกใช้งานมันใหม่ด้วยตนเอง มันไม่ใช่เรื่องใหญ่ในตอนแรก แต่มันก็ยังน่ารำคาญสำหรับนักพัฒนาที่มีประสิทธิภาพสูงเช่นพวกเรา
ในขณะนี้ GitHub Actions ยังไม่มีวิธีการในตัวเองที่จะเรียกใช้งาน workflow ที่ล้มเหลวได้โดยอัตโนมัติ ดังนั้นไปดูวิธีการที่เราสามารถทำได้
เมื่อ workflow ไม่ กำลังทำงานและล้มเหลว คุณสามารถเรียกใช้งานมันใหม่ด้วยตนเองโดยคลิกที่ปุ่ม "Re-run jobs" จะมีเมนูหล่นลงมา และมีตัวเลือก "Re-run failed jobs" ที่ดีเพื่อข้ามงานที่สำเร็จไปแล้ว
ไอเดียนี้เรียบง่าย:
เห็นได้ชัดว่า เราไม่สามารถทำเช่นนี้ใน workflow เดียวกัน เพราะ workflow ไม่สามารถทำอะไรได้เมื่อมันไม่ได้ทำงาน ดังนั้นเราต้องการอีก workflow เพื่อเฝ้าดูสถานะของ workflow ก่อนหน้าและเรียกกระบวนการใหม่ กระบวนการนี้สามารถแสดงได้ดังนี้:
สร้างไฟล์ workflow ใหม่ในที่เก็บข้อมูลของคุณ เช่น .github/workflows/rerun.yml:
ขอบคุณ GitHub CLI, เราสามารถดูสถานะของ workflow และเรียกใช้มันใหม่ด้วยคำสั่งง่าย ๆ สองคำสั่ง:
gh run watch เพื่อชมสถานะของ workflow (ดูเอกสาร ที่นี่).gh run rerun เพื่อเรียก workflow ใหม่. ธง --failed จะเรียกใช้เฉพาะงานที่ล้มเหลว (ดูเอกสาร ที่นี่).ทั้งหมดที่คุณต้องทำคือให้ run_id ของ workflow ที่ล้มเหลวซึ่งสามารถทำได้โดยใช้บริบทของ github.run_id ตัวอย่างเช่น คุณสามารถเรียก workflow ใหม่โดยการเพิ่มขั้นตอนต่อไปนี้ไปยัง workflow ดั้งเดิมของคุณ:
ค่าของ if: failure() จะเรียกใช้ขั้นตอนเมื่อ job ล้มเหลวเท่านั้น ค่าของ fromJSON(github.run_attempt) < 3 จะเรียกใช้สองครั้งแรกเท่านั้น คุณสามารถปรับจำนวนตามความต้องการของคุณ
ขั้นตอนนี้ใช้คำสั่ง gh workflow run เพื่อเรียกใช้ workflow ใหม่ ดู เอกสาร สำหรับรายละเอียดเพิ่มเติม
หากคุณต้องการเรียกใช้ workflow ใหม่จากสาขาที่ล้มเหลว แทนสาขาเริ่มต้น คุณสามารถใช้คำสั่งต่อไปนี้:
บริบทของ github.head_ref จะถูกใช้ถ้ามันเป็นการร้องขอดึง มิฉะนั้น github.ref_name จะถูกใช้
แนวคิดของวิธีนี้มาจาก ความคิดเห็นในหัวข้อการสนทนาของ GitHub นี้