Gitlab-CI กล้วยๆ: เริ่มต้นกับไฟล์ .gitlab-ci.yml

Gitlab-CI กล้วยๆ: เริ่มต้นกับไฟล์ .gitlab-ci.yml

GitLab CI/CD เป็นแพลตฟอร์มสำหรับทำ CI/CD ซึ่งช่วยให้เราสร้าง ทดสอบ และส่งมอบโค้ดโดยอัตโนมัติ ไฟล์ .gitlab-ci.yml เป็นไฟล์ YAML ที่มีการกำหนดค่าสำหรับไปป์ไลน์ CI/CD ต่างๆ

ในบทความนี้ ผมจะแนะนำคุณเกี่ยวกับพื้นฐานของ .gitlab-ci.yml รวมถึงวิธีกำหนด job, stage และ step ตลอดจนวิธีใช้ตัวแปร(variable) และเงื่อนไข นอกจากนี้ยังมีตัวอย่างของงาน CI/CD ทั่วไปที่คุณสามารถนำไปดัดแปลงได้ใน .gitlab-ci.yml

.gitlab-ci.yml  คืออะไร?

.gitlab-ci.yml เป็นไฟล์ YAML ที่กำหนดขั้นตอนที่ GitLab CI จะใช้ในการสร้าง ทดสอบ และส่งมอบ โปรเจกต์ของเราได้ดีขึ้น มันเป็นเครื่องมือที่มีประสิทธิภาพที่สามารถช่วยให้เราพัฒนาและปรับใช้กระบวนการโดยอัตโนมัติ และสามารถช่วยปรับปรุงคุณภาพและความน่าเชื่อถือของโค้ดเราได้

.gitlab-ci.yml ทำงานยังไง?

เมื่อมีการ Push commit ใหม่ขึ้นไปใน Gitlab repo และมีไฟล์ .gitlab-ci.yml อยู่เป็นไฟล์แรกสุดของโปรเจกต์ (Root project) มันจะทำการอ่านไฟล์ .gitlab-ci.yml ให้ทันที และดำเนินการตามขั้นตอนที่กำหนดไว้ในนั้น ขั้นตอนต่างๆ จะถูกจัดระเบียบเป็นขั้นๆ และแต่ละขั้นสามารถบรรจุได้หลายงาน งานจะดำเนินการพร้อมกัน และแต่ละงานสามารถมีชุดขั้นตอนของตัวเองได้ด้วย

ในการออกแบบไปป์ไลน์เบื้องต้น มาทำความเข้าใจโครงสร้างของไปป์ไลน์กัน ลำดับชั้นใน GitLab มี Pipeline > Stages > Jobs

ความแตกต่างของ Stages

Stage ที่พบบ่อยที่สุดคือ:

  • build: ขั้นตอนนี้รับผิดชอบในการสร้างโปรเจกต์ของคุณ ซึ่งอาจเกี่ยวข้องกับการคอมไพล์โค้ด รันการทดสอบ หรือสร้างอิมเมจ Docker
  • test: ขั้นตอนนี้รับผิดชอบในการทดสอบโปรเจกต์ของคุณ ซึ่งอาจเกี่ยวข้องกับการทดสอบหน่วยการทำงาน การทดสอบการรวมระบบ หรือการทดสอบตั้งแต่ต้นทางถึงปลายทาง
  • deploy: ขั้นตอนนี้ส่งมอบงานของเราไปยังที่ต่างๆ เช่น Hosting, K8S หรือ Google cloud

ความแตกต่างของ Job

Job คือหน่วยงานที่เล็กที่สุดในไฟล์ .gitlab-ci.yml แต่ละงานสามารถมีชุดขั้นตอนของตัวเองได้ และแต่ละขั้นตอนสามารถเป็นคำสั่ง เชลล์สคริปต์ หรืออิมเมจ Docker แบบกำหนดเองได้

วิธีเขียนไฟล์ .gitlab-ci.yml

ตัวอย่างโค็ดของ .gitlab-ci.yml

image: node:18

stages:
    - build
    - deploy
    - test

variables:
  RAILS_ENV: "test"
  NODE_ENV: "test"
  GIT_STRATEGY: "clone"
  CHROME_VERSION: "103"
  DOCKER_VERSION: "20.10.14"

