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
Comments ()