1. Tổng quan
Trong bài tập thực hành này, bạn sẽ tìm hiểu cách thiết lập một quy trình phân phối liên tục cho GKE bằng Cloud Build. Lớp học này nêu bật cách kích hoạt các công việc Cloud Build cho nhiều sự kiện git, cũng như một mẫu đơn giản cho các bản phát hành thử nghiệm tự động trong GKE.
Bạn sẽ hoàn tất các bước sau:
- Tạo ứng dụng GKE
- Tự động hoá quy trình triển khai cho các nhánh git
- Tự động hoá quy trình triển khai cho nhánh chính của git
- Tự động hoá quy trình triển khai cho thẻ git
2. Trước khi bắt đầu
Để sử dụng hướng dẫn tham khảo này, bạn cần có một dự án trên Google Cloud. Bạn có thể tạo một dự án mới hoặc chọn một dự án mà bạn đã tạo:
- Chọn hoặc tạo một dự án trên Google Cloud.
- Bật tính năng thanh toán cho dự án của bạn.
3. Chuẩn bị môi trường
- Tạo các biến môi trường để sử dụng trong suốt hướng dẫn này:
export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') export ZONE=us-central1-b export CLUSTER=gke-progression-cluster export APP_NAME=myapp - Bật các API sau:
- Trình quản lý tài nguyên
- GKE
- Cloud Source Repositories
- Cloud Build
- Container Registry
gcloud services enable \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ sourcerepo.googleapis.com \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ --async - Sao chép nguồn mẫu và chuyển sang thư mục phòng thí nghiệm:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git gke-progression cd gke-progression/labs/gke-progression rm -rf ../../.git - Thay thế các giá trị giữ chỗ trong kho lưu trữ mẫu bằng
PROJECT_IDcủa bạn:Trong bước này, bạn sẽ tạo các phiên bản của nhiều tệp cấu hình riêng biệt cho môi trường hiện tại.Để xem ví dụ về các mẫu đang được cập nhật, hãy chạy lệnh sau. Thực hiện thay thế biến bằng cách thực thi lệnh sau.cat k8s/deployments/dev/frontend-dev.yaml.tmpl Để xem ví dụ về tệp sau khi thay thế, hãy chạy lệnh sau.for template in $(find . -name '*.tmpl'); do envsubst '${PROJECT_ID} ${ZONE} ${CLUSTER} ${APP_NAME}' < ${template} > ${template%.*}; donecat k8s/deployments/dev/frontend-dev.yaml - Nếu trước đây bạn chưa từng sử dụng Git trong Cloud Shell, hãy đặt các giá trị
user.namevàuser.emailmà bạn muốn sử dụng:git config --global user.email "YOUR_EMAIL_ADDRESS" git config --global user.name "YOUR_USERNAME" - Lưu trữ mã từ kho lưu trữ mẫu trong Cloud Source Repositories:
gcloud source repos create gke-progression git init git config credential.helper gcloud.sh git remote add gcp https://source.developers.google.com/p/$PROJECT_ID/r/gke-progression git branch -m main git add . && git commit -m "initial commit" git push gcp main - Tạo cụm GKE.
gcloud container clusters create ${CLUSTER} \ --project=${PROJECT_ID} \ --zone=${ZONE} - Cấp quyền Cloud Build cho cụm của bạn.Cloud Build sẽ triển khai ứng dụng vào Cụm GKE của bạn và cần có quyền để làm như vậy.
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role=roles/container.developer
Môi trường của bạn đã sẵn sàng!
4. Tạo ứng dụng GKE
Trong phần này, bạn sẽ tạo và triển khai ứng dụng phát hành công khai ban đầu mà bạn sử dụng trong suốt hướng dẫn này.
- Tạo ứng dụng bằng Cloud Build:
gcloud builds submit --tag gcr.io/$PROJECT_ID/$APP_NAME:1.0.0 src/ - Triển khai theo cách thủ công cho môi trường Canary và Production:Tạo các dịch vụ và hoạt động triển khai production và canary bằng cách sử dụng các lệnh
kubectl apply. Dịch vụ được triển khai tại đây sẽ định tuyến lưu lượng truy cập đến cả bản triển khai canary và bản triển khai prod.kubectl create ns production kubectl apply -f k8s/deployments/prod -n production kubectl apply -f k8s/deployments/canary -n production kubectl apply -f k8s/services -n production - Kiểm tra số lượng nhóm đang chạyXác nhận rằng bạn có 4 nhóm đang chạy cho giao diện người dùng, bao gồm 3 nhóm cho lưu lượng truy cập chính thức và 1 nhóm cho bản phát hành thử nghiệm. Điều này có nghĩa là các thay đổi đối với bản phát hành thử nghiệm chỉ ảnh hưởng đến 1 trong 4 (25%) người dùng.
kubectl get pods -n production -l app=$APP_NAME -l role=frontend - Truy xuất địa chỉ IP ngoài cho các dịch vụ sản xuất.
Sau khi bộ cân bằng tải trả về địa chỉ IP, hãy tiếp tục chuyển sang bước tiếp theokubectl get service $APP_NAME -n production - Lưu trữ IP ngoài để sử dụng sau này.
export PRODUCTION_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services $APP_NAME) - Xem xét ứng dụng Kiểm tra đầu ra phiên bản của dịch vụ. Nội dung sẽ là Hello World phiên bản 1.0
curl http://$PRODUCTION_IP
Xin chúc mừng! Bạn đã triển khai ứng dụng mẫu! Tiếp theo, bạn sẽ thiết lập các điều kiện kích hoạt để liên tục triển khai các thay đổi.
5. Tự động hoá quy trình triển khai cho các nhánh git
Trong phần này, bạn sẽ thiết lập một điều kiện kích hoạt để thực thi một công việc Cloud Build khi bạn xác nhận mọi nhánh khác ngoài main. Tệp Cloud Build được dùng ở đây sẽ tự động tạo một không gian tên và triển khai cho mọi nhánh hiện có hoặc nhánh mới, cho phép nhà phát triển xem trước mã của họ trước khi tích hợp với nhánh chính.
- Thiết lập điều kiện kích hoạt:Thành phần chính của điều kiện kích hoạt này là việc sử dụng tham số
branchNameđể so khớpmainvà tham sốinvertRegexđược đặt thành true và thay đổi mẫubranchNameđể so khớp với mọi thứ không phải làmain. Để tham khảo, bạn có thể tìm thấy các dòng sau trongbuild/branch-trigger.json. Ngoài ra, một vài dòng cuối cùng của tệp Cloud Build được dùng với trình kích hoạt này sẽ tạo một không gian tên được đặt theo tên của nhánh đã kích hoạt công việc, sau đó triển khai ứng dụng và dịch vụ trong không gian tên mới. Để tham khảo, bạn có thể tìm thấy các dòng sau trong"branchName": "main", "invertRegex": true
build/branch-cloudbuild.yaml Giờ đây, khi đã hiểu rõ các cơ chế đang được sử dụng, hãy tạo trình kích hoạt bằng lệnh gcloud bên dưới.kubectl get ns ${BRANCH_NAME} || kubectl create ns ${BRANCH_NAME} kubectl apply --namespace ${BRANCH_NAME} --recursive -f k8s/deployments/dev kubectl apply --namespace ${BRANCH_NAME} --recursive -f k8s/servicesgcloud beta builds triggers create cloud-source-repositories \ --trigger-config build/branch-trigger.json - Để xem xét điều kiện kích hoạt, hãy chuyển đến trang Điều kiện kích hoạt Cloud Build trong Bảng điều khiển.Chuyển đến Điều kiện kích hoạt
- Tạo một nhánh mới:
git checkout -b new-feature-1 - Sửa đổi mã để cho biết v1.1Edit
src/app.pyvà thay đổi phản hồi từ 1.0 thành 1.1@app.route('/') def hello_world(): return 'Hello World v1.1' - Xác nhận thay đổi và chuyển đến kho lưu trữ từ xa:
git add . && git commit -m "updated" && git push gcp new-feature-1 - Để xem xét bản dựng đang tiến hành, hãy chuyển đến trang Nhật ký Cloud Build trong Bảng điều khiển.Chuyển đến phần Bản dựngSau khi bản dựng hoàn tất, hãy tiếp tục bước tiếp theo
- Truy xuất địa chỉ IP ngoài cho dịch vụ nhánh mới triển khai.
Sau khi bộ cân bằng tải trả về địa chỉ IP, hãy tiếp tục chuyển sang bước tiếp theokubectl get service $APP_NAME -n new-feature-1 - Lưu trữ IP ngoài để sử dụng sau này.
export BRANCH_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=new-feature-1 services $APP_NAME) - Xem lại ứng dụng. Kiểm tra đầu ra phiên bản của dịch vụ. Nội dung sẽ là Hello World phiên bản 1.0
curl http://$BRANCH_IP
6. Tự động hoá quy trình triển khai cho nhánh chính của git
Trước khi phát hành mã cho bản phát hành công khai, bạn nên phát hành mã cho một nhóm nhỏ lưu lượng truy cập thực trước khi di chuyển tất cả lưu lượng truy cập sang cơ sở mã mới.
Trong phần này, bạn sẽ triển khai một trình kích hoạt được kích hoạt khi mã được xác nhận vào nhánh chính. Trình kích hoạt triển khai quy trình triển khai thử nghiệm nhận 25% tổng lưu lượng truy cập trực tiếp đến bản sửa đổi mới.
- Thiết lập điều kiện kích hoạt cho nhánh chính:
gcloud beta builds triggers create cloud-source-repositories \ --trigger-config build/main-trigger.json - Để xem xét trình kích hoạt mới, hãy chuyển đến trang Trình kích hoạt Cloud Build trong Bảng điều khiển.Chuyển đến Trình kích hoạt
- Hợp nhất nhánh vào dòng chính và đẩy vào kho lưu trữ từ xa:
git checkout main git merge new-feature-1 git push gcp main - Để xem xét bản dựng đang diễn ra, hãy chuyển đến trang Nhật ký Cloud Build trong Bảng điều khiển.Chuyển đến phần Bản dựngSau khi bản dựng hoàn tất, hãy tiếp tục bước tiếp theo
- Xem nhiều phản hồi từ máy chủ Chạy lệnh sau và lưu ý rằng khoảng 25% phản hồi đang hiển thị phản hồi mới của Hello World phiên bản 1.1
Khi bạn đã sẵn sàng tiếp tục, hãy nhấnwhile true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1; doneCtrl+cđể thoát khỏi vòng lặp.
7. Tự động hoá quy trình triển khai cho thẻ git
Sau khi xác thực việc triển khai thử nghiệm với một lượng nhỏ lưu lượng truy cập, bạn sẽ phát hành bản triển khai cho phần còn lại của lưu lượng truy cập thực.
Trong phần này, bạn sẽ thiết lập một điều kiện kích hoạt được kích hoạt khi bạn tạo một thẻ trong kho lưu trữ. Trình kích hoạt gắn nhãn hình ảnh bằng thẻ thích hợp, sau đó triển khai các bản cập nhật cho prod để đảm bảo 100% lưu lượng truy cập đang truy cập vào hình ảnh được gắn thẻ.
- Thiết lập trình kích hoạt thẻ:
gcloud beta builds triggers create cloud-source-repositories \ --trigger-config build/tag-trigger.json - Để xem xét trình kích hoạt mới, hãy chuyển đến trang Trình kích hoạt Cloud Build trong Bảng điều khiển.Chuyển đến Trình kích hoạt
- Tạo thẻ mới và đẩy đến kho lưu trữ từ xa:
git tag 1.1 git push gcp 1.1 - Để xem bản dựng đang tiến hành, hãy chuyển đến trang Cloud Build History (Nhật ký Cloud Build) trong Bảng điều khiển.Chuyển đến phần Builds (Bản dựng)
- Xem xét nhiều phản hồi từ máy chủ Chạy lệnh sau và lưu ý rằng 100% phản hồi đang hiển thị phản hồi mới của Hello World phiên bản 1.1 Quá trình này có thể mất một chút thời gian vì các nhóm mới được triển khai và kiểm tra tình trạng trong GKE
Khi bạn đã sẵn sàng tiếp tục, hãy nhấnwhile true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1; doneCtrl+cđể thoát khỏi vòng lặp.Xin chúc mừng! Bạn đã tạo các trình kích hoạt CI/CD trong Cloud Build cho các nhánh và thẻ để triển khai ứng dụng của mình lên GKE.
8. Dọn dẹp
Xoá dự án
- Trong Cloud Console, hãy chuyển đến trang Quản lý tài nguyên.
- Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá, rồi nhấp vào Xoá.
- Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.