ข้ามไปยังเนื้อหาหลัก

Git Update Manifest (อัปเดต Manifest ใน GitOps)

อัปเดต image tag ในไฟล์ GitOps manifest แล้ว commit กลับไปยัง repository

การอ้างอิง (Reference): loha/git-update-manifest@v1

หมวดหมู่: Deploy (การส่งมอบและติดตั้ง)

รันไทม์ (Runtime): alpine/git:2.43.0 (รันแบบ non-root, ตรึงด้วย digest)

สัญญาอนุญาต (License): Apache-2.0

ควรใช้เมื่อ​

ใช้ในขั้นตอนการ deploy เมื่อมี ArgoCD หรือ GitOps controller คอยเฝ้าติดตาม (watch) repository จัดเก็บ manifest แยกต่างหาก หลังจากสร้าง image ใหม่เสร็จแล้ว task นี้จะช่วยอัปเดต tag เพื่อให้ controller นำการเปลี่ยนแปลงไปปรับใช้ในคลัสเตอร์

พารามิเตอร์​

พารามิเตอร์ชนิดค่าเริ่มต้นจำเป็นคำอธิบาย
GIT_REPOSITORYstring—ใช่URL ของ GitOps repository สำหรับจัดเก็บ manifest
GIT_BRANCHstringmainไม่branch ใน Git repository ที่ต้องการอัปเดต
IMAGE_NAMEstring—ใช่ชื่ออิมเมจแบบเต็ม (ไม่รวม tag)
IMAGE_TAGstring—ใช่tag ใหม่ที่ต้องการอัปเดตให้กับอิมเมจ
MANIFEST_PATHstringk8s/kustomization.yamlไม่เส้นทาง (path) ของไฟล์ manifest ภายใน repository
MANIFEST_TYPEstringkustomizeไม่ชนิดของ manifest เช่น kustomize, helm หรือ kubernetes

พื้นที่ทำงาน (Workspaces)​

  • source (จำเป็น): เชื่อมโยงจาก pipeline workspace source
  • ssh-directory (ไม่บังคับ): เชื่อมโยงจาก pipeline workspace ssh-credentials
  • basic-auth (ไม่บังคับ): เชื่อมโยงจาก pipeline workspace git-credentials

ผลลัพธ์ (Results)​

ผลลัพธ์ (Result)คำอธิบาย
COMMITCommit SHA ของ manifest repository หลังการอัปเดตและ commit
UPDATED_FILEเส้นทางของไฟล์ manifest ที่ถูกแก้ไข

การทำงาน​

โคลน GitOps repository จาก GIT_REPOSITORY แล้วอัปเดต tag ของอิมเมจที่ระบุใน IMAGE_NAME ให้เป็นค่าใหม่ตาม IMAGE_TAG โดยรองรับชนิดของไฟล์ตาม MANIFEST_TYPE ได้แก่ Kustomize, Helm และ Kubernetes manifest ทั่วไป จากนั้นจึงสั่ง commit และ push การเปลี่ยนแปลงผ่าน SSH credential ที่เชื่อมโยงใน workspace

ตัวอย่าง​

อัปเดต image tag ใน Kustomize หลัง build สำเร็จ​

steps:
- name: bump-manifest
uses: loha/git-update-manifest@v1
with:
GIT_REPOSITORY: 'git@gitlab.example.com:my-org/my-app-manifests.git'
GIT_BRANCH: 'main'
IMAGE_NAME: 'registry.example.com/my-org/my-app'
IMAGE_TAG: '${COMMIT_SHA}'
MANIFEST_PATH: 'k8s/overlays/production/kustomization.yaml'
MANIFEST_TYPE: 'kustomize'

การแก้ปัญหา​

ปัญหา: การ push ถูกปฏิเสธเนื่องจาก branch ปลายทางมีการตั้งค่าป้องกันไว้ (branch protection)

วิธีแก้: ใช้ deploy key หรือ credential ที่ได้รับสิทธิ์ bypass branch protection หรือเลือก push ไปยัง branch อื่นที่อนุญาต แล้วตั้งระบบ automation ช่วย merge ในภายหลัง


ปัญหา: ArgoCD ไม่ตรวจพบการเปลี่ยนแปลงของ image tag ใหม่

วิธีแก้: ตรวจสอบว่า MANIFEST_TYPE ถูกต้องตรงกับรูปแบบไฟล์ และตรวจสอบ git diff ใน commit ที่ task สร้างขึ้น เพื่อยืนยันว่าการแก้ไขไฟล์ manifest ถูกต้องสมบูรณ์