Kiến thức cơ bản về bộ công cụ Cloud Foundation

1. Giới thiệu về CFT 101

b1d2ab0f35bb62a8.png

Lần cập nhật gần đây nhất: ngày 11 tháng 02 năm 2022

Bộ công cụ Cloud Foundation là gì?

Về cơ bản, CFT cung cấp các mẫu phương pháp hay nhất để nhanh chóng bắt đầu sử dụng Google Cloud Platform. Trong hướng dẫn này, bạn sẽ tìm hiểu cách đóng góp cho Cloud Foundation Toolkit.

Bạn cần có

  • Tài khoản GitHub.
  • Docker được cài đặt trên máy của bạn hoặc dùng Cloud Shell ( Mac install, Windows installl)
  • Trình soạn thảo mã để chỉnh sửa mã (Ví dụ: Visual Studio Code)
  • Hiểu biết cơ bản về Git và GitHub
  • Có kinh nghiệm sử dụng Terraform và cơ sở hạ tầng dưới dạng mã nguồn
  • Quyền cấp vai trò Người tạo dự án cho Tài khoản dịch vụ
  • Một tổ chức trên Google Cloud, một thư mục thử nghiệm và một tài khoản thanh toán

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách đóng góp cho Bộ công cụ nền tảng đám mây (CFT).

Bạn sẽ:

  • Thiết lập môi trường nhà phát triển để đóng góp cho CFT
  • Thêm một tính năng vào mô-đun CFT
  • Thêm thử nghiệm cho tính năng đã thêm
  • Thực thi thử nghiệm tích hợp trong CFT
  • Thực thi kiểm thử tìm lỗi mã nguồn
  • Xác nhận mã với GitHub và gửi một Yêu cầu kéo (PR)

Bạn sẽ thực hiện tất cả các bước trên bằng cách thêm một tính năng mới vào mô-đun CFT của Google Cloud Storage. Bạn sẽ thêm một nhãn có tên là "silly_label". Nhãn này sẽ được tự động thêm vào tất cả các bộ chứa được tạo thông qua mô-đun CFT của GCS. Bạn cũng sẽ được viết bài kiểm thử để xác thực tính năng và đảm bảo tích hợp toàn diện.

2. Thiết lập môi trường phát triển

Nếu muốn, bạn có thể sử dụng Cloud Shell cho mục đích phát triển của mình. Nếu không muốn sử dụng Cloud Shell để đóng góp cho CFT, bạn có thể thiết lập môi trường phát triển trên máy của mình.

Thiết lập Git

GitHub dựa trên hệ thống quản lý phiên bản nguồn mở (VCS) có tên là Git. Git chịu trách nhiệm về mọi thứ liên quan đến GitHub diễn ra cục bộ trên máy hoặc Cloud Shell của bạn.

  1. Khi sử dụng Cloud Shell, bạn không cần cài đặt git vì nó được cài đặt sẵn.
$ git --version
# This will display the git version on the Cloud Shell.

Nếu bạn đang thiết lập môi trường nhà phát triển trên máy của mình, bạn cần cài đặt Git.

Đặt tên người dùng và email của bạn trong Git

Git sử dụng tên người dùng để liên kết các cam kết với một danh tính. Tên người dùng Git không giống với tên người dùng GitHub của bạn.

Bạn có thể thay đổi tên được liên kết với các cam kết Git của mình bằng cách sử dụng lệnh git config. Việc thay đổi tên liên kết với các cam kết Git của bạn bằng git config sẽ chỉ ảnh hưởng đến các cam kết trong tương lai và sẽ không thay đổi tên dùng cho các cam kết trước đó.

Bạn đã thiết lập Git thành công và bạn có thể phát triển nhánh, tạo và sao chép các nhánh. Chúng ta sẽ sử dụng Git một cách rộng rãi trong Lớp học lập trình này.

3. Kho lưu trữ GCS của Fork CFT

Phân nhánh kho lưu trữ CFT

Bạn thiết lập Git trên máy cục bộ hoặc Cloud Shell ở bước trước. Bây giờ, bạn cần chia tách kho lưu trữ CFT của Google Cloud Storage để bắt đầu đóng góp.

Nĩa là một bản sao của kho lưu trữ. Việc phân nhánh kho lưu trữ cho phép bạn thoải mái thử nghiệm các thay đổi mà không ảnh hưởng đến dự án gốc.

