PlusMagi's Blog By Pitt Phunsanit เทคโนโลยี Shell Script: นำสคริปต์ไปใส่ใน CI Pipeline (GitHub Actions)

Shell Script: นำสคริปต์ไปใส่ใน CI Pipeline (GitHub Actions)

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:
    # กำหนด Trigger เมื่อใด (เช่น push ไปยัง branch main)
  • jobs..runs-on:
    ubuntu-latest # ระบุ OS ที่ใช้สำหรับ Build และ Test
    steps[] :
      Checkout Code
    • 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.

    ตัวอย่าง Shell Logic ใน Action

    สมมติว่าเราต้องการให้สคริปต์ทำหน้าที่ติดตั้ง Dependency ทั้ง Node.js และ Python ก่อนจะรันการทดสอบ เราสามารถรวมมันไว้ในบล็อก `run:` ได้โดยตรง เพื่อประหยัดเวลาและทำให้ Pipeline อ่านง่ายขึ้น ดังนี้:

    # ติดตั้ง dependencies ของโปรเจกต์ JavaScript (Node) \
    even_script install &&\
    deploy_scripts/test_unit.sh \\ # รัน Unit Tests ด้วย Bash स्क्रिप्टที่กำหนดเอง\\echo