Phát hành bằng Cloud Deploy

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

  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ị 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.
  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 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.

  1. Đặ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

  1. 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

  1. Đặ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)")

  1. 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` 
  1. 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

  1. 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.
  1. 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

  1. 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.

  1. 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

  1. 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.

  1. Á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.

  1. 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.

  1. Chuyển đến <Cloud Deploy> (Triển khai trên đám mây) trong Google Cloud Console
  2. 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.

  1. 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 đó.
  2. 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
  3. 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

  1. 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.
  2. 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!").

  1. 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

  1. Chuyển đến quy trình sample-app trong Google Cloud Console
  2. 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 đó.
  3. 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

  1. 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.
  2. 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!").

  1. 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.

  1. Đẩ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

  1. Chuyển đến quy trình sample-app trong Google Cloud Console
  2. 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.

  1. Nhấp vào nút "Xem xét" ngay bên dưới thông báo màu vàng.
  2. 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
  3. 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.
  4. Nhấp vào nút "Chấp thuận"
  5. 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.

  1. 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

  1. 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.
  2. 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!").

  1. 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.