การเปิดตัวพร้อมกับ Cloud Deployment

1. วัตถุประสงค์

ในบทแนะนำนี้ คุณจะสร้างคลัสเตอร์ GKE 3 รายการที่ชื่อ Preview, Canary และ prod จากนั้นสร้างเป้าหมาย Cloud Deployment ที่สอดคล้องกับแต่ละคลัสเตอร์และไปป์ไลน์ Cloud Deploy ซึ่งจะกำหนดลำดับขั้นตอนเพื่อติดตั้งใช้งานในเป้าหมายเหล่านั้น

โฟลว์การติดตั้งใช้งานจะทริกเกอร์โดยไปป์ไลน์ Cloudbuild ที่จะสร้างรุ่นของ Cloud Deployment และดำเนินการติดตั้งใช้งานในคลัสเตอร์ตัวอย่าง หลังจากที่คุณตรวจสอบแล้วว่าการติดตั้งใช้งานในตัวอย่างประสบความสำเร็จและทำงานได้ตามที่คาดไว้ คุณจะโปรโมตรุ่นดังกล่าวด้วยตนเองในคลัสเตอร์ Canary การโปรโมตรุ่นในคลัสเตอร์ของเวอร์ชันที่ใช้งานจริงจะต้องได้รับอนุมัติ คุณจะต้องอนุมัติไปป์ไลน์ผลิตภัณฑ์ใน UI ของ Cloud Deployment และเลื่อนขั้นในที่สุด

วัตถุประสงค์ของบทแนะนำนี้สามารถแบ่งออกเป็นขั้นตอนต่อไปนี้

  • เตรียมพื้นที่ทำงาน
  • กำหนดเป้าหมายการทำให้ใช้งานได้บนระบบคลาวด์
  • กำหนดไปป์ไลน์ Cloud Deployment
  • สร้างรุ่น
  • ส่งเสริมการติดตั้งใช้งาน
  • อนุมัติรุ่นเวอร์ชันที่ใช้งานจริง

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่อีกครั้ง หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น PROJECT_ID) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว
  • มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

2. การตั้งค่าแพลตฟอร์ม

กำลังเตรียมพื้นที่ทำงาน

เราจะตั้งค่าสภาพแวดล้อมที่นี่ซึ่งจำเป็นต่อการเรียกใช้บทแนะนำนี้ เมื่อขั้นตอนนี้เสร็จสมบูรณ์แล้ว เราจะสร้างคลัสเตอร์ GKE ที่เราสามารถเรียกใช้การทำให้ใช้งานได้

  1. ตั้งค่าเริ่มต้นการกำหนดค่า gcloud

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. โคลนที่เก็บ

git clone https://github.com/gushob21/software-delivery-workshop

cd software-delivery-workshop/labs/cloud-deploy/

cloudshell workspace .

rm -rf deploy && mkdir deploy

  1. ตั้งค่าตัวแปรสภาพแวดล้อม

export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")

  1. เปิดใช้ API

gcloud services enable \

cloudresourcemanager.googleapis.com \

    `container.googleapis.com \`

    `cloudbuild.googleapis.com \`

    `containerregistry.googleapis.com \`

    `secretmanager.googleapis.com \`

    `clouddeploy.googleapis.com` 
  1. สร้างคลัสเตอร์ 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

การกำหนดเป้าหมายการทำให้ใช้งานได้บนระบบคลาวด์

  1. สร้างไฟล์ในไดเรกทอรีการทำให้ใช้งานได้ที่ชื่อ 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.
  1. สร้างไฟล์ในไดเรกทอรีการทำให้ใช้งานได้ที่ชื่อ 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

  1. สร้างไฟล์ในไดเรกทอรีการทำให้ใช้งานได้ชื่อ 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 เพื่ออนุมัติรุ่น

  1. สร้างเป้าหมายการทำให้ใช้งานได้
         `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

  1. สร้างไฟล์ในไดเรกทอรีการติดตั้งใช้งานที่ชื่อไปป์ไลน์.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 เมื่อสร้างรุ่น

  1. ใช้ไปป์ไลน์

gcloud beta deploy apply --file deploy/pipeline.yaml

4. ช่วงการพัฒนา

เนื่องจากแอปพลิเคชันได้รับการพัฒนาเครื่องมือเชน CICD แบบอัตโนมัติจะสร้างและจัดเก็บชิ้นงาน คำสั่งต่อไปนี้จะดำเนินการเพื่อสร้างแอปพลิเคชันโดยใช้ Skaffold และ Store Asset สำหรับการทำให้ใช้งานได้กับ Cloud Deployment ขั้นตอนนี้จะดำเนินการโดยกระบวนการ CICD สำหรับทุกบิลด์แอปพลิเคชัน

  1. สร้างและจัดเก็บแอปพลิเคชันด้วย 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 แล้ว รุ่นดังกล่าวจะเปิดตัวโดยอัตโนมัติในเป้าหมายแรกซึ่งเป็นตัวอย่าง

  1. ไปที่ <Cloud Deploy> ในคอนโซล Google Cloud
  2. คลิก "ตัวอย่างแอป"