Thông thường, nhánh phát triển được dùng để đề xuất thay đổi đối với dự án của người khác hoặc sử dụng dự án của người khác làm điểm khởi đầu cho ý tưởng của riêng bạn.

Ví dụ: bạn có thể sử dụng nhánh phát triển để đề xuất thay đổi liên quan đến việc sửa lỗi. Để sửa lỗi, bạn có thể:

  • Phát triển nhánh kho lưu trữ.
  • Khắc phục vấn đề.
  • Gửi yêu cầu lấy dữ liệu (pull request) cho chủ sở hữu dự án.

Các bước để phân nhánh một kho lưu trữ CFT:

  1. Mở trình duyệt web rồi chuyển đến kho lưu trữ terraform-google-modules/terraform-google-cloud-storage. Chúng ta sẽ sử dụng kho lưu trữ này cho toàn bộ Lớp học lập trình.
  2. Ở góc trên cùng bên phải trang, hãy nhấp vào Nĩa.

9dc18f15ca662b56.pngS

  1. Bạn sẽ thấy tuỳ chọn nơi bạn muốn dùng nhánh phát triển, chọn hồ sơ của mình và kho lưu trữ sẽ được phát triển nhánh.

Nhân bản nhánh phát triển trên thiết bị

Đĩa mà bạn đã tạo là một bản sao của kho lưu trữ mô-đun GCS. Bây giờ, bạn sẽ sao chép kho lưu trữ này vào môi trường cục bộ để thêm tính năng mới.

Các bước sao chép nhánh phát triển:

  1. Mở trình duyệt web và chuyển đến ngã ba của bạn trên terraform-google-modules/terraform-google-cloud-storage.
  2. Ở góc trên cùng bên phải, bạn sẽ thấy mã "Mã" nhấp vào nút.

98f8be8df319dcd8.pngS

  1. Sau khi bạn nhấp vào "Mã" hãy nhấp vào nút "Sao chép" để sao chép URL của ngã ba. Bạn sẽ dùng URL này để sao chép nhánh phát triển của mình sang môi trường địa phương.

e61e1da6371f2a1d.png

  1. Chuyển đến một thiết bị đầu cuối trong VSCode hoặc máy của bạn rồi sao chép ngã ba.
$ git clone <url>
# This command will clone your fork locally.
# Paste the copied URL from the previous step.
  1. Bây giờ, sau khi đã sao chép nhánh phát triển cục bộ, bạn nên truy cập vào kho lưu trữ của mình, tạo một nhánh mới ngoài nhánh phát triển đó và thay đổi mã cho nhánh tạm thời.

Theo quy ước, bạn có thể đặt tên cho nhánh của mình như sau:

  • Đối với các yêu cầu về tính năng: feature/feature-name
  • Để cập nhật nội bộ, hãy internal/change-name
  • Để sửa lỗi: bugfix/issue-name

Vì bạn đang thêm một tính năng mới, nên bạn có thể gọi nhánh tạm thời feature/silly_label

$ cd terraform-google-cloud-storage
# This command takes you into the cloned directory on your local machine.

$ git branch
# This command tells your current branch
# When you run this for the first time after you have cloned, your 
# output should say "master", that is your fork.

$ git checkout -b feature/silly_label
# This command creates a new branch on your fork and switches your 
# branch to the newly created branch.

$ git branch
# This command will confirm your current branch to be "feature/silly_label"

Giờ đây, bạn đã thiết lập xong để bắt đầu làm việc trên Bộ công cụ nền tảng đám mây!

4. Tạo môi trường kiểm thử

Quy trình phát triển CFT tiêu chuẩn dựa trên việc sử dụng một dự án thử nghiệm tách biệt để kiểm thử. Bước này sẽ hướng dẫn bạn tạo dự án thử nghiệm (dựa trên cấu hình chuẩn) thông qua tài khoản dịch vụ.

0. Cài đặt Docker Engine

Nếu đang sử dụng máy cho mục đích phát triển, bạn cần cài đặt Docker Engine.

1. Cài đặt Google Cloud SDK

Bạn không cần cài đặt Google Cloud SDK nếu đang sử dụng GCP Cloud Shell.

Truy cập vào Google Cloud SDK và tải trình cài đặt tương tác xuống cho nền tảng của bạn.

2. Đặt cấu hình

Để tạo một môi trường thử nghiệm, bạn cần có một Tổ chức trên Google Cloud, một thư mục thử nghiệm và một tài khoản thanh toán. Bạn cần đặt các giá trị này thông qua các biến môi trường:

