PlusMagi's Blog By Pitt Phunsanit cd,ci,GIT,Shell Script,system,technology GitLab CI/CD 101: การเขียนไฟล์ .gitlab-ci.yml, การแบ่ง Stages และการจัดการ GitLab Runners

GitLab CI/CD 101: การเขียนไฟล์ .gitlab-ci.yml, การแบ่ง Stages และการจัดการ GitLab Runners

ในโลกของการพัฒนาซอฟต์แวร์ที่หมุนด้วยความเร็วสูง การปล่อยโค้ดจากคอมพิวเตอร์ส่วนตัวไปยังสภาพแวดล้อมจริงไม่ใช่แค่การกดปุ่ม แต่คือกระบวนการที่ต้องอาศัยความแม่นยำ ความสม่ำเสมอ และความรวดเร็ว หากกระบวนการเหล่านี้ยังคงทำด้วยมือ (Manual Deployment) ก็เปรียบเสมือนการสร้างบ้านโดยไม่มีพิมพ์เขียว ซึ่งเต็มไปด้วยโอกาสที่จะเกิดข้อผิดพลาดร้ายแรง การนำระบบ CI/CD เข้ามาใช้จึงเป็นหัวใจสำคัญที่ช่วยให้ทีมสามารถส่งมอบคุณค่าทางธุรกิจได้อย่างต่อเนื่องและเชื่อถือได้


เจาะลึกรายละเอียดและประเด็นสำคัญ

หัวใจหลักของการทำ CI/CD บน GitLab คือไฟล์ `.gitlab-ci.yml` ซึ่งเปรียบเสมือนพิมพ์เขียว (Blueprint) ที่กำหนดขั้นตอนการทำงานทั้งหมด ตั้งแต่การดึงโค้ด การทดสอบ (Testing) ไปจนถึงการนำไปใช้งานจริง (Deployment) เราจะใช้คำสั่ง `stages:` เพื่อแบ่งงานออกเป็นลำดับที่ชัดเจน เช่น Build -> Test -> Deploy ทำให้มั่นใจได้ว่าแต่ละขั้นตอนจะต้องผ่านก่อนจึงจะสามารถไปยังขั้นตอนถัดไปได้

ส่วนประกอบสำคัญอีกอย่างคือ GitLab Runners ซึ่งทำหน้าที่เป็นเครื่องจักรเสมือน (Virtual Machine) ที่รับผิดชอบในการรัน Job ต่างๆ ตามที่กำหนดในไฟล์ YAML Runner คือผู้ปฏิบัติงานจริงที่ทำให้โค้ดของเราถูกคอมไพล์ ถูกทดสอบ และถูกติดตั้งไปยังสภาพแวดล้อมเป้าหมายอย่างอัตโนมัติ การจัดการ Runners ให้มีประสิทธิภาพจึงเป็นสิ่งสำคัญเพื่อรองรับปริมาณงานที่เพิ่มขึ้น

stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the application..."
    - npm install
    - npm run build

test_job:
  stage: test
  script:
    - echo "Running unit tests..."
    - npm test

deploy_staging:
  stage: deploy
  environment: staging
  script:
    - echo "Deploying to Staging environment."


การนำไปประยุกต์ใช้ในชีวิตและการทำงานยุคใหม่

  • การควบคุมสภาพแวดล้อม (Environment Control): ใช้คำสั่ง `environment:` และ `rules:` เพื่อกำหนดว่า Job ใดควรจะรันเมื่อใด เช่น ให้ Deploy ไปยัง Production ได้ก็ต่อเมื่อมีการ Merge เข้าสู่ Branch หลักเท่านั้น ซึ่งช่วยลดความเสี่ยงจากการ Deploy ผิดพลาดได้มาก
  • การจัดการ Artifacts และ Caching: การกำหนด `artifacts:` ช่วยให้เราเก็บผลลัพธ์ที่จำเป็น (เช่น ไฟล์ Build ที่คอมไพล์แล้ว) จาก Stage หนึ่ง ไปใช้ใน Stage ถัดไปได้โดยไม่ต้องรันใหม่ทั้งหมด ขณะที่ `cache:` ช่วยเร่งความเร็วในการติดตั้ง Dependencies ต่างๆ

การเข้าใจหลักการทำงานของ GitLab CI/CD ไม่ใช่แค่การเขียนโค้ด แต่คือการออกแบบกระบวนการ (Process Design) ที่ทำให้ทีมพัฒนาสามารถโฟกัสกับการสร้างสรรค์คุณค่าทางธุรกิจได้อย่างเต็มที่ โดยปล่อยให้ระบบอัตโนมัติจัดการเรื่องความซับซ้อนและความน่าเชื่อถือของการส่งมอบงานทั้งหมด การเป็น DevOps Engineer คือการผสานรวมเครื่องมือเหล่านี้เข้าด้วยกันเพื่อสร้างวงจรชีวิตของซอฟต์แวร์ที่สมบูรณ์แบบและไร้รอยต่อ


อ่านเพิ่มเติม