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

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

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

  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 ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

2. การเตรียม Workspace

  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. ให้สิทธิ์แก่ Cloud Deploy

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) แต่ Secret จะจำกัดงานใน 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 ซึ่งกำหนดรีจิสทรีคอนเทนเนอร์ของโปรเจ็กต์ ตรวจสอบค่าด้วยคำสั่งด้านล่าง

echo $IMAGE_REPO

  1. สร้างทริกเกอร์ Webhook ของ Cloud Build โดยใช้ตัวแปรที่สร้างไว้ก่อนหน้านี้ ระบบจะดึงตำแหน่งที่เก็บแอปพลิเคชันจากเนื้อหาของคำขอจาก 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. ไปที่ที่เก็บแอปพลิเคชันและตรวจสอบเว็บบุ๊กที่กำหนดค่าใหม่

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

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

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

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