export TF_VAR_org_id="your_org_id"
export TF_VAR_folder_id="your_folder_id"
export TF_VAR_billing_account="your_billing_account_id"

3. Thiết lập Tài khoản dịch vụ

Trước khi tạo môi trường thử nghiệm, bạn cần tải khoá tài khoản dịch vụ xuống môi trường thử nghiệm. Tài khoản dịch vụ này sẽ cần có các vai trò Người tạo dự án, Người dùng tài khoản thanh toánNgười xem tổ chức. Những bước này giúp bạn tạo một tài khoản dịch vụ mới, nhưng bạn cũng có thể sử dụng lại tài khoản hiện có.

3.1 Tạo hoặc chọn dự án GCP gốc

Trước khi tạo tài khoản dịch vụ, bạn cần chọn một dự án để lưu trữ tài khoản đó. Bạn cũng có thể tạo một dự án mới.

gcloud config set core/project YOUR_PROJECT_ID

3.2 Bật API Google Cloud

Bật các API Google Cloud sau đây trong dự án gốc của bạn:

gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable iam.googleapis.com
gcloud services enable cloudbilling.googleapis.com

3.3 Tạo tài khoản dịch vụ

Tạo một tài khoản dịch vụ mới để quản lý môi trường thử nghiệm:

# Creating a service account for CFT.
gcloud iam service-accounts create cft-onboarding \
  --description="CFT Onboarding Terraform Service Account" \
  --display-name="CFT Onboarding"

# Assign SERVICE_ACCOUNT environment variable for later steps
export SERVICE_ACCOUNT=cft-onboarding@$(gcloud config get-value core/project).iam.gserviceaccount.com

Xác minh tài khoản dịch vụ của bạn đã được tạo:

gcloud iam service-accounts list --filter="EMAIL=${SERVICE_ACCOUNT}"

3.4 Cấp vai trò Người tạo dự án, Người dùng tài khoản thanh toán và Người xem của tổ chức cho Tài khoản dịch vụ:

gcloud resource-manager folders add-iam-policy-binding ${TF_VAR_folder_id} \
  --member="serviceAccount:${SERVICE_ACCOUNT}" \
  --role="roles/resourcemanager.projectCreator"
gcloud organizations add-iam-policy-binding ${TF_VAR_org_id} \
  --member="serviceAccount:${SERVICE_ACCOUNT}" \
  --role="roles/billing.user"
gcloud beta billing accounts add-iam-policy-binding ${TF_VAR_billing_account} \
  --member="serviceAccount:${SERVICE_ACCOUNT}" \
  --role="roles/billing.user"
gcloud organizations add-iam-policy-binding ${TF_VAR_org_id} \
  --member="serviceAccount:${SERVICE_ACCOUNT}" \
  --role="roles/resourcemanager.organizationViewer"

Bây giờ, bạn đã có Tài khoản dịch vụ có thể dùng để quản lý môi trường thử nghiệm.

4. Chuẩn bị thông tin xác thực Terraform

Để tạo môi trường kiểm thử, bạn cần tải khoá tài khoản dịch vụ xuống shell.

4.1 Khoá tài khoản dịch vụ

Tạo và tải khoá tài khoản dịch vụ xuống Terraform

gcloud iam service-accounts keys create cft.json --iam-account=${SERVICE_ACCOUNT}

4.2 Thiết lập thông tin đăng nhập Terraform

Cung cấp khoá cho Terraform bằng biến môi trường SERVICE_ACCOUNT_JSON, đặt giá trị thành nội dung của khoá tài khoản dịch vụ.

export SERVICE_ACCOUNT_JSON=$(< cft.json)

Sau khi lưu trữ thông tin xác thực trong biến môi trường, hãy xoá tệp khoá. Bạn có thể tạo lại khoá vào lúc khác (nếu cần) bằng cách dùng chính lệnh trên.

rm -rf cft.json

5. Tạo dự án thử nghiệm để triển khai Terraform

Giờ thì mọi thứ đã sẵn sàng, bạn có thể tạo dự án kiểm thử bằng một lệnh duy nhất. Chạy lệnh này từ gốc của thư mục terraform-google-cloud-storage:

make docker_test_prepare

Bạn sẽ thấy kết quả bên dưới khi chạy make docker_test_prepare. Cuối cùng , bạn sẽ nhận được project_id kiểm thử đã được tạo để triển khai và kiểm thử mô-đun Cloud Storage bằng tính năng mới. Nếu bạn gặp vấn đề khi liên kết tài khoản thanh toán, hãy tham khảo các bước khắc phục sự cố.

