Phát hành bằng tính năng Triển khai đám mây

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 mục tiêu Triển khai đám mây tương ứng với từng cụm và quy trình Triển khai đám mây. Quy trình này sẽ xác định trình tự các bước triển khai cho các mục tiêu đó.

Quy trình triển khai sẽ được kích hoạt bằng một quy trình Cloudbuild giúp tạo bản phát hành Cloud Deploy và thực hiện hoạt động triển khai trong cụm xem trước. Sau khi xác minh rằng việc triển khai trong bản dùng thử đã thành công và hoạt động như mong đợi, bạn sẽ quảng bá bản phát hành theo cách thủ công trong cụm canary. Việc quảng bá bản phát hành trong cụm sản phẩm sẽ cần phải được phê duyệt. Bạn sẽ phê duyệt quy trình sản xuất trong giao diện người dùng Cloud Deploy và cuối cùng là quảng bá quy trình đó.

Mục tiêu của hướng dẫn này có thể được chia nhỏ thành các bước sau:

  • Chuẩn bị không gian làm việc
  • Xác định mục tiêu Triển khai đám mây
  • Xác định quy trình Triển khai đám mây
  • Tạo bản phát hành
  • Quảng bá quá trình triển khai
  • Phê duyệt bản phát hành công khai

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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ự 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 trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. 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, bạn có thể 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 để xem có mã này chưa. Sau đó, video sẽ được "đóng băng" sau khi tạo dự án.
  • Có giá trị thứ ba là Project Number (Số 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 này.
  1. Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên/API trên Cloud. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này, hãy làm theo mọi thao tác "dọn dẹp" hướng dẫn ở 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 tại đây để chạy hướng dẫn này. Khi bước này hoàn tất, chúng ta sẽ tạo một cụm GKE để chúng tôi có thể chạy các quy trình triển khai.

  1. Đặt chế độ 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 đám mây

  1. Tạo một tệp trong thư mục triển khai có tên là 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 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

  1. 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 ý thẻ requiredApproval được đặt thành true. Nếu bạn chưa phê duyệt, chiến dịch quảng bá kênh sẽ không được phép quảng bá trong mục tiêu sản phẩm cho đến khi nhà quảng cáo đó phê duyệt. Bạn cần có các vai trò/cloudlaunch.approvalr phê duyệt mộ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 ứ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, kiểm tra và triển khai tích hợp tự động. Các bước sau đây được xem 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 định cấu hình một quy trình triển khai.

Xác định quy trình Triển khai đám mây

  1. Tạo một tệp trong thư mục triển khai có tên là Pipel.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à giai đoạn. Thẻ này là danh sách tất 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ị là thuộc tính siêu dữ liệu.name trong định nghĩa mục tiêu.

profiles là danh sách không có hoặc có nhiều tên hồ sơ Skaffold được lấy từ skaffold.yaml. Cloud Triển khai sử dụng cấu hình với 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 ứng dụng được phát triển, chuỗi công cụ CICD tự động sẽ tạo và lưu trữ tài sản. Các lệnh sau được thực thi để xây dựng ứng dụng bằng skaffold và lưu trữ tài sản để triển khai bằng Cloud Deploy. Quy trình CICD sẽ thực hiện bước này đối với mọi bản dựng ứng dụng.

  1. Xây dựng 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

Vào cuối quy trình CICD, thường là khi mã được Gắn thẻ để 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 này, 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 thúc đẩy 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

Trước đó, chúng ta đã tạo các tệp Triển khai đám mây trong hướng dẫn này để hiểu cách hoạt động của tính năng Triển khai đám mây. Để minh hoạ, chúng tôi đã tạo cùng các tệp Cloud Deploy và đẩy chúng vào kho lưu trữ github kèm theo một ứng dụng go mẫu và 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 lại bản phát hành

Khi một bản phát hành Cloud Deploy được tạo, bản phát hành đó sẽ tự động ra mắt ở mục tiêu đầu tiên là bản xem trước.

  1. Truy cập vào <Cloud Deploy> trong bảng điều khiển Google Cloud
  2. Nhấp vào "ứng dụng mẫu"

Trên màn hình này, bạn sẽ thấy một hì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. Tùy ý xem lại thông tin chi tiết bổ sung 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 màn hình
  3. Xác minh rằng bản phát hành đã triển khai ứng dụng thành công, chạy lệnh sau đây

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!"

  1. Sử dụng ctrl+c trong dòng lệnh để kết thúc quá trình chuyển tiếp.

Quảng bá một bản phát hành

Giờ đây, bản phát hành của bạn đã được triển khai cho mục tiêu đầu tiên (bả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 quy 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 quảng bá cho bản phát hành

  1. Chuyển đến quy trình ứng dụng mẫu trong bảng điều khiển Google Cloud
  2. Xác nhận một đường viền màu xanh lục ở bên trái hộp Canary, tức 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 đường hầm tới ứ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!"

  1. Sử dụng ctrl+c trong dòng lệnh để kết thúc quá trình chuyển tiếp.

Phê duyệt một bản phát hành công khai

Hãy nhớ rằng khi tạo mục tiêu sản phẩm thông qua prod.yaml, chúng tôi đã chỉ định thẻ yêu cầu phê duyệt là đúng. Việc này sẽ buộc thực hiện yêu cầu phê duyệt để quảng bá trong môi trường thực tế.

  1. Quảng bá 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 ứng dụng mẫu trong bảng điều khiển Google Cloud
  2. Lưu ý chỉ báo màu vàng có nội dung "1 đang chờ xử lý".

Thông báo này cho biết có một bản phát hành được đưa vào hàng đợi triển khai chính thức nhưng cần được xem xét và phê duyệt.

  1. Nhấp vào "Xem xét" ngay dưới thông báo màu vàng.
  2. Trong màn hình tiếp theo, hãy nhấp vào "Xem lại" để truy cập vào màn hình phê duyệt phát hành công khai
  3. (Không bắt buộc) Xem lại Manifest Diff (Điểm khác biệt) để xem xét các thay đổi. Trong trường hợp này, là một tệp hoàn toàn mới.
  4. Nhấp vào nút "Phê duyệt" nút
  5. Quay lại trang quy trình ứng dụng mẫu để thấy quá trình phát hành phiên bản chính thức.

Xem lại bản phát hành chính thức

Giống như với các môi trường khác, bạn có thể xem lại quá trình triển khai khi hoàn tất bằng các bước dưới đây.

  1. Chạy lệnh sau đây trên Cloudshell để tạo lệnh chuyển tiếp

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!"

  1. Sử dụng ctrl+c trong dòng lệnh để kết thúc quá trình chuyển tiếp.