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: 11/2/2022

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

Về cơ bản, CFT cung cấp các mẫu theo 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)
  • Có kiến thức 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 Google Cloud, một thư mục kiểm thử 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 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
  • Gửi mã lên GitHub và gửi Yêu cầu gộp (PR)

Bạn sẽ thực thi tất cả các bước trên bằng cách thêm 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ẽ tự động được 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 mã 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 một hệ thống quản lý phiên bản (VCS) nguồn mở có tên là Git. Git chịu trách nhiệm về mọi hoạt động liên quan đến GitHub diễn ra 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ì công cụ này đượ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 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 liên kết với các thay đổi bạn thực hiện trên Git bằng lệnh git config. Việc thay đổi tên liên kết với các thay đổi Git bằng git config sẽ chỉ ảnh hưởng đến các thay đổi trong tương lai và sẽ không thay đổi tên được dùng cho các thay đổi trước đây.

Bạn đã thiết lập thành công Git và có thể phân nhánh, tạo và nhân bản các nhánh. Chúng ta sẽ sử dụng Git 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

Tạo 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.

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

Thông thường, các nhánh đượ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 xuất phát 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. Để khắc phục 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 kéo đến chủ sở hữu dự án.

Các bước phân nhánh 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 của trang, hãy nhấp vào Fork (Tạo nhánh).

9dc18f15ca662b56.png

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

Sao chép nhánh của bạn trên máy

Phiên bản phân nhánh bạn đã tạo là 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 để nhân bản nhánh của bạn:

  1. Mở trình duyệt web và chuyển đến nhánh phát triển 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 nút "Mã", hãy nhấp vào nút đó.

98f8be8df319dcd8.pngS

  1. Sau khi nhấp vào nút "Mã", hãy nhấp vào biểu tượng "Sao chép" để sao chép URL của nhánh. Bạn sẽ sử dụng URL này để nhân bản nhánh của mình sang môi trường cục bộ.

e61e1da6371f2a1d.png

  1. Chuyển đến một cửa sổ dòng lệnh trong VSCode hoặc máy của bạn và nhân bản nhánh.
$ git clone <url>
# This command will clone your fork locally.
# Paste the copied URL from the previous step.
  1. 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 yêu cầu về tính năng: feature/feature-name
  • Đối với nội dung cập nhật nội bộ, internal/change-name
  • Để sửa lỗi: bugfix/issue-name

