Update new tag of container image with commit SHA and redeploy to K8S by using Cloud Build

Mookky
2 min readJan 5, 2022

--

หลังจากที่ได้พูดถึงการทำ CI/CD Pipeline ด้วย tools ของ GCP ไปแล้วจากบทความก่อนหน้า ก็ทำให้เราพบปัญหาบางอย่างที่อาจจะตามมาทีหลัง

> Previous chapter

pull image ด้วย tag latest ทีไร เหมือนได้ของเก่า ไม่เห็นจะเป็น image ใหม่ล่าสุดที่เพิ่ง push ขึ้นไปเลย…

ด้วยปัญหานี้ทำให้การใช้ tag ที่ชื่อ latest เริ่มจะเป็นปัญหา เพราะบางทีได้บ้าง บางทีไม่ได้บ้าง คนเดฟก็งงว่า push code ไปแล้วหรือเปล่านะ ทั้งๆที่ปัญหามันเกิดจากการ set pipeline เนี่ยแหละ

วิธีแก้ที่ดีที่สุดคือใช้ tag ที่มัน unique ซะเลย

ใส่ตอน push image ขึ้น registry hub นั่นแหละ

แล้วอะไรที่จะมาเป็นค่าเฉพาะได้บ้าง จะให้ random ค่าที่ unique ก็ต้องมาเขียน code ระหว่างรัน Pipeline หรือเปล่า?

จริงๆมันก็ทำได้ แต่ไม่ทำดีกว่า เอาค่า commit SHA จาก Git เนี่ยแหละมาเป็นชื่อ tag ซะเลย

Pipeline when using Cloud Build

จากบทความที่แล้วเราเขียน Pipeline กันไปประมาณนี้ แต่ที่เปลี่ยนไปคือ step ที่ 6 กับ 7

ก่อนหน้านี้ step ที่ 6 เรา deploy container image อันใหม่เลย แต่ใน step นี้เราเปลี่ยนเป็นใช้ sed command เพื่อทำการ replace text

ตรงบรรทัดที่ 49 เราจะแทนที่ตัวแปร APP_IMAGE_NAME ด้วย asia-southeast1-docker.pkg.dev/[PROJECT_ID]/[ARTIFACT_REPOSITORY]/[IMAGE_NAME]:$COMMIT_SHA ซึ่งเป็น registry path ที่มี tag ตาม commit SHA และไฟล์ที่กำลังจะถูกเขียนใหม่จะอยู่ที่ k8s/deployment.yaml

deployment.yaml

ทำการแก้ไข deployment.yaml ด้วยการเอา APP_IMAGE_NAME ไปไว้ที่ containers.image ตรงบรรทัดที่ 21 ซึ่งค่าตรงนี้จะถูกแทนที่เป็น asia-southeast1-docker.pkg.dev/[PROJECT_ID]/[ARTIFACT_REPOSITORY]/[IMAGE_NAME]:$COMMIT_SHA

เสร็จแล้ว commit code และ push ขึ้นไป จะเห็นว่าตอนนี้ tag image ของเราจะเป็นค่าเดียวกับ commit SHA แล้ว~~

Artifact Registry’s Dashboard

Reference

--

--

Mookky
Mookky

No responses yet