build-job:
  stage: build
  script:
    - echo "Check node version and build your binary or docker image."
    - node -v
    - bash buildScript.sh

deploy-code:
  stage: deploy
  needs: build-job
  script:
    - echo "Deploy your code "
    - cd to/your/desired/folder
    - bash deployScript.sh

test-code:
  stage: test
  needs: deploy-code
  script:
    - echo "Run your tests here."
    - cd to/your/desired/folder
    - npm run test

ในตัวอย่างนี้จะเห็นว่ามี 3 stages ด้วยกันคือ build, test และ deploy ซึ่งในขั้นตอน build จะเป็นการเตรียมไฟล์ของโปรเจกต์ ขั้นตอน test คือการทดสอบโปรเจกต์ด้วย script ต่างๆ และขั้นตอน deploy ก็คือการส่งมอบโปรเจกต์ไปยัง hosting หรือ server ต่างๆ

และในไฟล์นี้จะประกอบไปด้วย 3 Job ได้แก่ build-job, deploy-code และ test-code โดยในทุก Job จะมีการใช้งาน node:18 ตามที่เราได้ประกาศ image ไว้บนสุด

ตรวจสอบสถานะ Pipeline

ไปที่ Build > Pipeline จากเมนูด้านซ้าย คุณสามารถตรวจสอบสถานะของไปป์ไลน์ได้ในหน้านี้ ที่นี่ คุณสามารถตรวจสอบ commit ID, branch, ผู้ใช้ที่กดไปป์ไลน์, stage และสถานะต่างๆ

หากคุณคลิกที่สถานะ คุณจะเห็นมุมมองโดยละเอียดของการดำเนินการไปป์ไลน์

หากคุณคลิกที่งานภายใต้ขั้นตอนใดๆ คุณสามารถตรวจสอบบันทึกของคอนโซลโดยละเอียดได้

หากคุณมี artifacts ที่สร้างขึ้นในงานไปป์ไลน์ของคุณ คุณสามารถค้นหาได้โดยคลิกที่จุด 3 จุดสำหรับดาวโหลดออกมาได้

วิธีการเขียนไฟล์ .gitlab-ci.yml ให้ดี

แนวทางปฏิบัติที่ดีที่สุดสำหรับการเขียนไฟล์ .gitlab-ci.yml มีดังนี้

  • ใช้ชื่อที่สื่อความหมายสำหรับขั้นตอนและงานของคุณ
  • ใช้ Comments เพื่ออธิบายว่าแต่ละขั้นตอนทำหน้าที่อะไร
  • ใช้ตัวแปร (variables) เพื่อจัดเก็บค่าที่ใช้ทั่วไป เช่น ชื่อโครงการ หมายเลขเวอร์ชัน และตัวแปรสภาพแวดล้อม
  • ใช้ Job แบบขนาน (parallel) ได้เพื่อรันหลายงานในเวลาเดียวกัน
  • ใช้การดำเนินการตามเงื่อนไขเพื่อรันบางงานเมื่อตรงตามเงื่อนไขที่กำหนดเท่านั้น
  • ใช้ artifacts เพื่อจัดเก็บเอาต์พุตของงาน เช่น ผลการทดสอบหรือไฟล์ build ต่างๆ

บทสรุป

.gitlab-ci.yml เป็นเครื่องมืออันทรงพลังที่สามารถช่วยให้การทำงานของโปรเจกต์ทั้งหมดอยู่ในรูปแบบอัตโนมัติ และมันเป็นความคิดที่ดีที่จะเรียนรู้วิธีใช้และใช้เพื่อปรับปรุงคุณภาพและความน่าเชื่อถือของคุณ

Thanks:
- https://www.velotio.com/engineering-blog/create-ci-cd-pipeline-in-gitlab-in-under-10-mi
- https://docs.gitlab.com/ee/ci/yaml/gitlab_ci_yaml.html
- bard AI

ติดตามเนื้อหาอื่นๆ ของ Gitlab ได้ที่

gitlab - Snappytux Blog
Arnon Kijlerdphon

Arnon Kijlerdphon

Board game & Plant-based & Minimalist, it's all my life.
Bangkok, Thailand