1. วัตถุประสงค์
ในบทแนะนำนี้ คุณจะได้สร้างคลัสเตอร์ GKE 3 รายการชื่อ preview, canary และ prod จากนั้นสร้างเป้าหมาย Cloud Deploy ที่สอดคล้องกับแต่ละคลัสเตอร์และไปป์ไลน์ Cloud Deploy ที่จะกำหนดลำดับขั้นตอนในการทำการติดตั้งใช้งานในเป้าหมายเหล่านั้น
เวิร์กโฟลว์การทำให้ใช้งานได้จะทริกเกอร์โดยไปป์ไลน์ Cloud Build ซึ่งจะสร้างรีลีส Cloud Deploy และทำการติดตั้งใช้งานในคลัสเตอร์ตัวอย่าง หลังจากยืนยันว่าการติดตั้งใช้งานในเวอร์ชันตัวอย่างสำเร็จและทำงานได้ตามที่คาดไว้แล้ว คุณจะต้องเลื่อนระดับเวอร์ชันในคลัสเตอร์ Canary ด้วยตนเอง การโปรโมตเวอร์ชันในคลัสเตอร์ที่ใช้งานจริงจะต้องได้รับการอนุมัติ โดยคุณจะอนุมัติไปป์ไลน์ที่ใช้งานจริงใน UI ของ Cloud Deploy แล้วจึงโปรโมต
วัตถุประสงค์ของบทแนะนำนี้แบ่งออกเป็นขั้นตอนต่อไปนี้
- เตรียมพื้นที่ทำงาน
- กำหนดเป้าหมาย Cloud Deploy
- กำหนดไปป์ไลน์ Cloud Deploy
- สร้างรุ่น
- เลื่อนระดับการทำให้ใช้งานได้
- อนุมัติรุ่นสำหรับเวอร์ชันที่ใช้งานจริง
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ โดยเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ และคุณสามารถอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (และโดยทั่วไปจะระบุเป็น
PROJECT_ID) ดังนั้นหากไม่ชอบรหัสนี้ ให้สร้างรหัสแบบสุ่มอีกรหัส หรือคุณจะลองใช้รหัสของคุณเองและดูว่ามีรหัสนั้นหรือไม่ก็ได้ จากนั้นจะ "หยุด" หลังจากสร้างโปรเจ็กต์แล้ว - นอกจากนี้ยังมีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
2. การตั้งค่าแพลตฟอร์ม
การเตรียมพื้นที่ทำงาน
เราจะตั้งค่าสภาพแวดล้อมที่จำเป็นต่อการเรียกใช้บทแนะนำนี้ที่นี่ เมื่อขั้นตอนนี้เสร็จสมบูรณ์แล้ว เราจะมีคลัสเตอร์ GKE ที่สร้างขึ้นซึ่งเราสามารถเรียกใช้การติดตั้งใช้งานได้
- ตั้งค่าเริ่มต้นของ gcloud config
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
การกำหนดเป้าหมาย Cloud Deploy
- สร้างไฟล์ในไดเรกทอรีการทำให้ใช้งานได้ชื่อ preview.yaml ด้วยคำสั่งต่อไปนี้ใน Cloud Shell
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 ด้วยคำสั่งต่อไปนี้ใน Cloud Shell
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 ด้วยคำสั่งต่อไปนี้ใน Cloud Shell
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
โปรดสังเกตแท็ก requireApproval ซึ่งตั้งค่าเป็น true ซึ่งจะไม่อนุญาตให้โปรโมตไปยังเป้าหมาย Prod จนกว่าจะได้รับอนุมัติ คุณต้องมีบทบาท roles/clouddeploy.approver เพื่ออนุมัติรุ่น
- สร้างเป้าหมายการทำให้ใช้งานได้
`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 Deploy
- สร้างไฟล์ในไดเรกทอรีการทำให้ใช้งานได้ชื่อ pipeline.yaml ด้วยคำสั่งต่อไปนี้ใน Cloud Shell
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 มีแท็กชื่อ stages ซึ่งเป็นรายการเป้าหมายทั้งหมดที่กำหนดค่าไปป์ไลน์การนำส่งนี้ให้ทำให้ใช้งานได้
targetId ระบุเป้าหมายที่เฉพาะเจาะจงที่จะใช้สําหรับขั้นตอนของไปป์ไลน์การนําส่งนี้ ค่าคือพร็อพเพอร์ตี้ metadata.name จากคำจำกัดความเป้าหมาย
profiles คือรายการชื่อโปรไฟล์ Skaffold ตั้งแต่ 0 รายการขึ้นไปจาก skaffold.yaml Cloud Deploy ใช้โปรไฟล์ที่มีการแสดงผลของ Skaffold เมื่อสร้างรุ่น
- ใช้ไปป์ไลน์
gcloud beta deploy apply --file deploy/pipeline.yaml
4. ระยะการพัฒนา
เมื่อมีการพัฒนาแอปพลิเคชันแล้ว เครื่องมือ CICD อัตโนมัติจะสร้างและจัดเก็บชิ้นงาน ระบบจะเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างแอปพลิเคชันโดยใช้ Skaffold และจัดเก็บชิ้นงานสำหรับการติดตั้งใช้งานด้วย Cloud Deploy ขั้นตอนนี้จะดำเนินการโดยกระบวนการ CICD สำหรับบิลด์แอปพลิเคชันทุกรายการ
- สร้างและจัดเก็บแอปพลิเคชันด้วย Skaffold
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. ระยะการเปิดตัว
ในตอนท้ายของกระบวนการ CICD โดยปกติเมื่อมีการติดแท็กโค้ดสำหรับเวอร์ชันที่ใช้งานจริง คุณจะเริ่มกระบวนการเผยแพร่โดยเรียกใช้คำสั่ง cloud deploy release หลังจากที่การติดตั้งใช้งานได้รับการตรวจสอบและอนุมัติแล้ว คุณจะย้ายรุ่นผ่านสภาพแวดล้อมเป้าหมายต่างๆ ได้โดยการเลื่อนระดับและอนุมัติการดำเนินการผ่านกระบวนการอัตโนมัติหรือการอนุมัติด้วยตนเอง
การสร้างรุ่น
เราได้สร้างไฟล์ Cloud Deploy ในบทแนะนำนี้ก่อนหน้านี้เพื่อทำความเข้าใจวิธีการทำงานของ Cloud Deploy เพื่อวัตถุประสงค์ในการสาธิต เราได้สร้างไฟล์ Cloud Deploy เดียวกันและพุชไปยังที่เก็บ 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 Deploy ระบบจะเปิดตัวรีลีสดังกล่าวในเป้าหมายแรกซึ่งเป็นเวอร์ชันตัวอย่างโดยอัตโนมัติ
- ไปที่ <Cloud Deploy> ใน Google Cloud Console
- คลิก "sample-app"
ในหน้าจอนี้ คุณจะเห็นภาพกราฟิกของไปป์ไลน์
- ยืนยันว่ามีเส้นขอบสีเขียวที่ด้านซ้ายของช่องแสดงตัวอย่าง ซึ่งหมายความว่าระบบได้นํารุ่นไปใช้ในสภาพแวดล้อมนั้นแล้ว
- ดูรายละเอียดเพิ่มเติมเกี่ยวกับผลงานได้โดยคลิกชื่อผลงานในส่วนรายละเอียดผลงานที่ด้านล่างของหน้าจอ (ไม่บังคับ)
- ตรวจสอบว่ารุ่นที่เผยแพร่ทำให้แอปพลิเคชันใช้งานได้สำเร็จหรือไม่ โดยเรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
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"
ซึ่งจะนำคุณไปยังหน้าใหม่ที่แสดงข้อความ "Hello World!"
- ใช้
ctrl+cในเทอร์มินัลเพื่อสิ้นสุดการส่งต่อพอร์ต
โปรโมตผลงาน
เมื่อทำให้รุ่นใช้งานได้กับเป้าหมายแรก (ตัวอย่าง) ในไปป์ไลน์แล้ว คุณก็สามารถเลื่อนระดับไปยังเป้าหมายถัดไป (คานารี) ได้ เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มกระบวนการ
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
ตรวจสอบโปรโมชันการเปิดตัว
- ไปที่ไปป์ไลน์ sample-app ในคอนโซล 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"
ซึ่งจะนำคุณไปยังหน้าใหม่ที่แสดงข้อความ "Hello World!"
- ใช้
ctrl+cในเทอร์มินัลเพื่อสิ้นสุดการส่งต่อพอร์ต
การอนุมัติรุ่นสำหรับเวอร์ชันที่ใช้งานจริง
โปรดจำไว้ว่าเมื่อเราสร้างเป้าหมาย prod ผ่าน prod.yaml เราได้ระบุแท็ก requireApproval เป็น true ซึ่งจะบังคับให้ต้องได้รับการอนุมัติก่อนจึงจะโปรโมตในสภาพแวดล้อมการผลิตได้
- เลื่อนรุ่น Canary เป็นเวอร์ชันที่ใช้งานจริงด้วยคำสั่งต่อไปนี้
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- ไปที่ไปป์ไลน์ sample-app ในคอนโซล 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"
ซึ่งจะนำคุณไปยังหน้าใหม่ที่แสดงข้อความ "Hello World!"
- ใช้
ctrl+cในเทอร์มินัลเพื่อสิ้นสุดการส่งต่อพอร์ต