1. Mục tiêu
Trong hướng dẫn này, bạn sẽ tạo ba cụm GKE có tên là preview, canary và prod. Sau đó, hãy tạo một mục tiêu Cloud Deploy tương ứng với mỗi cụm và một quy trình Cloud Deploy sẽ xác định trình tự các bước để triển khai trong các mục tiêu đó.
Quy trình triển khai sẽ được kích hoạt bằng quy trình xây dựng trên đám mây. Quy trình này sẽ tạo bản phát hành Cloud Deploy và triển khai trong cụm xem trước. Sau khi xác minh rằng quá trình triển khai bản xem trước đã thành công và hoạt động như mong đợi, bạn sẽ tự quảng bá bản phát hành trong cụm canary. Bạn cần phê duyệt để quảng bá bản phát hành trong cụm sản phẩm. Bạn sẽ phê duyệt quy trình sản phẩm trong giao diện người dùng Cloud Deploy và cuối cùng là quảng bá bản 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 chính thức
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ị cho người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử 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 Google Cloud và không thể thay đổi được (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 (và mã này thường được xác định là
PROJECT_ID
). Vì vậy, nếu không thích mã này, hãy tạo một mã ngẫu nhiên khác hoặc bạn có thể thử mã của riêng mình và xem mã đó có được chấp nhận hay không. Sau đó, tệp này sẽ "đóng băng" sau khi dự án được tạo. - Có một giá trị thứ ba là Mã dự án mà một số API sử dụng. Tìm hiểu thêm về cả ba 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 tham gia lớp học lập trình này sẽ không tốn kém nhiều chi phí, nếu có. Để tắt các tài nguyên để không bị tính phí sau khi kết thúc hướng dẫn này, hãy làm theo 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í 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ẽ có một cụm GKE được tạo để có thể chạy các lượt triển khai.
- Đặt các tuỳ chọn 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 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 mục tiêu triển khai trên đám mây
- Tạo một tệp trong thư mục triển khai có tên preview.yaml 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 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 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 ý thẻ requireApproval được đặt thành true. Điều này sẽ không cho phép quảng bá vào mục tiêu sản xuất 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 ứ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 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 (giai đoạn). Đâ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ể để 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 có từ 0 đến 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, chuỗi công cụ CICD tự động sẽ tạo và lưu trữ các thành phần. Các lệnh sau đây đượ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. Quy trình CICD sẽ thực hiện bước này 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ẻ cho bản phát hành chính thức, 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 quảng bá và phê duyệt hành động thông qua các quy trình tự động hoặc phê duyệt thủ công.
Tạo bản phát hành
Chúng ta đã tạo các tệp Cloud Deploy trong phần trước của hướng dẫn này để hiểu cách hoạt động của Cloud Deploy. Để minh hoạ, chúng ta đã tạo các tệp Cloud Deploy giống nhau và đẩy các tệp đó vào kho lưu trữ github bằng một ứng dụng go mẫu. Chúng ta 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 xét bản phát hành
Khi bạn tạo một bản phát hành trên 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> (Triển khai trên đám mây) trong Google Cloud Console
- 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 đườ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 Thông tin 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 hiển thị thông báo "Hello World!" ("Xin chào thế giới!").
- Sử dụng
ctrl+c
trong thiết bị đầu cuối để kết thúc tính năng 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 triển khai cho mục tiêu đầu tiên (xem trước) trong quy trình, bạn có thể quảng bá bản phát hành đó cho mục tiêu tiếp theo (canary). Chạy lệnh sau để bắt đầu quá trình.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
Xem lại chương trình khuyến mãi cho bản phát hành
- Chuyển đến quy trình sample-app trong Google Cloud Console
- Xác nhận đường viền màu xanh lục ở bên trái hộp Canary, 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 hiển thị thông báo "Hello World!" ("Xin chào thế giới!").
- Sử dụng
ctrl+c
trong thiết bị đầu cuối để kết thúc tính năng 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 sản xuất thông qua prod.yaml, chúng ta đã chỉ định thẻ requireApproval là true. Điều này sẽ buộc phải có yêu cầu phê duyệt để quảng bá trong sản phẩm.
- Đẩy bản phát hành canary lên phiên bản chính thức bằng lệnh sau
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Chuyển đến quy trình sample-app trong Google Cloud Console
- Hãy chú ý đến 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 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.
- Trên màn hình tiếp theo, hãy nhấp lại vào "Xem xét" để chuyển đến màn hình phê duyệt cho bản phát hành công khai
- Bạn có thể xem lại tệp Manifest Diff để xem các thay đổi. Trong trường hợp này, 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 phát hành.
Xem xét bản phát hành chính thức
Cũng như các môi trường khác, bạn có thể xem lại quá trình triển khai khi quá trình này 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 cloudshell để tạo tính năng 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 hiển thị thông báo "Hello World!" ("Xin chào thế giới!").
- Sử dụng
ctrl+c
trong thiết bị đầu cuối để kết thúc tính năng chuyển tiếp cổng.