Giới thiệu ứng dụng

1. Trước khi bắt đầu

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không dùng và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
  • Mã dự án phải là duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Vì vậy, nếu không thích mã này, bạn có thể tạo một mã ngẫu nhiên khác hoặc thử mã của riêng mình để xem mã đó có dùng được hay không. Sau đó, mã này sẽ "đóng băng" sau khi dự án được tạo.
  • Có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, hãy làm theo mọi hướng dẫn "dọn dẹp" ở cuối lớp học lập trình. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.

2. Chuẩn bị không gian làm việc

  1. Mở trình chỉnh sửa Cloud Shell bằng cách truy cập vào URL sau

https://ide.cloud.google.com

  1. Đảm bảo bạn đã đặt tên dự án trong 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. Bật API

gcloud services enable \

cloudbuild.googleapis.com \

secretmanager.googleapis.com

  1. Cấp quyền cho 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. Trong cửa sổ dòng lệnh, hãy sao chép nguồn ứng dụng bằng lệnh sau:

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

  1. Thay đổi thành thư mục và đặt không gian làm việc IDE thành thư mục gốc của kho lưu trữ

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

cd delivery-platform && cloudshell workspace .

3. Sử dụng các mẫu ứng dụng tuỳ chỉnh và được xác định trước

Nhà phát triển có thể chọn trong số các mẫu thường dùng trong tổ chức. Quy trình thiết lập sẽ tạo một nhóm kho lưu trữ mẫu tập trung được lưu trữ trong tài khoản GitHub của bạn. Trong các bước sau, những kho lưu trữ mẫu này sẽ được sao chép và sửa đổi để dùng làm cơ sở cho các ứng dụng mới. Đối với lớp học lập trình này, bạn sẽ gieo hạt cho kho lưu trữ mẫu bằng một cấu trúc mẫu được cung cấp tại đây. Bạn có thể thêm các mẫu của riêng mình bằng cách thêm các thư mục bổ sung theo mẫu.

Ở bước này, bạn sẽ tạo kho lưu trữ của riêng mình để lưu giữ các mẫu ứng dụng, từ các tệp ví dụ được cung cấp. Một tập lệnh trợ giúp được cung cấp để đơn giản hoá các hoạt động tương tác với GitHub.

Đây là các bước thực hiện một lần để điền sẵn thông tin vào kho lưu trữ mẫu. Các bước sau này sẽ sử dụng lại những kho lưu trữ này.

Định cấu hình quyền truy cập vào GitHub

Các bước trong hướng dẫn này gọi API GitHub để tạo và định cấu hình kho lưu trữ. Bạn cần có tên người dùng GitHub và mã truy cập cá nhân tại nhiều thời điểm sau đây. Tập lệnh bên dưới sẽ giúp bạn thu thập các giá trị và lưu trữ chúng dưới dạng biến cục bộ để sử dụng sau này.

source ./onboard-env.sh

echo Git Username: $GIT_USERNAME

echo Git Base URL: $GIT_BASE_URL

Tạo kho lưu trữ mẫu ứng dụng

Các mẫu ứng dụng mẫu được cung cấp cùng với lớp học này làm ví dụ về cách bạn có thể tích hợp các mẫu cơ sở của riêng mình. Trong bước này, bạn sẽ tạo bản sao riêng của các tệp này trong một kho lưu trữ có tên là mcd-app-templates trong tài khoản GitHub của bạn.

  1. Sao chép mẫu vào thư mục làm việc

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

cd $WORK_DIR/app-templates

  1. Tạo một kho lưu trữ từ xa trống trong tài khoản GitHub của bạn

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

  1. Đẩy kho lưu trữ mẫu vào kho lưu trữ từ xa

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. Dọn dẹp thư mục đang làm việc

cd $BASE_DIR

rm -rf $WORK_DIR/app-templates

Tạo kho lưu trữ cấu hình cơ sở dùng chung

Hướng dẫn này sử dụng một công cụ có tên là Kustomize. Công cụ này sử dụng các tệp cấu hình cơ sở do nhiều nhóm chia sẻ, sau đó phủ các cấu hình dành riêng cho ứng dụng lên trên cùng. Nhờ đó, các nhóm nền tảng có thể mở rộng quy mô trên nhiều nhóm và môi trường.

