Shell Script ใน GitHub Actions: การยกระดับวงจรการพัฒนาที่เชื่อถือได้
ในโลกของการพัฒนาระบบสมัยใหม่ ความสามารถในการตรวจสอบและนำโค้ดไปใช้งานอย่างอัตโนมัติคือหัวใจสำคัญของความมั่นคงทางซอฟต์แวร์ Shell script เป็นเครื่องมือพื้นฐานที่มีประสิทธิภาพสูงสำหรับการจัดการระบบปฏิบัติการและการทำงานแบบ Batch Processing เมื่อเราพูดถึง Continuous Integration / Continuous Deployment หรือ CI/CD ปลายทางสำหรับสคริปต์เหล่านี้จึงไม่ใช่แค่การรันคำสั่งบนคอมพิวเตอร์ส่วนตัวอีกต่อไป แต่เป็นการฝังมันเข้าสู่ Pipeline อัตโนมัติ เช่น GitHub Actions เพื่อให้ทุกขั้นตอนตั้งแต่ Build, Test ไปจนถึง Deploy ถูกดำเนินการภายใต้สภาพแวดล้อมที่เป็นมาตรฐานเดียวกัน
ทำไมต้องใส่ Shell Scripts เข้าใน CI/CD?
บทบาทหลักของ shell scripts คือการเป็น ‘ผู้ประสานงาน’ ระหว่างองค์ประกอบต่างๆ ของโปรเจกต์ ไม่ว่าจะเป็นการดาวน์โหลด Dependencies จำนวนมาก, การเรียกใช้ชุดทดสอบ (Test Suites) ที่มีหลายขั้นหรือภาษาแตกต่างกัน รวมถึงการบีบอัดไฟล์เพื่อเตรียมส่งมอบ ซึ่งทั้งหมดนี้จำเป็นต้องถูกควบคุมด้วยตรรกะลำดับเวลา ดังนั้น แทนที่จะเขียน Logic เหล่านี้เข้าไปใน Framework หลักโดยตรง การใช้ Bash Script จึงง่ายกว่า มีความเป็นธรรมชาติ และสามารถรองรับ Command Line Tools ได้เกือบทุกชนิด ทำให้กระบวนการตรวจสอบโค้ดมีความสมบูรณ์และแม่นยำยิ่งขึ้นก่อนที่โค้ดจะไปกระทบบ้าน Production จริงๆ
โครงสร้างพื้นฐาน: การใช้งาน YAML ใน Workflow Files
GitHub Actions ใช้ไฟล์ `.yml` ภายในโฟลเดอร์ `.github/workflows/` เป็นแกนในการกำหนด workflow โดยทั่วไปแล้ว เราจะระบุ Job ให้รันบน Runner Environment ใดก็ได้ จากนั้นจึงผสานสคริปต์ของเราเข้ากับบล็อก `run:` นี่คือจุดที่เราสั่งให้ระบบปฏิบัติการทำงานตามคำสั่ง Terminal แบบเดียวกับการเปิดหน้าต่าง SSH เข้าไปยังเซิร์ฟเวอร์ CI
on:JavaScript
# กำหนด Trigger เมื่อใด (เช่น push ไปยัง branch main)
- Setup Dependencies (npm, java, etc.)
- Execution Script Run Point: The core logic is placed here. This step executes the shell script which handles complex tasks like running linters and unit tests sequentially.
jobs..runs-on :
JavaScript
ubuntu-latest # ระบุ OS ที่ใช้สำหรับ Build และ Test
steps[] : Checkout Code
ตัวอย่าง Shell Logic ใน Action
สมมติว่าเราต้องการให้สคริปต์ทำหน้าที่ติดตั้ง Dependency ทั้ง Node.js และ Python ก่อนจะรันการทดสอบ เราสามารถรวมมันไว้ในบล็อก `run:` ได้โดยตรง เพื่อประหยัดเวลาและทำให้ Pipeline อ่านง่ายขึ้น ดังนี้:
# ติดตั้ง dependencies ของโปรเจกต์ JavaScript (Node) \
even_script install &&\
deploy_scripts/test_unit.sh \\ # รัน Unit Tests ด้วย Bash स्क्रिप्टที่กำหนดเอง\\echo