Vì đ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 là 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 kiểm thử riêng biệt để kiểm thử. Bước này sẽ hướng dẫn bạn tạo dự án kiểm thử (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 Cloud Shell của GCP.

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ôi trường thử nghiệm, bạn cần có Tổ chức Google Cloud, thư mục thử nghiệm và tài khoản thanh toán. Bạn cần đặt các giá trị này thông qua 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ó vai trò Người tạo dự án, Người dùng tài khoản thanh toánNgười xem tổ chức. Các 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 một tài khoản hiện có.

3.1 Tạo hoặc Chọn dự án GCP hạt giống

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 trên dự án hạt giống:

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 rằng 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"

Giờ đây, bạn có một 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 thử nghiệm, 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 cho Terraform

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

4.2 Thiết lập thông tin xác thực 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 sử dụng cùng một lệnh ở trên.

rm -rf cft.json

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

Giờ đây, khi mọi thứ đã được chuẩn bị, 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, nơi bạn sẽ triển khai và kiểm thử mô-đun Bộ nhớ trên đám mây 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.

Hiện tại, bạn đã tạo một dự án kiểm thử được project_id tham chiếu như có thể thấy trong 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

Giờ đây, 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 tính năng "silly_label" vào 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 bên dưới trong cấu trúc thư mục.

ac1dba25408abd09.png

Vì "silly_label" là một nhãn, nê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 variables.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 rồi thêm vào dòng 31 trong variables.tf và đảm bảo bạn có một ký tự dòng mới ở phía trên và phía 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 bộ nhớ

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

Bạn cần thêm "silly_label" vào examples/multiple-buckets/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 biến silly_label bên dưới 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.png

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 vào tệp multiple_buckets_test.go có trong cấu trúc thư mục bên dưới:

72ea272d4792405.png

Bạn đã thêm "silly_label" vào tất cả các bộ chứa được tạo thông qua mô-đun multiple_buckets và giờ đây, 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, mô-đun con và ví dụ. Các nội dung bổ sung, thay đổi và sửa lỗi phải đi kèm vớ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 các kiểm thử này là xác minh hành vi của mô-đun ví dụ, nhờ đó đảm bảo rằng mô-đun gốc, mô-đun con và mô-đun ví dụ đều hoạt độ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 vùng chứa Docker kiểm thử ở 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 thực hiện thay đổi đối với tệp, vùng chứa Docker phải được tự động cập nhật.

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 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 thiết bị đầu cuối:

Activated service account credentials for: [cft@<PROJECT_ID>.iam.gserviceaccount.com]
  1. Chạy cft test list để liệt kê tất cả các bài 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 thiết bị đầu cuối:

[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 chạy ví dụ. Trong trường hợp này, để khởi chạy kiểm thử TestMultipleBuckets, hãy sử dụng cft test run TestMultipleBuckets --stage init. Ngoài ra, bạn có thể sử dụng cờ --verbose để nhận thêm thông tin khi chạy kiểm thử.

Giai đoạn khởi chạy này sẽ khởi chạy 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 mẫu.

Bước này áp dụng ví dụ được khởi chạy ở 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, việc 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 một tài nguyên và xác nhận rằng trạng thái hiện tại giố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ả mà lệnh nhận được cho quá trình kiểm thử.

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 để huỷ bỏ 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 đã 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 dữ liệu đầu vào và đầu ra

Các bảng Đầu vào và Đầu ra trong tệp README của mô-đun gốc, mô-đun con và mô-đun ví dụ đượ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ẽ sử dụng 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 yêu cầu thay đổi trên GitHub

Giờ đây, 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, bạn sẽ muốn phát hành mã này lên kho lưu trữ chính.

Để cung cấp mã trên kho lưu trữ chính, bạn cần cam kết các thay đổi về mã cho nhánh của mình và đẩy mã đó vào kho lưu trữ chính. Để thêm mã của bạn vào kho lưu trữ chính mà bạn đã phân nhánh ở đầu Lớp học lập trình, bạn sẽ gửi một Yêu cầu kéo (PR) trên kho lưu trữ chính sau khi cam kết mã vào kho lưu trữ của mình.

Khi bạn gửi một yêu cầu thay đổi, 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 ý kiến phản hồi về các thay đổi đối với mã. 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ã, người đánh giá mã sẽ đưa ra nhận xét về mã của bạn và yêu cầu sửa đổi nếu cần dựa trên các phương pháp hay nhất và tài liệu. Quản trị viên sẽ xem xét các thay đổi về mã của bạn, đảm bảo rằng mã của bạn tuân thủ kho lưu trữ và có thể yêu cầu bạn thực hiện một số thay đổi trước khi hợp nhất mã vào kho lưu trữ 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át triển nhánh đó:

  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ộ của bạn lên GitHub để tạo 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 về mã của bạn hiện đã sẵn sàng để tạo Yêu cầu thay đổi!

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 một đề xuất qua biểu ngữ để mở một yêu cầu thay đổi từ nhánh của mình. Nhấp vào "So sánh và yêu cầu lấy mã nguồn".

60e7ae0cbc11588e.png

  1. Nhập tiêu đề và nội dung mô tả cho yêu cầu hợp nhất để mô tả các thay đổi về mã. Hãy nêu càng cụ thể càng tốt nhưng vẫn súc tích.

329342f7e9d64410.png

  1. Để tạo một yêu cầu kéo đã sẵn sàng để xem xét, hãy nhấp vào "Tạo yêu cầu kéo".
  2. Bạn sẽ thấy các Trình kích hoạt bản dựng đá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 tài liệu chính thức của GitHub về cách mở yêu cầu gộp các thay đổi mà bạn thực hiện vào mã nguồn ban đầu từ các nhánh nếu bạn gặp vấn đề.

Bạn đã đẩy thành công thay đổi mã đầu tiên vào nhánh phân tách và tạo yêu cầu thay đổi CFT đầu tiên đối 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 yêu cầu xem xét (PR)!

Bạn đã thêm một tính năng vào mô-đun CFT, kiểm thử tính năng đó trên máy thông qua một ví dụ và thực hiện kiểm thử trước khi cam kết mã của bạn với GitHub. Cuối cùng, bạn đã gửi một yêu cầu xem xét để xem xét và hợp nhất cuối cùng 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.