Trong bước này, bạn sẽ tạo kho lưu trữ cấu hình dùng chung có tên là mcd-shared_kustomize từ các mẫu được cung cấp

  1. Sao chép mẫu vào thư mục làm việc

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

cd $WORK_DIR/shared-kustomize

  1. Tạo một kho lưu trữ từ xa trống trong tài khoản GitHub của bạn

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

  1. Đẩy kho lưu trữ mẫu vào kho lưu trữ từ xa

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. Dọn dẹp thư mục đang làm việc

cd $BASE_DIR

rm -rf $WORK_DIR/shared-kustomize

Sau khi tạo kho lưu trữ mẫu, bạn đã sẵn sàng sử dụng các kho lưu trữ đó để tạo một thực thể ứng dụng

4. Tạo một phiên bản mới của ứng dụng

Việc tạo một ứng dụng mới từ mẫu thường yêu cầu bạn thay thế các biến giữ chỗ bằng giá trị thực trên nhiều tệp trong cấu trúc mẫu. Sau khi thay thế xong, một kho lưu trữ mới sẽ được tạo cho phiên bản ứng dụng mới. Đây là kho lưu trữ phiên bản ứng dụng mà nhà phát triển sẽ sao chép và làm việc trong quá trình phát triển hằng ngày.

Trong bước này, bạn sẽ thay thế các giá trị trong một mẫu ứng dụng và đăng các tệp kết quả vào một kho lưu trữ mới.

Xác định tên cho ứng dụng mới

export APP_NAME=my-app

Truy xuất kho lưu trữ mẫu 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

Thay thế giá trị phần giữ chỗ

Một trong những nhu cầu phổ biến nhất khi bắt đầu là thay thế các biến trong mẫu bằng các phiên bản thực tế được dùng trong ứng dụng. Ví dụ: cung cấp tên ứng dụng. Lệnh sau đây sẽ tạo các thực thể của tất cả các tệp .tmpl có giá trị được lưu trữ trong các biến môi trường.

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

Tạo một kho lưu trữ mới và lưu trữ các tệp đã cập nhật

  1. Tạo một kho lưu trữ từ xa trống trong tài khoản GitHub của bạn

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

  1. Đẩy kho lưu trữ mẫu vào kho lưu trữ từ xa

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

Giờ đây, khi phiên bản ứng dụng đã được tạo, đã đến lúc triển khai các bản dựng liên tục.

5. Định cấu hình việc thực thi quy trình tự động

Phần trung tâm của hệ thống Tích hợp liên tục là khả năng thực thi logic của quy trình dựa trên các sự kiện bắt nguồn từ hệ thống kiểm soát nguồn. Khi nhà phát triển cam kết mã trong kho lưu trữ của họ, các sự kiện sẽ được kích hoạt. Bạn có thể định cấu hình các sự kiện này để kích hoạt các quy trình trong những hệ thống khác.

Ở bước này, bạn sẽ định cấu hình GitHub để gọi Google Cloud Build và thực thi quy trình của bạn, bất cứ khi nào người dùng cam kết hoặc gắn thẻ mã trong kho lưu trữ của họ.

Bật tính năng Truy cập an toàn

Bạn sẽ cần 2 thành phần để định cấu hình quyền truy cập an toàn vào quy trình ứng dụng. Khoá API và khoá bí mật dành riêng cho quy trình.

Khoá API

Khoá API được dùng để xác định ứng dụng đang gọi vào một API nhất định. Trong trường hợp này, ứng dụng sẽ là GitHub. Một phương pháp hay nhất không được đề cập ở đây là giới hạn phạm vi của khoá API chỉ cho những API cụ thể mà ứng dụng sẽ truy cập. Bạn đã tạo khoá ở bước trước.

  1. Bạn có thể xem khoá bằng cách nhấp vào đường liên kết này
  2. Bạn có thể đảm bảo giá trị được đặt bằng cách chạy lệnh sau

echo $API_KEY_VALUE

Bí mật của quy trình

