1. Trước khi bắt đầu
Thiết lập môi trường theo tốc độ của riêng bạn
- Đă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.



- 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.
- 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
- 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
- Đả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)')
- Bật API
gcloud services enable \
cloudbuild.googleapis.com \
secretmanager.googleapis.com
- 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}
- 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
- 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.
- 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
- 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
- Đẩ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
- 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
- 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
- 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
- Đẩ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
- 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
- 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}
- Đẩ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.
- Bạn có thể xem khoá bằng cách nhấp vào đường liên kết này
- 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.
- 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))
- Tạo khoá bí mật
printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-
- 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.
- 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
- 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
- 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
- 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 đặt
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}` - 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
- 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
- Định cấu hình webhook trong GitHub
$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL
- 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
- Đảm bảo bạn đang ở đúng thư mục
cd $BASE_DIR
- 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
- 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
- Mở URL bằng trình duyệt web để xem xét ứng dụng mới
- 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
- 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
- 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
- Xem nhật ký bản dựng trên trang này