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