1. Mục tiêu
Trong hướng dẫn này, bạn sẽ tạo 3 cụm GKE có tên là preview, canary và prod. Sau đó, hãy tạo một đích đến Cloud Deploy tương ứng với từng cụm và một quy trình Cloud Deploy sẽ xác định trình tự các bước để thực hiện việc triển khai trong các đích đến đó.
Quy trình triển khai sẽ được kích hoạt bằng một quy trình cloudbuild. Quy trình này sẽ tạo bản phát hành Cloud Deploy và thực hiện việc triển khai trong cụm xem trước. Sau khi xác minh rằng việc triển khai trong bản xem trước đã thành công và hoạt động như mong đợi, bạn sẽ tự động chuyển bản phát hành trong cụm canary. Việc phát hành trong cụm prod sẽ cần được phê duyệt, bạn sẽ phê duyệt quy trình prod trong giao diện người dùng Cloud Deploy và cuối cùng là phát hành.
Mục tiêu của hướng dẫn này có thể được chia thành các bước sau:
- Chuẩn bị không gian làm việc
- Xác định mục tiêu của Cloud Deploy
- Xác định quy trình Cloud Deploy
- Tạo bản phát hành
- Quảng bá đợt triển khai
- Phê duyệt bản phát hành công khai
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 đó, giá trị 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. Thiết lập nền tảng
Chuẩn bị không gian làm việc
Chúng ta sẽ thiết lập môi trường cần thiết để chạy hướng dẫn này. Khi hoàn tất bước này, chúng ta sẽ tạo một cụm GKE để có thể chạy các hoạt động triển khai.
- Đặt chế độ cài đặt mặc định cho cấu hình gcloud
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- Sao chép kho lưu trữ
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- Đặt các biến môi trường
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- Cho phép API
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- Tạo cụm 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
Xác định các đích đến của Cloud Deploy
- Tạo một tệp có tên là preview.yaml trong thư mục triển khai bằng lệnh sau trong 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.
- Tạo một tệp trong thư mục triển khai có tên là canary.yaml bằng lệnh sau trong 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
- Tạo một tệp trong thư mục triển khai có tên là prod.yaml bằng lệnh sau trong 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
Lưu ý rằng thẻ requireApproval được đặt thành true. Việc này sẽ không cho phép quảng bá vào mục tiêu prod cho đến khi được phê duyệt. Bạn cần có vai trò roles/clouddeploy.approver để phê duyệt bản phát hành.
- Tạo Mục tiêu triển khai
`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. Tạo ứng dụng
Trong quá trình tạo một ứng dụng mới, quy trình CICD thường được thiết lập để thực hiện các bản dựng tự động, kiểm thử tích hợp và triển khai. Các bước sau đây được coi là một phần của quy trình thiết lập cho một ứng dụng mới. Mỗi ứng dụng mới sẽ có một quy trình triển khai được định cấu hình.
Xác định quy trình Cloud Deploy
- Tạo một tệp trong thư mục triển khai có tên là pipeline.yaml bằng lệnh sau trong 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.
Thẻ serialPipeline chứa một thẻ có tên là stages. Đây là danh sách tất cả các mục tiêu mà quy trình phân phối này được định cấu hình để triển khai.
targetId xác định mục tiêu cụ thể cần sử dụng cho giai đoạn này của quy trình phân phối. Giá trị này là thuộc tính metadata.name trong định nghĩa mục tiêu.
profiles là danh sách gồm 0 hoặc nhiều tên hồ sơ Skaffold, từ skaffold.yaml. Cloud Deploy sử dụng hồ sơ có kết xuất skaffold khi tạo bản phát hành.
- Áp dụng quy trình
gcloud beta deploy apply --file deploy/pipeline.yaml
4. Giai đoạn phát triển
Khi các ứng dụng được phát triển, các chuỗi công cụ CICD tự động sẽ tạo và lưu trữ thành phần. Các lệnh sau được thực thi để tạo ứng dụng bằng skaffold và lưu trữ các thành phần để triển khai bằng Cloud Deploy. Bước này sẽ được quy trình CICD của bạn thực hiện cho mỗi bản dựng ứng dụng.
- Tạo và lưu trữ ứng dụng bằng skaffold
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. Giai đoạn phát hành
Khi kết thúc quy trình CICD, thường là khi mã được gắn thẻ để phát hành, bạn sẽ bắt đầu quy trình phát hành bằng cách gọi lệnh cloud deploy release. Sau đó, khi quá trình triển khai đã được xác thực và phê duyệt, bạn sẽ di chuyển bản phát hành qua nhiều môi trường mục tiêu bằng cách xúc tiến và phê duyệt hành động thông qua các quy trình tự động hoặc quy trình phê duyệt thủ công.
Tạo bản phát hành
Trước đó, trong hướng dẫn này, chúng ta đã tạo các tệp Cloud Deploy để hiểu cách hoạt động của Cloud Deploy. Để minh hoạ, chúng tôi đã tạo các tệp Cloud Deploy tương tự và đẩy chúng vào một kho lưu trữ github có một ứng dụng mẫu và chúng tôi sẽ sử dụng Cloud Deploy để phát hành ứng dụng đó.
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}"
Xem lại bản phát hành
Khi bạn tạo một bản phát hành Cloud Deploy, bản phát hành đó sẽ tự động được triển khai trong mục tiêu đầu tiên là bản xem trước.
- Chuyển đến <Cloud Deploy> trong bảng điều khiển Google Cloud
- Nhấp vào "sample-app"
Trên màn hình này, bạn sẽ thấy hình ảnh minh hoạ quy trình của mình.
- Xác nhận rằng có một đường viền màu xanh lục ở bên trái hộp xem trước, tức là bản phát hành đã được triển khai cho môi trường đó.
- Bạn có thể xem thêm thông tin chi tiết về bản phát hành bằng cách nhấp vào tên bản phát hành trong phần Chi tiết về bản phát hành ở phần dưới cùng của màn hình
- Xác minh rằng bản phát hành đã triển khai thành công ứng dụng, hãy chạy lệnh sau trong cloushell
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
- Nhấp vào biểu tượng xem trước trên web ở phía trên bên phải màn hình.
- Chọn Xem trước trên cổng 8080
Thao tác này sẽ đưa bạn đến một trang mới có thông báo "Hello World!"
- Sử dụng
ctrl+ctrong thiết bị đầu cuối để kết thúc việc chuyển tiếp cổng.
Quảng bá bản phát hành
Giờ đây, khi bản phát hành của bạn được triển khai đến mục tiêu đầu tiên (bản xem trước) trong quy trình, bạn có thể chuyển bản phát hành đó sang mục tiêu tiếp theo (bản thử nghiệm). Chạy lệnh sau để bắt đầu quy trình.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
Xem xét việc quảng bá bản phát hành
- Chuyển đến pipeline sample-app trong Google Cloud Console
- Xác nhận rằng có một đường viền màu xanh lục ở bên trái hộp Canary. Điều này có nghĩa là bản phát hành đã được triển khai cho môi trường đó.
- Xác minh rằng ứng dụng được triển khai đúng cách bằng cách tạo một đường hầm đến ứng dụng đó
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
- Nhấp vào biểu tượng xem trước trên web ở phía trên bên phải màn hình.
- Chọn Xem trước trên cổng 8080
Thao tác này sẽ đưa bạn đến một trang mới có thông báo "Hello World!"
- Sử dụng
ctrl+ctrong thiết bị đầu cuối để kết thúc việc chuyển tiếp cổng.
Phê duyệt bản phát hành công khai
Hãy nhớ rằng khi tạo mục tiêu prod thông qua prod.yaml, chúng ta đã chỉ định thẻ requireApproval là true. Việc này sẽ bắt buộc phải phê duyệt chương trình khuyến mãi trong sản phẩm.
- Quảng bá bản phát hành thử nghiệm cho bản phát hành công khai bằng lệnh sau
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Chuyển đến pipeline sample-app trong Google Cloud Console
- Bạn sẽ thấy chỉ báo màu vàng cho biết "1 đang chờ xử lý".
Thông báo này cho biết có một bản phát hành đang chờ triển khai cho môi trường phát hành công khai nhưng cần được xem xét và phê duyệt.
- Nhấp vào nút "Xem xét" ngay bên dưới thông báo màu vàng.
- Trong màn hình tiếp theo, hãy nhấp lại vào "Xem xét" để truy cập vào màn hình phê duyệt cho bản phát hành công khai
- Bạn có thể xem Manifest Diff để xem các thay đổi. Trong trường hợp này, đó là một tệp hoàn toàn mới.
- Nhấp vào nút "Chấp thuận"
- Quay lại trang quy trình sample-app, bạn sẽ thấy bản phát hành đang được triển khai cho bản phát hành công khai.
Xem xét bản phát hành công khai
Giống như các môi trường khác, bạn có thể xem xét việc triển khai khi hoàn tất bằng cách làm theo các bước bên dưới.
- Chạy lệnh sau trong Cloud Shell để tạo chuyển tiếp cổng
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
- Nhấp vào biểu tượng xem trước trên web ở phía trên bên phải màn hình.
- Chọn Xem trước trên cổng 8080
Thao tác này sẽ đưa bạn đến một trang mới có thông báo "Hello World!"
- Sử dụng
ctrl+ctrong thiết bị đầu cuối để kết thúc việc chuyển tiếp cổng.