การเริ่มต้นใช้งานแอป

1. ก่อนเริ่มต้น

การตั้งค่าสภาพแวดล้อมด้วยตนเอง

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

  1. เปิดเครื่องมือแก้ไข Cloud Shell โดยไปที่ URL ต่อไปนี้

https://ide.cloud.google.com

  1. ตรวจสอบว่าได้ตั้งค่าชื่อโปรเจ็กต์ใน CLI

gcloud config set project {{project-id}}

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

export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

  1. เปิดใช้ API

gcloud services enable \

cloudbuild.googleapis.com \

secretmanager.googleapis.com

  1. ให้สิทธิ์แก่ CloudDeploy

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.admin ${PROJECT_ID}

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/container.developer ${PROJECT_ID}

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/iam.serviceAccountUser ${PROJECT_ID}

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.jobRunner ${PROJECT_ID}

  1. ในหน้าต่างเทอร์มินัล ให้โคลนแหล่งที่มาของแอปพลิเคชันด้วยคำสั่งต่อไปนี้

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

  1. เปลี่ยนเป็นไดเรกทอรีและตั้งค่าพื้นที่ทํางาน IDE เป็นรูทของรีโป

cd software-delivery-workshop && rm -rf .git

cd delivery-platform && cloudshell workspace .

3. การใช้เทมเพลตแอปที่กำหนดไว้ล่วงหน้าและที่กำหนดเอง

นักพัฒนาแอปควรสามารถเลือกจากชุดเทมเพลตที่ใช้กันโดยทั่วไปในองค์กร กระบวนการเริ่มต้นใช้งานจะสร้างชุดที่เก็บเทมเพลตแบบรวมศูนย์ที่จัดเก็บไว้ในบัญชี GitHub ในขั้นตอนต่อๆ ไป ระบบจะคัดลอกและแก้ไขที่เก็บเทมเพลตเหล่านี้เพื่อใช้เป็นฐานสําหรับแอปพลิเคชันใหม่ ในการทดสอบนี้ คุณจะเริ่มสร้างที่เก็บเทมเพลตด้วยโครงสร้างตัวอย่างที่ระบุไว้ที่นี่ คุณสามารถเพิ่มเทมเพลตของคุณเองได้โดยเพิ่มโฟลเดอร์อื่นๆ ที่อิงตามตัวอย่าง

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

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

กำหนดค่าการเข้าถึง GitHub

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

source ./onboard-env.sh

echo Git Username: $GIT_USERNAME

echo Git Base URL: $GIT_BASE_URL

สร้างที่เก็บเทมเพลตแอป

เรามีตัวอย่างเทมเพลตแอปพลิเคชันไว้ให้พร้อมกับห้องทดลองนี้เพื่อเป็นตัวอย่างวิธีผสานรวมเทมเพลตพื้นฐานของคุณเอง ในขั้นตอนนี้ คุณจะสร้างสำเนาไฟล์เหล่านี้ของคุณเองในที่เก็บชื่อ mcd-app-templates ในบัญชี GitHub

  1. คัดลอกเทมเพลตไปยังไดเรกทอรีทํางาน

cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR

cd $WORK_DIR/app-templates

  1. สร้างที่เก็บระยะไกลที่ว่างเปล่าในบัญชี GitHub

$BASE_DIR/scripts/git/gh.sh create mcd-app-templates

  1. พุชที่เก็บเทมเพลตไปยังที่เก็บระยะไกล

git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"

git remote add origin $GIT_BASE_URL/mcd-app-templates

git push origin main

  1. ล้างข้อมูลไดเรกทอรีที่ใช้งานอยู่

cd $BASE_DIR

rm -rf $WORK_DIR/app-templates

สร้างที่เก็บการกำหนดค่าฐานที่แชร์

บทแนะนํานี้ใช้เครื่องมือชื่อ Kustomize ซึ่งใช้ไฟล์การกําหนดค่าพื้นฐานที่หลายทีมแชร์ จากนั้นวางการกําหนดค่าเฉพาะแอปพลิเคชันทับด้านบน ซึ่งช่วยให้ทีมแพลตฟอร์มปรับขนาดได้สำหรับทีมและสภาพแวดล้อมต่างๆ

ในขั้นตอนนี้ คุณสร้างที่เก็บข้อมูลการกําหนดค่าที่ใช้ร่วมกันชื่อ mcd-shared_kustomize จากตัวอย่างที่ให้มา

  1. คัดลอกเทมเพลตไปยังไดเรกทอรีทํางาน

cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR

cd $WORK_DIR/shared-kustomize

  1. สร้างที่เก็บระยะไกลที่ว่างเปล่าในบัญชี GitHub

$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize

  1. พุชที่เก็บเทมเพลตไปยังที่เก็บระยะไกล

git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"

git remote add origin $GIT_BASE_URL/mcd-shared_kustomize

git push origin main

  1. ล้างข้อมูลไดเรกทอรีที่ใช้งานอยู่

cd $BASE_DIR

