Gitlab-CI กล้วยๆ: Artifacts คืออะไร? ใช้ทำอะไร?
สิ่งหนึ่งที่ผมเรียกใช้งานบ่อยที่สุดคือ Artifacts มันคือฟีเจอร์หนึ่งของ GitLab CI ที่จะช่วยให้นักพัฒนามีแนวทางจัดเก็บข้อมูลหลังจาก Build หรือผลการทดสอบ และไฟล์สำคัญอื่นๆ ในตลอดกระบวนการ CI ด้วย GitLab CI Artifacts
ในบทความนี้ ผมจะอธิบาย Gitlab CI Artifacts ว่าเราทำอะไรกับมันได้บ้างและเมื่อไหร่ที่เราสามารถใช้มันได้ นอกจากนี้ เรายังสามารถกำหนดค่าที่สำคัญบางอย่างได้อีกด้วย
Gitlab CI Artifacts คืออะไร
Artifacts คือไฟล์ที่สร้างขึ้นผ่านกระบวนการที่เราใช้งานในไปป์ไลน์ (Pipeline) ซึ่งถ้าโปรเจกต์ของเราสร้างไฟล์ หรือมีผลลัพธ์ที่ออกมาในรูปแบบไฟล์ เช่น .html, .json หรือ .xml เราสามารถใช้ GitLab Artifacts เพื่อจัดการไฟล์ ให้เราสามารถดาวน์โหลดได้โดยการใช้ผ่าน UI หรือเรียก API
ตัวอย่าง Gitlab CI Artifact
ต่อไปนี้เป็นตัวอย่างการกำหนดค่าสำหรับการสร้าง GitLab CI Artifact ในไฟล์ .gitlab-ci.yml
stages:
- build
- deploy
build_job:
stage: build
script:
- npm install
- npm run build # ตัวอย่างคำสั่ง build
artifacts:
paths:
- dist/ # ตำแหน่งที่เก็บผลลัพธ์ของ build
จากตัวอย่างข้างต้น จะมี build_job
job ที่ทำการติดตั้ง npm install
จากนั้นก็ npm run build
ซึ่งมันจะได้โฟรเดอร์ dist/
ออกมา เมื่อดำเนินการ Pipeline เสร็จแล้ว โฟรเดอร์ dist/
ที่เป็นผลลัพธ์จะถูกจัดเก็บเป็น artifact ภายใน GitLab ซึ่งเราสามารถเรียกการเข้าถึงและใช้งานใน Stage หรือ Job อื่นๆ ที่ตามมาได้
Gitlab Artifacts ระหว่าง Stages
build_job:
stage: build
script:
- npm install
artifacts:
paths:
- node_modules/
test_job:
stage: test
dependencies:
- build_job
script: npm run test
ตามค่าเริ่มต้น Job ล่าสุดจะดาวน์โหลด artifact ทั้งหมดที่สร้างโดย Job ก่อนหน้าโดยอัตโนมัติ อย่างไรก็ตาม เราสามารถควบคุมการดาวน์โหลด artifact ใน Job โดยการใช้ dependencies:
ระบุชื่อ Job นั้นๆ ที่เราต้องการ
Artifacts ถูกเก็บไว้ที่ไหนใน GitLab?
ตามค่าเริ่มต้น สถานที่เก็บจะอยู่ใน /var/opt/gitlab/gitlab-rails/shared/artifacts
การหมดอายุของ Artifacts
บางครั้งเราไม่ต้องการเก็บไฟล์จำนวนมากในเซิร์ฟเวอร์ของเรา ตัวอย่างเช่น การจัดการไฟล์สำหรับบริษัทขนาดใหญ่ที่มีโครงการและนักพัฒนาจำนวนมากอาจเป็นปัญหาใหญ่ ในบางครั้ง เราทราบดีว่าเราไม่ควรเก็บไฟล์บางไฟล์ไว้บนเซิร์ฟเวอร์เป็นเวลานาน และเราสามารถบอก GitLab ได้เมื่อไฟล์นี้หมดอายุหรือทำเครื่องหมายว่าจะลบ
ในการลบไฟล์หลังจากช่วงเวลาการสร้างที่กำหนด เราสามารถใช้ expier_in
เพื่อกำหนดระยะเวลาที่ GitLab เก็บ Artifacts และเรายังสามารถใช้ Gitlab UI เพื่อจัดเก็บ Artifacts ไม่ให้หมดอายุ หากไม่ได้ระบุ expired_in
ไฟล์จะถูกลบหลังจาก 30 วัน
build_job:
stage: build
script:
- npm install
artifacts:
paths:
- node_modules/
expire_in: 1 week
GitLab Artifact Path
เราสามารถกำหนดหลายๆ Path หรือใช้ Wildcards (*) ระบุในการจัดเก็บไฟล์ได้
build_job:
stage: build
script:
- npm install
artifacts:
paths:
- node_modules/
- target/*.html
expire_in: 1 week
การระบุขนาดจัดเก็บ Artifacts
โดยค่าเริ่มต้น Gitlab จะกำหนดมาให้ไม่เกิน 100MB ต่อ Artifact หรือเราสามารถไปกำหนดใน Admin area เอาเองก็ได้ Admin -> Settings -> CI/CD
โดยสรุป GitLab CI Artifacts เป็นฟีเจอร์ที่ทรงพลังในการจัดเก็บพวกไฟล์ build หรือผลการทดสอบ และไฟล์ที่เกี่ยวข้องอื่นๆ ภายในไปป์ไลน์ CI/CD คุณลักษณะและประโยชน์ที่สำคัญของการใช้ GitLab CI Artifact ได้แก่ พื้นที่เก็บข้อมูลแบบรวมศูนย์ การรวมไฟล์แบบเลือก การแชร์ระหว่าง Stage หรือ Job ใน Pipeline ที่ง่ายดาย
ศึกษาเพิ่มเติม: https://docs.gitlab.com/ee/ci/yaml/#artifacts