macbookpro3:terraform-google-cloud-storage user$ make docker_test_prepare
docker run --rm -it \
                -e SERVICE_ACCOUNT_JSON \
                -e TF_VAR_org_id \
                -e TF_VAR_folder_id \
                -e TF_VAR_billing_account \
                -v /Users/cft/terraform-google-cloud-storage:/workspace \
                gcr.io/cloud-foundation-cicd/cft/developer-tools:0.8.0 \
                /usr/local/bin/execute_with_credentials.sh prepare_environment
Activated service account credentials for: [cft-onboarding@<project_id>.iam.gserviceaccount.com]
Activated service account credentials for: [cft-onboarding@<project_id>.iam.gserviceaccount.com]
Initializing modules...

Initializing the backend...

Initializing provider plugins...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.google-beta: version = "~> 3.9"
* provider.null: version = "~> 2.1"
* provider.random: version = "~> 2.2"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
module.project.module.project-factory.null_resource.preconditions: Refreshing state... [id=8723188031607443970]
module.project.module.project-factory.null_resource.shared_vpc_subnet_invalid_name[0]: Refreshing state... [id=5109975723938185892]
module.project.module.gsuite_group.data.google_organization.org[0]: Refreshing state...
module.project.module.project-factory.random_id.random_project_id_suffix: Refreshing state... [id=rnk]
module.project.module.project-factory.google_project.main: Refreshing state... [id=<project-id>]
module.project.module.project-factory.google_project_service.project_services[0]: Refreshing state... [id=<project-id>/storage-api.googleapis.com]
module.project.module.project-factory.google_project_service.project_services[1]: Refreshing state... [id=<project-id>/cloudresourcemanager.googleapis.com]
module.project.module.project-factory.google_project_service.project_services[2]: Refreshing state... [id=<project-id>/compute.googleapis.com]
module.project.module.project-factory.data.null_data_source.default_service_account: Refreshing state...
module.project.module.project-factory.google_service_account.default_service_account: Refreshing state... [id=projects/ci-cloud-storage-ae79/serviceAccounts/project-service-account@<project-id>.iam.gserv
iceaccount.com]
module.project.module.project-factory.google_project_service.project_services[3]: Refreshing state... [id=<project-id>/serviceusage.googleapis.com]
module.project.module.project-factory.null_resource.delete_default_compute_service_account[0]: Refreshing state... [id=3576396874950891283]
google_service_account.int_test: Refreshing state... [id=projects/<project-id>/serviceAccounts/cft-onboarding@<project-id>.iam.gserviceaccount.com]
google_service_account_key.int_test: Refreshing state... [id=projects/<project-id>/serviceAccounts/cft-onboarding@<project-id>.iam.gserviceaccount.com/keys/351009a1e011e88049ab2097994d1c627a61
6961]
google_project_iam_member.int_test[1]: Refreshing state... [id=<project-id>/roles/iam.serviceAccountUser/serviceaccount:cft-onboarding@<project-id>.iam.gserviceaccount.com]
google_project_iam_member.int_test[0]: Refreshing state... [id=<project-id>/roles/storage.admin/serviceaccount:cft-onboarding@<project-id>.iam.gserviceaccount.com]

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

project_id = <test-project-id>
sa_key = <sensitive>
Found test/setup/make_source.sh. Using it for additional explicit environment configuration.

Giờ đây, bạn đã tạo một dự án kiểm thử được project_id tham chiếu như có thể thấy trên kết quả của bảng điều khiển. Môi trường phát triển và kiểm thử của bạn đã được thiết lập.

5. Thêm tính năng mới vào mô-đun CFT

Bây giờ, môi trường phát triển và kiểm thử của bạn đã được thiết lập. Hãy bắt đầu thêm "silly_label" cho mô-đun CFT google-cloud-storage.

Đảm bảo bạn đang ở trong terraform-google-cloud-storage và mở tệp main.tf như bạn thấy dưới đây trong cấu trúc thư mục.

ac1dba25408abd09.png

Từ "silly_label" là một nhãn, bạn sẽ thêm tính năng ở dòng 27 trong biến "nhãn" trong main.tf, như bạn thấy dưới đây:

terraform-google-cloud-storage/main.tf