rm -rf $WORK_DIR/shared-kustomize

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

4. การสร้างอินสแตนซ์ใหม่ของแอปพลิเคชัน

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

ในขั้นตอนนี้ คุณจะต้องแทนที่ค่าในเทมเพลตแอปและโพสต์ไฟล์ที่ได้ไปยังที่เก็บข้อมูลใหม่

กำหนดชื่อแอปพลิเคชันใหม่

export APP_NAME=my-app

เรียกข้อมูลที่เก็บเทมเพลต Golang

cd $WORK_DIR/

git clone -b main $GIT_BASE_URL/mcd-app-templates app-templates

rm -rf app-templates/.git

cd app-templates/golang

แทนที่ค่าตัวยึดตำแหน่ง

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

for template in $(find . -name '*.tmpl'); do envsubst < ${template} > ${template%.*}; done

สร้างที่เก็บใหม่และจัดเก็บไฟล์ที่อัปเดต

  1. สร้างที่เก็บระยะไกลที่ว่างเปล่าในบัญชี GitHub

$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}

  1. พุชที่เก็บเทมเพลตไปยังที่เก็บระยะไกล

git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"

git remote add origin $GIT_BASE_URL/${APP_NAME}

git push origin main

เมื่อสร้างอินสแตนซ์แอปแล้ว ก็ถึงเวลาใช้การสร้างแบบต่อเนื่อง

5. การกำหนดค่าการเรียกใช้ไปป์ไลน์อัตโนมัติ

ส่วนสำคัญของระบบการผสานรวมแบบต่อเนื่องคือความสามารถในการดำเนินการตรรกะไปป์ไลน์โดยอิงตามเหตุการณ์ที่เกิดขึ้นในระบบควบคุมต้นทาง เมื่อนักพัฒนาซอฟต์แวร์คอมมิตโค้ดในเหตุการณ์ที่เก็บเริ่มทำงานแล้ว ซึ่งสามารถกำหนดค่าให้ทริกเกอร์กระบวนการในระบบอื่นๆ ได้

ในขั้นตอนนี้ คุณจะต้องกำหนดค่า GitHub ให้เรียกใช้ Google Cloud Build และเรียกใช้ไปป์ไลน์ทุกครั้งที่ผู้ใช้คอมมิตหรือติดแท็กโค้ดในที่เก็บ

เปิดใช้การเข้าถึงที่ปลอดภัย

คุณจะต้องมีองค์ประกอบ 2 อย่างในการกำหนดค่าการเข้าถึงที่ปลอดภัยไปยังไปป์ไลน์แอปพลิเคชัน คีย์ API และข้อมูลลับเฉพาะของไปป์ไลน์

คีย์ API

คีย์ API ใช้เพื่อระบุไคลเอ็นต์ที่เรียก API หนึ่งๆ ในกรณีนี้ ไคลเอ็นต์จะเป็น GitHub แนวทางปฏิบัติแนะนำที่ไม่ได้กล่าวถึงในที่นี้คือการกำหนดขอบเขตของคีย์ API ให้เข้าถึงเฉพาะ API ที่เฉพาะเจาะจงซึ่งไคลเอ็นต์จะเข้าถึง คุณสร้างคีย์ในขั้นตอนก่อนหน้า

  1. คุณสามารถตรวจสอบคีย์ได้โดยคลิกลิงก์นี้
  2. คุณสามารถตรวจสอบว่าได้ตั้งค่าค่าแล้วโดยเรียกใช้คําสั่งต่อไปนี้

echo $API_KEY_VALUE

ข้อมูลลับไปป์ไลน์

ระบบจะใช้ข้อมูลลับดังกล่าวเพื่อให้สิทธิ์ผู้เรียกใช้และตรวจสอบว่าผู้เรียกใช้มีสิทธิ์เข้าถึงงานเป้าหมาย Cloud Build ที่เฉพาะเจาะจง คุณอาจมีที่เก็บ 2 รายการใน GitHub ซึ่งควรมีสิทธิ์เข้าถึงไปป์ไลน์ของตนเองเท่านั้น แม้ว่า API_KEY จะจำกัด API ที่ github ใช้ได้ (ในกรณีนี้จะมีการเรียก Cloud Build API) แต่ขีดจำกัดลับที่งานใน Cloud Build API ทำได้โดยไคลเอ็นต์

  1. กำหนดชื่อ ตำแหน่ง และค่าข้อมูลลับ

SECRET_NAME=${APP_NAME}-webhook-trigger-cd-secret

SECRET_PATH=projects/${PROJECT_NUMBER}/secrets/${SECRET_NAME}/versions/1

SECRET_VALUE=$(sed "s/[^a-zA-Z0-9]//g" <<< $(openssl rand -base64 15))

  1. สร้างข้อมูลลับ

printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-

  1. อนุญาตให้ Cloud Build อ่านข้อมูลลับ

gcloud secrets add-iam-policy-binding ${SECRET_NAME} \

--member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com \

--role='roles/secretmanager.secretAccessor'