Các khoá bí mật này được dùng để uỷ quyền cho một người gọi và đảm bảo rằng họ có quyền đối với công việc mục tiêu cụ thể của bản dựng trên đám mây. Bạn có thể có 2 kho lưu trữ riêng biệt trong GitHub và chỉ nên có quyền truy cập vào các quy trình riêng. Mặc dù API_KEY giới hạn những API mà github có thể sử dụng (trong trường hợp này, API Cloud Build đang được gọi), nhưng bí mật này giới hạn những Job mà ứng dụng có thể thực thi trong API Cloud Build.

  1. Xác định tên, vị trí và giá trị của khoá bí mật

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. Tạo khoá bí mật

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

  1. Cho phép Cloud Build đọc bí mật

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

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

--role='roles/secretmanager.secretAccessor'

Tạo điều kiện kích hoạt Cloud Build

Cloud Build Trigger là cấu hình sẽ thực sự thực thi các quy trình CICD.

Để định cấu hình đúng trình kích hoạt, bạn cần cung cấp một số giá trị chính khi tạo công việc.

  1. Xác định tên của điều kiện kích hoạt và vị trí có thể tìm thấy tệp cấu hình

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

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

  1. Xác định vị trí của kho lưu trữ cấu hình cơ sở dùng chung.

export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize

  1. Một biến đã được thiết lập trong tập lệnh onboard-env.sh để xác định sổ đăng ký vùng chứa của dự án. Xem lại giá trị bằng lệnh bên dưới.

echo $IMAGE_REPO

  1. Tạo Trình kích hoạt Webhook CloudBuild bằng các biến đã tạo trước đó. Vị trí kho lưu trữ ứng dụng được lấy từ nội dung yêu cầu trên GitHub. Giá trị bên dưới tham chiếu đến đường dẫn trong nội dung yêu cầu nơi giá trị đó được đặtgcloud 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. Xem xét trình kích hoạt Cloud Build mới tạo trong Bảng điều khiển bằng cách truy cập vào đường liên kết này
  3. Xác định một biến cho URL của điểm cuối. Biến này sẽ được GitHub dùng ở bước tiếp theo

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

Định cấu hình webhook của GitHub

  1. Định cấu hình webhook trong GitHub

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

  1. Chuyển đến kho lưu trữ ứng dụng và xem xét webhook mới được định cấu hình

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

echo $REPO_URL

Giờ đây, bạn đã thực hiện theo cách thủ công tất cả các bước cần thiết để tạo một ứng dụng mới, đã đến lúc tự động hoá quy trình này trong một tập lệnh.

6. Tự động hoá tất cả các bước tham gia

Trên thực tế, không thể thực hiện từng bước nêu trên cho mọi ứng dụng mới. Thay vào đó, bạn nên kết hợp logic này vào một tập lệnh để dễ dàng thực thi. Các bước nêu trên đã được đưa vào một tập lệnh để bạn sử dụng.

Trong bước này, bạn sẽ sử dụng tập lệnh được cung cấp để tạo một ứng dụng mới

Tạo một ứng dụng mới

  1. Đảm bảo bạn đang ở đúng thư mục

cd $BASE_DIR

  1. Tạo một ứng dụng mới

export APP_NAME=demo-app

./app.sh create ${APP_NAME}

Tất cả các bước đều được thực hiện tự động.

Xem xét kho lưu trữ trên GitHub

Lúc này, bạn sẽ có thể xem kho lưu trữ mới trong GitHub

  1. Truy xuất URL của kho lưu trữ GitHub bằng cách thực thi lệnh sau

echo ${GIT_BASE_URL}/demo-app

  1. Mở URL bằng trình duyệt web để xem xét ứng dụng mới
  2. Lưu ý các ví dụ trong đó các biến mẫu đã được thay thế bằng các giá trị của phiên bản như trong URL bên dưới

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

  1. Xem xét webhook được định cấu hình tại URL bên dưới

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

Xem xét CloudBuild Trigger

Tập lệnh đã tự động thiết lập trình kích hoạt

  1. Xem xét trình kích hoạt Cloud Build trong Bảng điều khiển bằng cách truy cập vào đường liên kết này
  2. Xem nhật ký bản dựng trên trang này