1. วัตถุประสงค์
ในบทแนะนำนี้ คุณจะสร้างคลัสเตอร์ GKE 3 รายการที่ชื่อ Preview, Canary และ prod จากนั้นสร้างเป้าหมาย Cloud Deployment ที่สอดคล้องกับแต่ละคลัสเตอร์และไปป์ไลน์ Cloud Deploy ซึ่งจะกำหนดลำดับขั้นตอนเพื่อติดตั้งใช้งานในเป้าหมายเหล่านั้น
โฟลว์การติดตั้งใช้งานจะทริกเกอร์โดยไปป์ไลน์ Cloudbuild ที่จะสร้างรุ่นของ Cloud Deployment และดำเนินการติดตั้งใช้งานในคลัสเตอร์ตัวอย่าง หลังจากที่คุณตรวจสอบแล้วว่าการติดตั้งใช้งานในตัวอย่างประสบความสำเร็จและทำงานได้ตามที่คาดไว้ คุณจะโปรโมตรุ่นดังกล่าวด้วยตนเองในคลัสเตอร์ Canary การโปรโมตรุ่นในคลัสเตอร์ของเวอร์ชันที่ใช้งานจริงจะต้องได้รับอนุมัติ คุณจะต้องอนุมัติไปป์ไลน์ผลิตภัณฑ์ใน UI ของ Cloud Deployment และเลื่อนขั้นในที่สุด
วัตถุประสงค์ของบทแนะนำนี้สามารถแบ่งออกเป็นขั้นตอนต่อไปนี้
- เตรียมพื้นที่ทำงาน
- กำหนดเป้าหมายการทำให้ใช้งานได้บนระบบคลาวด์
- กำหนดไปป์ไลน์ Cloud Deployment
- สร้างรุ่น
- ส่งเสริมการติดตั้งใช้งาน
- อนุมัติรุ่นเวอร์ชันที่ใช้งานจริง
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่อีกครั้ง หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น
PROJECT_ID
) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว - มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
2. การตั้งค่าแพลตฟอร์ม
กำลังเตรียมพื้นที่ทำงาน
เราจะตั้งค่าสภาพแวดล้อมที่นี่ซึ่งจำเป็นต่อการเรียกใช้บทแนะนำนี้ เมื่อขั้นตอนนี้เสร็จสมบูรณ์แล้ว เราจะสร้างคลัสเตอร์ GKE ที่เราสามารถเรียกใช้การทำให้ใช้งานได้
- ตั้งค่าเริ่มต้นการกำหนดค่า gcloud
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- โคลนที่เก็บ
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- ตั้งค่าตัวแปรสภาพแวดล้อม
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- เปิดใช้ API
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- สร้างคลัสเตอร์ GKE
`gcloud container clusters create preview \`
--zone=us-central1-a --async
`gcloud container clusters create canary \`
--zone=us-central1-b --async
`gcloud container clusters create prod \`
--zone=us-central1-c
การกำหนดเป้าหมายการทำให้ใช้งานได้บนระบบคลาวด์
- สร้างไฟล์ในไดเรกทอรีการทำให้ใช้งานได้ที่ชื่อ Preview.yaml ด้วยคำสั่งต่อไปนี้ใน Cloudshell
cat <<EOF >deploy/preview.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: preview
annotations: {}
labels: {}
description: Target for preview environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview
EOF
As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
- สร้างไฟล์ในไดเรกทอรีการทำให้ใช้งานได้ที่ชื่อ canary.yaml ด้วยคำสั่งต่อไปนี้ใน Cloudshell
cat <<EOF >deploy/canary.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: canary
annotations: {}
labels: {}
description: Target for canary environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary
EOF
- สร้างไฟล์ในไดเรกทอรีการทำให้ใช้งานได้ชื่อ prod.yaml ด้วยคำสั่งต่อไปนี้ใน Cloudshell
cat <<EOF >deploy/prod.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
annotations: {}
labels: {}
description: Target for prod environment
requireApproval: true
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod
EOF
สังเกตว่าแท็ก requiredApproval ซึ่งตั้งค่าเป็น "จริง" การดำเนินการนี้จะไม่อนุญาตให้การโปรโมตเข้าสู่เป้าหมายการใช้งานจนกว่าจะได้รับอนุมัติ คุณต้องมีบทบาท/clouddeploy.approvalr เพื่ออนุมัติรุ่น
- สร้างเป้าหมายการทำให้ใช้งานได้
`gcloud config set deploy/region us-central1`
gcloud beta deploy apply --file deploy/preview.yaml
gcloud beta deploy apply --file deploy/canary.yaml
gcloud beta deploy apply --file deploy/prod.yaml
3. การสร้างแอป
โดยปกติแล้วไปป์ไลน์ CICD จะเป็นส่วนหนึ่งของการสร้างแอปพลิเคชันใหม่ เพื่อการสร้างอัตโนมัติ การทดสอบการผสานรวม และการทำให้ใช้งานได้ ขั้นตอนต่อไปนี้ถือเป็นส่วนหนึ่งของกระบวนการตั้งค่าแอปใหม่ แอปพลิเคชันใหม่แต่ละรายการจะมีไปป์ไลน์การทำให้ใช้งานได้ที่กำหนดค่าไว้
การกำหนดไปป์ไลน์ Cloud Deployment
- สร้างไฟล์ในไดเรกทอรีการติดตั้งใช้งานที่ชื่อไปป์ไลน์.yaml ด้วยคำสั่งต่อไปนี้ใน Cloudshell
cat <<EOF >>deploy/pipeline.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: DeliveryPipeline
metadata:
name: sample-app
labels:
`app: sample-app`
description: delivery pipeline
serialPipeline:
stages:
- targetId: preview
`profiles:`
`- preview`
- targetId: canary
`profiles:`
`- canary`
- targetId: prod
`profiles:`
`- prod`
EOF
As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.
แท็ก serialPipeline
มีแท็กที่มีชื่อขั้นตอนที่เป็นรายการของเป้าหมายทั้งหมดที่ไปป์ไลน์การนำส่งนี้ได้รับการกำหนดค่าเพื่อทำให้ใช้งานได้
targetId
ระบุเป้าหมายเฉพาะที่จะใช้ในขั้นตอนนี้ของไปป์ไลน์การนำส่ง ค่านี้คือพร็อพเพอร์ตี้metadata.name จากคำจำกัดความเป้าหมาย
profiles
คือรายการชื่อโปรไฟล์ Skaffold ตั้งแต่ 0 รายการขึ้นไปจาก skaffold.yaml Cloud Deployment จะใช้โปรไฟล์ที่มีการแสดงภาพ Skaffold เมื่อสร้างรุ่น
- ใช้ไปป์ไลน์
gcloud beta deploy apply --file deploy/pipeline.yaml
4. ช่วงการพัฒนา
เนื่องจากแอปพลิเคชันได้รับการพัฒนาเครื่องมือเชน CICD แบบอัตโนมัติจะสร้างและจัดเก็บชิ้นงาน คำสั่งต่อไปนี้จะดำเนินการเพื่อสร้างแอปพลิเคชันโดยใช้ Skaffold และ Store Asset สำหรับการทำให้ใช้งานได้กับ Cloud Deployment ขั้นตอนนี้จะดำเนินการโดยกระบวนการ CICD สำหรับทุกบิลด์แอปพลิเคชัน
- สร้างและจัดเก็บแอปพลิเคชันด้วย Skaffold
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. ระยะเผยแพร่
ในช่วงท้ายของกระบวนการ CICD โดยปกติแล้วเมื่อมีการติดแท็กโค้ดสำหรับเวอร์ชันที่ใช้งานจริง คุณจะเริ่มกระบวนการเผยแพร่โดยเรียกใช้คำสั่ง cloud deploy release
เมื่อการติดตั้งใช้งานได้รับการตรวจสอบและอนุมัติแล้วในภายหลัง คุณจะย้ายรุ่นผ่านสภาพแวดล้อมเป้าหมายต่างๆ โดยการโปรโมตและอนุมัติการดำเนินการผ่านกระบวนการอัตโนมัติหรือการอนุมัติด้วยตนเอง
การสร้างรุ่น
เราได้สร้างไฟล์ Cloud Deployment ในบทแนะนำนี้ก่อนหน้านี้เพื่อให้เข้าใจวิธีการทำงานของ Cloud Deployment ทั้งนี้เพื่อวัตถุประสงค์ในการสาธิต เราได้สร้างไฟล์ Cloud Deployment เดียวกันและพุชไปยังที่เก็บ GitHub ที่มีแอปพลิเคชัน Go ตัวอย่าง และเราจะใช้ Cloud Deploy เพื่อเผยแพร่แอปพลิเคชันดังกล่าว
export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud beta deploy releases create \
sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--description="Release demo" \
--build-artifacts=artifacts.json \
--annotations="release-id=rel-${REL_TIMESTAMP}"
ตรวจสอบผลงาน
เมื่อสร้างรุ่น Cloud Deployment แล้ว รุ่นดังกล่าวจะเปิดตัวโดยอัตโนมัติในเป้าหมายแรกซึ่งเป็นตัวอย่าง
- ไปที่ <Cloud Deploy> ในคอนโซล Google Cloud
- คลิก "ตัวอย่างแอป"
ในหน้าจอนี้ คุณจะเห็นภาพกราฟิกของไปป์ไลน์
- ยืนยันโครงร่างสีเขียวทางด้านซ้ายของช่องแสดงตัวอย่าง ซึ่งหมายความว่ารุ่นใช้งานได้กับสภาพแวดล้อมนั้นแล้ว
- เลือกตรวจสอบรายละเอียดเพิ่มเติมเกี่ยวกับรุ่นโดยคลิกที่ชื่อรุ่นใต้ "รายละเอียดรุ่น" ในส่วนล่างของหน้าจอ
- ยืนยันว่ารุ่นทำให้แอปพลิเคชันใช้งานได้เรียบร้อยแล้ว แล้วเรียกใช้คำสั่งต่อไปนี้
gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- คลิกไอคอนตัวอย่างเว็บที่ด้านขวาบนของหน้าจอ
- เลือก "แสดงตัวอย่างบนพอร์ต 8080"
ซึ่งจะนำคุณไปยังหน้าใหม่ที่แสดงข้อความ "สวัสดีทุกคน"
- ใช้
ctrl+c
ในเทอร์มินัลเพื่อสิ้นสุดการส่งต่อพอร์ต
การโปรโมตผลงาน
เมื่อทำให้รุ่นใช้งานได้ตามเป้าหมายแรก (พรีวิว) ในไปป์ไลน์แล้ว คุณจะเลื่อนขั้นรุ่นไปยังเป้าหมายถัดไป (Canary) ได้ เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มกระบวนการ
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
ตรวจสอบโปรโมชันการเปิดตัว
- ไปที่ไปป์ไลน์แอปตัวอย่างในคอนโซล Google Cloud
- ยืนยันโครงร่างสีเขียวทางด้านซ้ายของกล่อง Canary ซึ่งหมายความว่ารุ่นใช้งานได้กับสภาพแวดล้อมนั้นแล้ว
- ตรวจสอบว่าติดตั้งใช้งานแอปพลิเคชันอย่างถูกต้องแล้วโดยสร้างอุโมงค์ข้อมูลไปยังแอปพลิเคชัน
gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- คลิกไอคอนตัวอย่างเว็บที่ด้านขวาบนของหน้าจอ
- เลือก "แสดงตัวอย่างบนพอร์ต 8080"
ซึ่งจะนำคุณไปยังหน้าใหม่ที่แสดงข้อความ "สวัสดีทุกคน"
- ใช้
ctrl+c
ในเทอร์มินัลเพื่อสิ้นสุดการส่งต่อพอร์ต
การอนุมัติเวอร์ชันที่ใช้งานจริง
จำได้ว่าเราสร้างเป้าหมาย Pro ผ่าน prod.yaml เราได้ระบุแท็ก requiredApproval เป็น "จริง" การดำเนินการนี้จะบังคับให้ต้องมีการอนุมัติสำหรับการโปรโมตในผลิตภัณฑ์จริง
- โปรโมตการเผยแพร่ Canary เป็นเวอร์ชันที่ใช้งานจริงด้วยคำสั่งต่อไปนี้
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- ไปที่ไปป์ไลน์แอปตัวอย่างในคอนโซล Google Cloud
- โปรดสังเกตสัญญาณบอกสถานะสีเหลืองที่ระบุว่า "รอดำเนินการ 1 รายการ"
ข้อความนี้ระบุว่ามีรุ่นอยู่ในคิวเพื่อทำให้ใช้งานได้เป็นเวอร์ชันที่ใช้งานจริง แต่ต้องมีการตรวจสอบและอนุมัติ
- คลิก "ตรวจสอบ" ใต้การแจ้งเตือนสีเหลือง
- ในหน้าจอถัดไป ให้คลิก "ตรวจสอบ" อีกครั้งเพื่อเข้าถึงหน้าจอการอนุมัติสำหรับเวอร์ชันที่ใช้งานจริง
- (ไม่บังคับ) ตรวจสอบความแตกต่างของไฟล์ Manifest เพื่อตรวจสอบการเปลี่ยนแปลง ซึ่งในกรณีนี้คือไฟล์ใหม่ทั้งหมด
- คลิกปุ่ม "อนุมัติ" ปุ่ม
- กลับไปที่หน้าไปป์ไลน์แอปตัวอย่าง ซึ่งคุณจะเห็นรุ่นที่กำลังใช้เวอร์ชันที่ใช้งานจริง
ตรวจสอบเวอร์ชันที่ใช้งานจริง
เช่นเดียวกับสภาพแวดล้อมอื่นๆ คุณสามารถตรวจสอบการทำให้ใช้งานได้เมื่อการติดตั้งเสร็จสมบูรณ์โดยทำตามขั้นตอนด้านล่าง
- เรียกใช้คำสั่งต่อไปนี้บน Cloud Shell เพื่อสร้างพอร์ตไปข้างหน้า
gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- คลิกไอคอนตัวอย่างเว็บที่ด้านขวาบนของหน้าจอ
- เลือก "แสดงตัวอย่างบนพอร์ต 8080"
ซึ่งจะนำคุณไปยังหน้าใหม่ที่แสดงข้อความ "สวัสดีทุกคน"
- ใช้
ctrl+c
ในเทอร์มินัลเพื่อสิ้นสุดการส่งต่อพอร์ต