Update new tag of container image with commit SHA and redeploy to K8S by using Cloud Build
หลังจากที่ได้พูดถึงการทำ 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 กันไปประมาณนี้ แต่ที่เปลี่ยนไปคือ 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 ด้วยการเอา 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 แล้ว~~