Giới thiệu ứng dụng

1. Trước khi bắt đầu

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 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 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 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 đó, dự án sẽ "bị đóng băng" sau khi 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 nhằm không phải chịu khoản thanh toán ngoài 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 này. 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. Chuẩn bị không gian làm việc

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

  1. Đả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)')

  1. Bật API

gcloud services enable \

cloudbuild.googleapis.com \

secretmanager.googleapis.com

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

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

  1. Thay đổi vào thư mục này 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 mẫu ứng dụng tuỳ chỉnh và được xác định trước

Nhà phát triển phải có thể chọn trong số các mẫu thường dùng trong tổ chức. Quy trình làm quen sẽ tạo một tập hợp các 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, các 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. Trong lớp học lập trình này, bạn sẽ tạo kho lưu trữ mẫu bằng 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 được mô hình hoá theo mẫu.

Trong bước này, bạn sẽ tạo kho lưu trữ của riêng mình để lưu trữ các mẫu ứng dụng, từ các tệp mẫu đượ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 một lần dùng để điền kho lưu trữ mẫu của bạn. Các bước sau này sẽ sử dụng lại các 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 GitHub API để 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ã thông báo truy cập cá nhân tại nhiều thời điểm sau. Tập lệnh dưới đây sẽ giúp bạn lấy 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 để minh hoạ cách bạn có thể tích hợp các mẫu cơ sở của riêng mình. Ở bước này, bạn tạo bản sao của riêng 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.

  1. Sao chép mẫu vào thư mục đang hoạt động

cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR

cd $WORK_DIR/app-templates

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

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

  1. Dọn dẹp thư mục đang hoạt động

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. Điều này cho phép các nhóm phụ trách nền tảng mở rộng quy mô trên nhiều nhóm và môi trường.

Ở bước này, bạn 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

  1. Sao chép mẫu vào thư mục đang hoạt động

cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR

cd $WORK_DIR/shared-kustomize

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

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

  1. Dọn dẹp thư mục đang hoạt động

cd $BASE_DIR

rm -rf $WORK_DIR/shared-kustomize

Sau khi tạo kho lưu trữ mẫu, bạn có thể sử dụng các kho lưu trữ đó để tạo một thực thể ứng dụng

4. Tạo một thực thể mới của ứng dụng

Việc tạo một ứng dụng mới từ một mẫu thường yêu cầu các biến phần giữ chỗ được hoán đổi với các giá trị thực trên nhiều tệp trong cấu trúc mẫu. Sau khi quá trình thay thế hoàn tất, một kho lưu trữ mới sẽ được tạo cho thực thể ứng dụng mới. Đây là kho lưu trữ thực thể ứ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ẫu ứng dụng và đăng các tệp thu được 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 làm quen với ứng dụng là hoán đổi các biến trong mẫu cho các thực thể thực tế được dùng trong ứng dụng. Ví dụ: cung cấp tên ứng dụng. Lệnh sau đây tạo các thực thể của tất cả tệp .tmpl có các giá trị được lưu trữ trong 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

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

  1. Đẩ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 thực thể ứ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 quá trình 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 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ác sự kiện sẽ được kích hoạt và có thể được định cấu hình để kích hoạt các quy trình trong các 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 mình, 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 bảo mật

Bạn sẽ cần 2 phần tử để định cấu hình quyền truy cập an toàn vào quy trình xử lý ứ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 khách đ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à chỉ khoá phạm vi của khoá API cho các API cụ thể mà ứng dụng sẽ truy cập. Bạn đã tạo khoá ở bước trước.

  1. Bạn có thể xem khoá bằng cách nhấp vào đường liên kết này
  2. Bạn có thể đảm bảo giá trị được đặt bằng cách chạy lệnh sau

echo $API_KEY_VALUE

Khoá bí mật của quy trình

Các bí mật được dùng để uỷ quyền cho một phương thức gọi và đảm bảo người đó có quyền đối với công việc mục tiêu của bản dựng trên đám mây cụ thể. Bạn có thể có 2 kho lưu trữ khác nhau trong GitHub và mỗi kho lưu trữ chỉ có quyền truy cập vào quy trình của riêng kho lưu trữ đó. 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 là API Cloud Build đang được gọi), nhưng mã bí mật giới hạn ứng dụng khách có thể thực thi Tác vụ trong API Bản dựng đám mây nào.

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

  1. Tạo khoá bí mật

printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-

  1. Cho phép Cloud Build đọc mã 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

Trình kích hoạt Cloud Build là cấu hình thực sự sẽ thực thi các quy trình CICD.

Công việc này yêu cầu bạn cung cấp một số giá trị chính khi tạo để định cấu hình đúng cách điều kiện kích hoạt.

  1. Xác định tên của điều kiện kích hoạt và nơi 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

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

  1. Một biến đã được đặt 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

  1. Tạo Trình kích hoạt Webhook CloudBuild bằng các biến được tạo trước đó. Vị trí kho lưu trữ ứng dụng được lấy từ nội dung yêu cầu từ GitHub. Giá trị bên dưới tham chiếu đến đường dẫn trong phần nội dung yêu cầu nơi giá trị đó nằmgcloud 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}`
    
  2. Xem lại điều kiện kích hoạt Cloud Build mới tạo trong Console bằng cách truy cập vào đường liên kết này
  3. Xác định một biến cho URL điểm cuối. Biến này sẽ được GitHub sử dụng trong 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 GitHub

  1. Định cấu hình webhook trong GitHub

$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL

  1. 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 tất cả các bước cần thiết để tạo một ứng dụng mới theo cách thủ công, đã đến lúc tự động hoá ứng dụng đó trong một tập lệnh.

6. Tự động hoá tất cả các bước tham gia

Trong thực tế, không thể thực thi từng bước trên cho mọi ứng dụng mới. Thay vào đó, bạn nên đưa logic vào một tập lệnh để dễ dàng thực thi. Các bước 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ẽ dùng tập lệnh được cung cấp để tạo một đơn đăng ký mới

Tạo ứng dụng mới

  1. Đảm bảo bạn đang ở đúng thư mục

cd $BASE_DIR

  1. Tạo ứ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 thi tự động.

Xem lại kho lưu trữ GitHub

Đến đây, bạn có thể xem kho lưu trữ mới trên GitHub

  1. Truy xuất URL kho lưu trữ GitHub bằng cách thực thi lệnh sau

echo ${GIT_BASE_URL}/demo-app

  1. Mở URL bằng trình duyệt web để xem xét ứng dụng mới
  2. Lưu ý các ví dụ trong đó các biến mẫu đã được thay thế bằng giá trị thực thể như trong URL bên dưới

echo ${GIT_BASE_URL}/demo-app/blob/main/k8s/prod/deployment.yaml#L24

  1. Xem lại 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 điều kiện kích hoạt CloudBuild

Tập lệnh đã tự động thiết lập điều kiện kích hoạt

  1. Xem lại điều kiện kích hoạt Cloud Build trong Console bằng cách truy cập vào đường liên kết này
  2. Xem lại nhật ký bản dựng trên trang này