ในหน้าจอนี้ คุณจะเห็นภาพกราฟิกของไปป์ไลน์

  1. ยืนยันโครงร่างสีเขียวทางด้านซ้ายของช่องแสดงตัวอย่าง ซึ่งหมายความว่ารุ่นใช้งานได้กับสภาพแวดล้อมนั้นแล้ว
  2. เลือกตรวจสอบรายละเอียดเพิ่มเติมเกี่ยวกับรุ่นโดยคลิกที่ชื่อรุ่นใต้ "รายละเอียดรุ่น" ในส่วนล่างของหน้าจอ
  3. ยืนยันว่ารุ่นทำให้แอปพลิเคชันใช้งานได้เรียบร้อยแล้ว แล้วเรียกใช้คำสั่งต่อไปนี้

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

  1. คลิกไอคอนตัวอย่างเว็บที่ด้านขวาบนของหน้าจอ
  2. เลือก "แสดงตัวอย่างบนพอร์ต 8080"

ซึ่งจะนำคุณไปยังหน้าใหม่ที่แสดงข้อความ "สวัสดีทุกคน"

  1. ใช้ ctrl+c ในเทอร์มินัลเพื่อสิ้นสุดการส่งต่อพอร์ต

การโปรโมตผลงาน

เมื่อทำให้รุ่นใช้งานได้ตามเป้าหมายแรก (พรีวิว) ในไปป์ไลน์แล้ว คุณจะเลื่อนขั้นรุ่นไปยังเป้าหมายถัดไป (Canary) ได้ เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มกระบวนการ

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

ตรวจสอบโปรโมชันการเปิดตัว

  1. ไปที่ไปป์ไลน์แอปตัวอย่างในคอนโซล Google Cloud
  2. ยืนยันโครงร่างสีเขียวทางด้านซ้ายของกล่อง Canary ซึ่งหมายความว่ารุ่นใช้งานได้กับสภาพแวดล้อมนั้นแล้ว
  3. ตรวจสอบว่าติดตั้งใช้งานแอปพลิเคชันอย่างถูกต้องแล้วโดยสร้างอุโมงค์ข้อมูลไปยังแอปพลิเคชัน

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

  1. คลิกไอคอนตัวอย่างเว็บที่ด้านขวาบนของหน้าจอ
  2. เลือก "แสดงตัวอย่างบนพอร์ต 8080"

ซึ่งจะนำคุณไปยังหน้าใหม่ที่แสดงข้อความ "สวัสดีทุกคน"

  1. ใช้ ctrl+c ในเทอร์มินัลเพื่อสิ้นสุดการส่งต่อพอร์ต

การอนุมัติเวอร์ชันที่ใช้งานจริง

จำได้ว่าเราสร้างเป้าหมาย Pro ผ่าน prod.yaml เราได้ระบุแท็ก requiredApproval เป็น "จริง" การดำเนินการนี้จะบังคับให้ต้องมีการอนุมัติสำหรับการโปรโมตในผลิตภัณฑ์จริง

  1. โปรโมตการเผยแพร่ Canary เป็นเวอร์ชันที่ใช้งานจริงด้วยคำสั่งต่อไปนี้

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

  1. ไปที่ไปป์ไลน์แอปตัวอย่างในคอนโซล Google Cloud
  2. โปรดสังเกตสัญญาณบอกสถานะสีเหลืองที่ระบุว่า "รอดำเนินการ 1 รายการ"

ข้อความนี้ระบุว่ามีรุ่นอยู่ในคิวเพื่อทำให้ใช้งานได้เป็นเวอร์ชันที่ใช้งานจริง แต่ต้องมีการตรวจสอบและอนุมัติ

  1. คลิก "ตรวจสอบ" ใต้การแจ้งเตือนสีเหลือง
  2. ในหน้าจอถัดไป ให้คลิก "ตรวจสอบ" อีกครั้งเพื่อเข้าถึงหน้าจอการอนุมัติสำหรับเวอร์ชันที่ใช้งานจริง
  3. (ไม่บังคับ) ตรวจสอบความแตกต่างของไฟล์ Manifest เพื่อตรวจสอบการเปลี่ยนแปลง ซึ่งในกรณีนี้คือไฟล์ใหม่ทั้งหมด
  4. คลิกปุ่ม "อนุมัติ" ปุ่ม
  5. กลับไปที่หน้าไปป์ไลน์แอปตัวอย่าง ซึ่งคุณจะเห็นรุ่นที่กำลังใช้เวอร์ชันที่ใช้งานจริง

ตรวจสอบเวอร์ชันที่ใช้งานจริง

เช่นเดียวกับสภาพแวดล้อมอื่นๆ คุณสามารถตรวจสอบการทำให้ใช้งานได้เมื่อการติดตั้งเสร็จสมบูรณ์โดยทำตามขั้นตอนด้านล่าง

  1. เรียกใช้คำสั่งต่อไปนี้บน 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

  1. คลิกไอคอนตัวอย่างเว็บที่ด้านขวาบนของหน้าจอ
  2. เลือก "แสดงตัวอย่างบนพอร์ต 8080"

ซึ่งจะนำคุณไปยังหน้าใหม่ที่แสดงข้อความ "สวัสดีทุกคน"

  1. ใช้ ctrl+c ในเทอร์มินัลเพื่อสิ้นสุดการส่งต่อพอร์ต