สร้างทริกเกอร์ Cloud Build

ทริกเกอร์ Cloud Build คือการกำหนดค่าที่จะเรียกใช้กระบวนการ CICD จริง

งานจะต้องระบุคีย์-ค่า 2-3 รายการเมื่อสร้างเพื่อกําหนดค่าทริกเกอร์อย่างถูกต้อง

  1. กําหนดชื่อทริกเกอร์และตำแหน่งของไฟล์การกําหนดค่า

export TRIGGER_NAME=${APP_NAME}-clouddeploy-webhook-trigger

export BUILD_YAML_PATH=$WORK_DIR/app-templates/golang/build/cloudbuild-cd.yaml

  1. ระบุตำแหน่งของที่เก็บการกำหนดค่าฐานที่ใช้ร่วมกัน

export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize

  1. มีการตั้งค่าตัวแปรในสคริปต์ onboard-env.sh ที่กำหนด Container Registry ของโปรเจ็กต์ ตรวจสอบค่าด้วยคําสั่งด้านล่าง

echo $IMAGE_REPO

  1. สร้างทริกเกอร์ Webhook ของ CloudBuild โดยใช้ตัวแปรที่สร้างไว้ก่อนหน้านี้ ระบบจะดึงตำแหน่งที่เก็บแอปพลิเคชันจากเนื้อหาของคำขอจาก GitHub ค่าด้านล่างจะอ้างอิงถึงเส้นทางในเนื้อหาคําขอที่พบgcloud alpha builds triggers create webhook \
     `--name=${TRIGGER_NAME} \`
    
     `--substitutions='_APP_NAME='${APP_NAME}',_APP_REPO=$(body.repository.git_url),_CONFIG_REPO='${GIT_BASE_URL}'/'${CLUSTER_CONFIG_REPO}',_DEFAULT_IMAGE_REPO='${IMAGE_REPO}',_KUSTOMIZE_REPO='${GIT_BASE_URL}'/'${SHARED_KUSTOMIZE_REPO}',_REF=$(body.ref)' \`
    
     `--inline-config=$BUILD_YAML_PATH \`
    
     `--secret=${SECRET_PATH}`
    
  2. ตรวจสอบทริกเกอร์ Cloud Build ที่สร้างขึ้นใหม่ในคอนโซลโดยไปที่ลิงก์นี้
  3. กําหนดตัวแปรสําหรับ URL ปลายทางที่ GitHub จะใช้ในขั้นตอนถัดไป

WEBHOOK_URL="https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY_VALUE}&secret=${SECRET_VALUE}"

กำหนดค่าเว็บฮุคของ GitHub

  1. กำหนดค่าเว็บฮุคใน GitHub

$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL

  1. ไปที่ที่เก็บแอปพลิเคชันและตรวจสอบ Webhook ที่กําหนดค่าใหม่

REPO_URL=${GIT_BASE_URL}/${APP_NAME}/settings/hooks

echo $REPO_URL

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

6. การทำขั้นตอนการเริ่มต้นใช้งานทั้งหมดให้เป็นแบบอัตโนมัติ

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

ในขั้นตอนนี้ คุณจะใช้สคริปต์ที่ให้ไว้เพื่อสร้างแอปพลิเคชันใหม่

สร้างแอปพลิเคชันใหม่

  1. ตรวจสอบว่าคุณอยู่ในไดเรกทอรีที่ถูกต้อง

cd $BASE_DIR

  1. สร้างแอปพลิเคชันใหม่

export APP_NAME=demo-app

./app.sh create ${APP_NAME}

ระบบจะดำเนินการตามขั้นตอนทั้งหมดโดยอัตโนมัติ

ตรวจสอบที่เก็บ GitHub

เมื่อถึงขั้นตอนนี้ คุณจะตรวจสอบที่เก็บใหม่ใน GitHub ได้

  1. ดึงข้อมูล URL ของที่เก็บ GitHub โดยใช้คำสั่งต่อไปนี้

echo ${GIT_BASE_URL}/demo-app

  1. เปิด URL ด้วยเว็บเบราว์เซอร์เพื่อตรวจสอบแอปพลิเคชันใหม่
  2. โปรดดูตัวอย่างที่แทนที่ตัวแปรเทมเพลตด้วยค่าอินสแตนซ์ดังที่แสดงใน URL ด้านล่าง

echo ${GIT_BASE_URL}/demo-app/blob/main/k8s/prod/deployment.yaml#L24

  1. ตรวจสอบเว็บฮุคที่กำหนดค่าไว้ที่ URL ด้านล่าง

echo ${GIT_BASE_URL}/demo-app/settings/hooks

ตรวจสอบทริกเกอร์ CloudBuild

สคริปต์ตั้งค่าทริกเกอร์โดยอัตโนมัติ

  1. ตรวจสอบทริกเกอร์ Cloud Build ในคอนโซลโดยไปที่ลิงก์นี้
  2. ตรวจสอบประวัติการสร้างในหน้านี้