resource "google_storage_bucket" "buckets" {
 <...>
 storage_class = var.storage_class
 // CODELAB:Add silly label in labels variable
 labels        = merge(var.labels, { name = replace("${local.prefix}${lower(each.value)}", ".", "-") }, { "silly" = var.silly_label })
 force_destroy = lookup(
 <...>
}

Bây giờ, bạn sẽ thêm biến silly_label trong các biến.tf mà bạn thấy trong cấu trúc thư mục ở trên.

Sao chép và dán mã bên dưới và thêm mã đó vào dòng 31 trong Variable.tf và đảm bảo bạn thêm một ký tự dòng mới ở phía trên và bên dưới khối biến mà bạn thêm.

terraform-google-cloud-storage/variables.tf

variable "names" {
 description = "Bucket name suffixes."
 type        = list(string)
}

// CODELAB: Add "silly_label" variable to variables.tf between "names" and "location"
variable "silly_label" {
 description = "Sample label for bucket."
 type        = string
}

variable "location" {
 description = "Bucket location."
 default     = "EU"
}

6. Thêm một tính năng mới vào ví dụ về bộ chứa lưu trữ

Bạn đã thêm tính năng vào main.tf của mô-đun và bây giờ, bạn sẽ kiểm tra tính năng đã thêm thông qua một ví dụ.

Thuộc tính "silly_label" sẽ cần được thêm vào ví dụ/nhiều bộ chứa/main.tf

Ví dụ này sẽ được dùng trong bước tiếp theo để tiến hành kiểm thử quá trình tích hợp.

Sao chép và dán dòng silly_label biến dưới đây vào dòng 27 trong main.tf tại terraform-google-cloud-storage/examples/multiple-buckets/ như trong cấu trúc thư mục:

5224fefbbcc61d89.pngS

terraform-google-cloud-storage/examples/multiple-buckets/main.tf

module "cloud_storage" {
 <...>
 // CODELAB: Add "silly_label" as an example to main.tf.
 silly_label        = "awesome"

 <..>
}

7. Cập nhật kiểm thử bản thiết kế để kiểm tra tính năng

Bạn đã thêm tính năng vào main.tf của mô-đun, sau đó thêm tính năng vào ví dụ về nhiều_buckets. Bây giờ, bạn cần kiểm thử tính năng thông qua chương trình kiểm thử tích hợp bản thiết kế được viết bằng Golang.

Bạn sẽ thêm các chương trình kiểm thử mới trong tệp multiple_buckets_test.go có trong cấu trúc thư mục bên dưới:

72ea272d4792405.pngS

Bạn đã thêm thuộc tính "silly_label" trên tất cả các bộ chứa được tạo thông qua mô-đun multiple_buckets và bây giờ, bạn cần viết mã kiểm thử để kiểm thử tính năng mới.

Trong đoạn mã dưới đây, bạn sẽ nhận được nhãn của từng bộ chứa thông qua lệnh lưu trữ alpha của gcloud, sau đó kiểm tra kết quả được trả về từ lệnh.

test/integration/multiple_buckets/multiple_buckets_test.go

func TestMultipleBuckets(t *testing.T) {
 <..>
op := gcloud.Run(t, fmt.Sprintf("alpha storage ls --buckets gs://%s", bucketName), gcloudArgs).Array()[0]

// verify silly label on each bucket
assert.Equal("awesome", op.Get("metadata.labels.silly").String(), "should have silly label set to awesome")

// verify lifecycle rules
...
}

8. Thực thi thử nghiệm tích hợp trong CFT

Kiểm thử tích hợp

Kiểm thử tích hợp được dùng để xác minh hành vi của mô-đun gốc, các mô-đun con và các ví dụ. Các hoạt động bổ sung, thay đổi và sửa lỗi phải được thực hiện cùng với bài kiểm thử.

Các bài kiểm thử tích hợp được viết bằng khung kiểm thử bản thiết kế và chạy bằng CFT CLI. Các công cụ này được đóng gói trong một hình ảnh Docker để thuận tiện.

Chiến lược chung cho những chương trình kiểm thử này là xác minh hành vi của các mô-đun mẫu, qua đó đảm bảo rằng mô-đun gốc, mô-đun con và mô-đun mẫu đều có chức năng chính xác.

Trong quá trình thực thi có tính tương tác, bạn sẽ thực thi từng bước thông qua nhiều lệnh.

  1. Chạy make docker_run để bắt đầu kiểm thử vùng chứa Docker ở chế độ tương tác.

Make là một công cụ tự động hoá bản dựng có thể tự động tạo các chương trình và thư viện có thể thực thi từ mã nguồn bằng cách đọc các tệp có tên Makefiles, chỉ định cách lấy chương trình mục tiêu. Khi bạn thay đổi tệp, vùng chứa Docker phải được cập nhật tự động.

Khi chạy make docker_run, bạn sẽ tạo một không gian làm việc trong vùng chứa Docker và kích hoạt thông tin đăng nhập cho tài khoản dịch vụ của bạn. Không gian làm việc này sẽ được dùng trong các bước tiếp theo để chạy kiểm thử.

Bạn sẽ thấy kết quả dưới đây trong dòng lệnh:

Activated service account credentials for: [cft@<PROJECT_ID>.iam.gserviceaccount.com]
  1. Chạy cft test list để liệt kê tất cả chương trình kiểm thử bản thiết kế trong không gian làm việc của bạn.

Bạn sẽ thấy kết quả dưới đây trong dòng lệnh:

[root@CONTAINER_ID workspace]# cft test list
 NAME                           | CONFIG                    | LOCATION                                                   
--------------------------------+---------------------------+------------------------------------------------------------
 TestAll/examples/simple_bucket | examples/simple_bucket    | test/integration/discover_test.go                          
 TestMultipleBuckets            | examples/multiple_buckets | test/integration/multiple_buckets/multiple_buckets_test.go 

  1. Chạy cft test run <EXAMPLE_NAME> --stage init để khởi tạo ví dụ. Trong trường hợp này, để khởi chạy lần chạy kiểm thử TestMultipleBuckets, cft test run TestMultipleBuckets --stage init. Bạn có thể sử dụng thêm cờ --verbose để biết thêm thông tin khi chạy kiểm thử.

Giai đoạn init này sẽ khởi tạo ví dụ về Terraform.

Bạn sẽ thấy kết quả bên dưới trong dòng lệnh.

[root@<CONTAINER_ID> workspace]# cft test run TestMultipleBuckets --stage init --verbose
INFO[02-09|08:24:31] using test-dir: test/integration 
...
TestMultipleBuckets 2022-02-09T08:24:35Z command.go:179: Terraform has been successfully initialized!
...
TestMultipleBuckets 2022-02-09T08:24:35Z command.go:100: Running command terraform with args [validate]
TestMultipleBuckets 2022-02-09T08:24:36Z command.go:179: Success! The configuration is valid.
...
--- PASS: TestMultipleBuckets (4.05s)
  1. Chạy cft test run <EXAMPLE_NAME> --stage apply để áp dụng mô-đun ví dụ.

Bước này sẽ áp dụng ví dụ đã khởi tạo ở giai đoạn trước cho dự án GCP đã tạo trước đó trong lớp học lập trình.

Bạn sẽ thấy kết quả bên dưới trong dòng lệnh.

[root@<CONTAINER_ID> workspace]# cft test run TestMultipleBuckets --stage apply --verbose
INFO[02-09|08:28:11] using test-dir: test/integration
...
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: 
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: Outputs:
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: 
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: names = {
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179:   "one" = "multiple-buckets-erp1-eu-one"
...
--- PASS: TestMultipleBuckets (6.51s)
PASS
ok      github.com/terraform-google-modules/terraform-google-cloud-storage/test/integration/multiple_buckets    6.548s
  1. Chạy cft test run <EXAMPLE_NAME> --stage verify để xác minh rằng ví dụ đã tạo cơ sở hạ tầng dự kiến.

Bước này sẽ chạy hàm xác minh trong TestMultipleBuckets. Thông thường, quá trình xác minh được thực hiện thông qua việc thực thi lệnh gcloud để truy xuất đầu ra JSON cho trạng thái hiện tại của tài nguyên và xác nhận rằng trạng thái hiện tại đúng như đã khai báo trong ví dụ.

Nếu gặp lỗi, bạn sẽ thấy kết quả dự kiến và kết quả kiểm thử mà lệnh đã nhận được.

Bạn sẽ thấy kết quả bên dưới trong dòng lệnh.

cft test run TestMultipleBuckets --stage verify --verbose
INFO[02-09|08:30:19] using test-dir: test/integration
...
TestMultipleBuckets 2022-02-09T08:30:27Z command.go:100: Running command terraform with args [output -no-color -json names_list]
TestMultipleBuckets 2022-02-09T08:30:27Z command.go:179: ["multiple-buckets-erp1-eu-one","multiple-buckets-erp1-eu-two"]
TestMultipleBuckets 2022-02-09T08:30:27Z command.go:100: Running command gcloud with args [alpha storage ls --buckets gs://multiple-buckets-erp1-eu-one --project ci-cloud-storage-8ce9 --json]
TestMultipleBuckets 2022-02-09T08:30:28Z command.go:179: [
TestMultipleBuckets 2022-02-09T08:30:28Z command.go:179: {
TestMultipleBuckets 2022-02-09T08:30:28Z command.go:179:   "url": "gs://multiple-buckets-erp1-eu-one/",
...
TestMultipleBuckets 2022-02-09T08:30:33Z command.go:179: ]
2022/02/09 08:30:33 RUN_STAGE env var set to verify
2022/02/09 08:30:33 Skipping stage teardown
--- PASS: TestMultipleBuckets (12.32s)
PASS
ok      github.com/terraform-google-modules/terraform-google-cloud-storage/test/integration/multiple_buckets    12.359s
  1. Chạy cft test run <EXAMPLE_NAME> --stage teardown để phân tích ví dụ.

Bước này sẽ huỷ bỏ cơ sở hạ tầng mà bạn đã tạo ở các bước trên. Bước này cũng sẽ huỷ bỏ các bộ chứa GCS đã được tạo trong dự án cùng với nhãn mà bạn đã thêm vào mô-đun GCS.

Bạn có thể xem kết quả bên dưới trong dòng lệnh.

[root@<CONTAINER_ID> workspace]# cft test run TestMultipleBuckets --stage teardown --verbose
INFO[02-09|08:36:02] using test-dir: test/integration
...
TestMultipleBuckets 2022-02-09T08:36:06Z command.go:100: Running command terraform with args [destroy -auto-approve -input=false -lock=false]
TestMultipleBuckets 2022-02-09T08:36:07Z command.go:179: module.cloud_storage.random_id.bucket_suffix: Refreshing state... [id=mNA]
TestMultipleBuckets 2022-02-09T08:36:07Z command.go:179: random_string.prefix: Refreshing state... [id=erp1]
TestMultipleBuckets 2022-02-09T08:36:08Z command.go:179: module.cloud_storage.google_storage_bucket.buckets["two"]: Refreshing state... [id=multiple-buckets-erp1-eu-two]
...
TestMultipleBuckets 2022-02-09T08:36:10Z command.go:179: Destroy complete! Resources: 6 destroyed.
TestMultipleBuckets 2022-02-09T08:36:10Z command.go:179: 
--- PASS: TestMultipleBuckets (6.62s)
PASS
ok      github.com/terraform-google-modules/terraform-google-cloud-storage/test/integration/multiple_buckets    6.654s
  1. Chạy exit để thoát khỏi vùng chứa kiểm thử.

9. Tạo tài liệu cho đầu vào và đầu ra

Bảng Đầu vào và Đầu ra trong README của mô-đun gốc, mô-đun con và mô-đun mẫu được tạo tự động dựa trên variablesoutputs của các mô-đun tương ứng. Bạn phải làm mới các bảng này nếu giao diện mô-đun thay đổi.

Chạy:

make generate_docs
# This will generate new Inputs and Outputs tables

10. Thực thi kiểm thử tìm lỗi mã nguồn trong CFT

linter là một công cụ phân tích mã nguồn để gắn cờ các lỗi lập trình, lỗi, lỗi văn phong và những cấu trúc đáng ngờ.

Nhiều tệp trong kho lưu trữ có thể được tìm lỗi mã nguồn hoặc định dạng để duy trì tiêu chuẩn về chất lượng. Để đảm bảo chất lượng trong CFT, bạn sẽ dùng quy trình kiểm thử tìm lỗi mã nguồn.

Chạy:

make docker_test_lint
# This will run all lint tests on your repo

11. Gửi nội dung PR trên GitHub

Bây giờ, bạn đã thay đổi mã cục bộ và kiểm thử mã thông qua các bài kiểm thử tích hợp mà bạn muốn xuất bản mã này vào kho lưu trữ chính.

Để cung cấp mã trên kho lưu trữ chính, bạn cần xác nhận các thay đổi mã đối với nhánh và đẩy mã đó vào kho lưu trữ chính. Để mã được thêm vào kho lưu trữ chính mà bạn đã phát triển nhánh ở đầu lớp học lập trình, bạn sẽ đưa ra Yêu cầu kéo (PR) trên kho lưu trữ chính sau khi chuyển mã cho kho lưu trữ đó.

Khi bạn gửi PR, quản trị viên kho lưu trữ sẽ được thông báo để xem xét các thay đổi mã được đề xuất. Ngoài ra, bạn cũng có thể thêm người dùng khác làm người đánh giá để nhận phản hồi về những thay đổi mã của bạn. PR sẽ kích hoạt một Cloud Build. Phiên bản này sẽ chạy các bài kiểm thử trên kho lưu trữ.

Dựa trên các thay đổi về mã của bạn, nhân viên đánh giá mã sẽ đưa ra nhận xét về mã và yêu cầu sửa đổi nếu cần thay đổi dựa trên tài liệu và các phương pháp hay nhất. Quản trị viên sẽ xem xét các thay đổi đối với mã của bạn, đảm bảo rằng mã của bạn tuân thủ repo và có thể lại yêu cầu bạn thực hiện một số thay đổi trước khi hợp nhất mã của bạn vào repo chính.

Thực thi các bước sau để xác nhận mã cho nhánh đã phát triển nhánh và đẩy mã đến nhánh đã phân nhánh của bạn:

  1. Bước đầu tiên là thêm các tệp đã thay đổi vào kho lưu trữ cục bộ.
$ git add main.tf
$ git add README.md
$ git add variables.tf
$ git add examples/multiple-buckets/main.tf
$ git add test/integration/multiple_buckets/multiple_buckets_test.go
# The ‘git add' command adds the file in the local repository and 
# stages the file for commit. To unstage a file, use git reset HEAD YOUR-FILE
  1. Các tệp của bạn hiện đã được đưa vào giai đoạn, tiếp theo, bạn sẽ thực hiện các thay đổi.
$ git commit -m "First CFT commit"
# This will commit the staged changes and prepares them to be pushed 
# to a remote repository. To remove this commit and modify the file, 
# use 'git reset --soft HEAD~1' and commit and add the file again.
  1. Đẩy các thay đổi đã cam kết trong kho lưu trữ cục bộ lên GitHub để tạo một Yêu cầu kéo (PR).
$ git push -u origin feature/silly_label
# Pushes the changes in your local repository up to the remote
# repository you specified as the origin

Các thay đổi đối với mã của bạn hiện đã sẵn sàng cho Yêu cầu lấy dữ liệu!

Thực hiện các bước sau để tạo một PR cho kho lưu trữ terraform-google-modules/terraform-google-cloud-storage:

  1. Trong trình duyệt web, hãy chuyển đến trang chính của kho lưu trữ.
  2. Bạn sẽ thấy đề xuất thông qua biểu ngữ để mở một PR từ phát triển nhánh của mình. Nhấp vào "So sánh và lấy yêu cầu".

60e7ae0cbc11588e.png.

  1. Nhập tiêu đề và nội dung mô tả cho yêu cầu lấy dữ liệu để mô tả các thay đổi đối với mã của bạn. Hãy nêu càng cụ thể càng tốt nhưng vẫn súc tích.

329342f7e9d64410.pngS

  1. Để tạo một yêu cầu lấy dữ liệu đã sẵn sàng để xem xét, hãy nhấp vào "Tạo yêu cầu lấy dữ liệu".
  2. Bạn sẽ thấy các Trình kích hoạt bản dựng trên đám mây đang chạy. Các điều kiện kích hoạt này được kích hoạt do quan hệ công chúng.
  3. Hãy tham khảo các tài liệu chính thức của GitHub về việc mở yêu cầu lấy dữ liệu từ nhánh phát triển nếu bạn gặp vấn đề.

Bạn đã đẩy thành công thay đổi mã đầu tiên sang nhánh đã nhánh và tăng PR CFT đầu tiên của mình so với nhánh chính!

12. Xin chúc mừng

Xin chúc mừng! Bạn đã thêm thành công một tính năng vào mô-đun CFT và gửi bản PR để được xem xét!

Bạn đã thêm một tính năng vào mô-đun CFT, kiểm thử cục bộ tính năng đó thông qua một ví dụ và thực hiện kiểm thử trước khi chuyển giao mã cho GitHub. Cuối cùng, bạn đã gửi một yêu cầu PR để xem xét và hợp nhất lần cuối vào CFT.

Giờ đây, bạn đã biết các bước quan trọng để bắt đầu sử dụng Bộ công cụ nền tảng đám mây.