1. CFT 101 এর ভূমিকা
শেষ আপডেট: 2020-03-03
ক্লাউড ফাউন্ডেশন টুলকিট কি?
সংক্ষেপে, Google ক্লাউড প্ল্যাটফর্মে দ্রুত শুরু করার জন্য CFT সেরা-অভ্যাসের টেমপ্লেট সরবরাহ করে। এই টিউটোরিয়ালে, আপনি শিখবেন কিভাবে ক্লাউড ফাউন্ডেশন টুলকিটে অবদান রাখতে হয়।
আপনি কি প্রয়োজন হবে
- একটি GitHub অ্যাকাউন্ট।
- আপনার মেশিনে ডকার ইনস্টল করা হয়েছে ( ম্যাক ইনস্টল , উইন্ডোজ ইনস্টল )
- কোড সম্পাদনার জন্য কোড সম্পাদক (উদাহরণ: ভিজ্যুয়াল স্টুডিও কোড )
- গিট এবং গিটহাবের সাথে প্রাথমিক পরিচিতি
- কোড হিসাবে Terraform এবং পরিকাঠামোর সাথে কিছু অভিজ্ঞতা
- একটি পরিষেবা অ্যাকাউন্টে প্রকল্প নির্মাতার ভূমিকা প্রদানের অনুমতি৷
আপনি কি নির্মাণ করবেন
এই কোডল্যাবে, আপনি শিখতে যাচ্ছেন কিভাবে ক্লাউড ফাউন্ডেশন টুলকিটে (CFT) অবদান রাখতে হয়।
আপনি করবেন:
- CFT এ অবদান রাখার জন্য একটি ডেভ এনভায়রনমেন্ট সেটআপ করুন
- একটি CFT মডিউলে একটি বৈশিষ্ট্য যোগ করুন
- যোগ করা বৈশিষ্ট্যের জন্য পরীক্ষা যোগ করুন
- CFT এ ইন্টিগ্রেশন পরীক্ষা চালান
- লিন্ট পরীক্ষা চালান
- গিটহাবে কোড কমিট করুন এবং একটি পুল রিকোয়েস্ট (পিআর) জমা দিন
আপনি Google ক্লাউড স্টোরেজ CFT মডিউলে একটি নতুন বৈশিষ্ট্য যোগ করে উপরের সমস্ত পদক্ষেপগুলি সম্পাদন করবেন৷ আপনি "silly_label"
নামক একটি লেবেল যোগ করবেন যা GCS CFT মডিউলের মাধ্যমে তৈরি করা সমস্ত বালতিতে স্বয়ংক্রিয়ভাবে যুক্ত হবে। এছাড়াও আপনি আপনার বৈশিষ্ট্য যাচাই করতে এবং শেষ থেকে শেষ ইন্টিগ্রেশন নিশ্চিত করতে পরীক্ষা লিখতে পারবেন।
2. ডেভ এনভায়রনমেন্ট সেটআপ করুন
আপনি যদি চান, আপনি আপনার উন্নয়নের উদ্দেশ্যে ক্লাউড শেল ব্যবহার করতে পারেন। আপনি যদি CFT তে অবদান রাখার জন্য ক্লাউড শেল ব্যবহার করতে না চান তবে আপনি আপনার মেশিনে আপনার ডেভ পরিবেশ সেটআপ করতে পারেন।
গিট সেট আপ করুন
GitHub একটি ওপেন সোর্স ভার্সন কন্ট্রোল সিস্টেম (VCS) এর উপর ভিত্তি করে গিট নামক। আপনার মেশিনে বা আপনার ক্লাউড শেলে স্থানীয়ভাবে ঘটে যাওয়া গিটহাব-সম্পর্কিত সবকিছুর জন্য গিট দায়ী।
- আপনি যখন ক্লাউড শেল ব্যবহার করেন, তখন আপনাকে গিট ইনস্টল করতে হবে না কারণ এটি আগে থেকে ইনস্টল করা হয়।
$ git --version
# This will display the git version on the Cloud Shell.
আপনি যদি আপনার মেশিনে আপনার ডেভ পরিবেশ সেট আপ করেন তবে আপনাকে গিট ইনস্টল করতে হবে।
গিটে আপনার ব্যবহারকারীর নাম এবং ইমেল সেট করা হচ্ছে
গিট একটি পরিচয়ের সাথে কমিট যুক্ত করতে একটি ব্যবহারকারীর নাম ব্যবহার করে। গিট ব্যবহারকারীর নামটি আপনার গিটহাব ব্যবহারকারীর নামের মতো নয়।
আপনি git config কমান্ড ব্যবহার করে আপনার গিট কমিটের সাথে যুক্ত নাম পরিবর্তন করতে পারেন। git config
ব্যবহার করে আপনার গিট কমিটের সাথে যুক্ত নাম পরিবর্তন করা শুধুমাত্র ভবিষ্যতের প্রতিশ্রুতিকে প্রভাবিত করবে এবং অতীতের প্রতিশ্রুতিগুলির জন্য ব্যবহৃত নাম পরিবর্তন করবে না।
আপনি সফলভাবে গিট সেট আপ করেছেন এবং আপনি কাঁটাচামচ, তৈরি এবং শাখা ক্লোন করতে সক্ষম হবেন। আমরা এই কোডল্যাবে ব্যাপকভাবে গিট ব্যবহার করব।
3. ফর্ক CFT এর GCS সংগ্রহস্থল
একটি CFT সংগ্রহস্থল ফর্ক করুন
আপনি আগের ধাপে আপনার স্থানীয় মেশিনে বা আপনার ক্লাউড শেলে গিট সেট আপ করেছেন। অবদান রাখা শুরু করার জন্য এখন আপনাকে Google ক্লাউড স্টোরেজ CFT রেপোতে কাঁটা দিতে হবে।
একটি কাঁটা একটি সংগ্রহস্থল একটি অনুলিপি. একটি সংগ্রহস্থলকে ফোর্ক করা আপনাকে মূল প্রকল্পকে প্রভাবিত না করেই পরিবর্তনের সাথে অবাধে পরীক্ষা করার অনুমতি দেয়।
সাধারণত, কাঁটা ব্যবহার করা হয় অন্য কারো প্রজেক্টে পরিবর্তনের প্রস্তাব দিতে বা অন্য কারো প্রজেক্টকে আপনার নিজের ধারণার সূচনা বিন্দু হিসেবে ব্যবহার করতে।
উদাহরণস্বরূপ, আপনি একটি বাগ ফিক্সিং সম্পর্কিত পরিবর্তন প্রস্তাব করতে কাঁটাচামচ ব্যবহার করতে পারেন। একটি বাগ ঠিক করতে, আপনি করতে পারেন:
- ভান্ডার কাঁটাচামচ.
- ঠিক করুন।
- প্রকল্পের মালিকের কাছে একটি টান অনুরোধ জমা দিন।
একটি CFT রেপো ফোর্ক করার জন্য পদক্ষেপ:
- আপনার ওয়েব ব্রাউজার খুলুন এবং terraform-google-modules/terraform-google-cloud-storage repository-এ নেভিগেট করুন। আমরা পুরো কোডল্যাবের জন্য এই রেপো ব্যবহার করব।
- পৃষ্ঠার উপরের-ডান কোণে, Fork-এ ক্লিক করুন।
- আপনি যেখানে কাঁটাচামচ রাখতে চান তার একটি বিকল্প আপনাকে উপস্থাপন করা হবে, আপনার প্রোফাইল চয়ন করুন এবং রেপোটি ফর্ক করা হবে।
স্থানীয়ভাবে আপনার কাঁটা ক্লোন করুন
আপনি যে কাঁটা তৈরি করেছেন তা হল GCS মডিউল সংগ্রহস্থলের একটি অনুলিপি। আপনার নতুন বৈশিষ্ট্য যোগ করতে আপনি এখন আপনার স্থানীয় পরিবেশে এই সংগ্রহস্থলটি ক্লোন করবেন।
আপনার কাঁটা ক্লোন করার পদক্ষেপ:
- আপনার ওয়েব ব্রাউজার খুলুন এবং terraform-google-modules/terraform-google-cloud-storage- এ আপনার ফর্ক-এ নেভিগেট করুন।
- উপরের ডানদিকে আপনি "ক্লোন বা ডাউনলোড" বোতামটি পাবেন, এটিতে ক্লিক করুন।
- আপনি "ক্লোন বা ডাউনলোড" বোতামে ক্লিক করার পরে, ফর্কের URL অনুলিপি করতে "নোটপ্যাড" আইকনে ক্লিক করুন। আপনি আপনার স্থানীয় পরিবেশে আপনার কাঁটা ক্লোন করতে এই URL ব্যবহার করবেন।
- আপনার VSCode বা আপনার মেশিনের একটি টার্মিনালে যান এবং কাঁটা ক্লোন করুন।
$ git clone <url>
# This command will clone your fork locally.
# Paste the copied URL from the previous step.
- এখন আপনি স্থানীয়ভাবে আপনার কাঁটা ক্লোন করেছেন, আপনার রেপোতে যেতে হবে, কাঁটা থেকে একটি নতুন শাখা তৈরি করতে হবে এবং অস্থায়ী শাখায় কোড পরিবর্তন করতে হবে।
নিয়ম অনুসারে, আপনি আপনার শাখার নাম নিম্নরূপ রাখতে পারেন:
- বৈশিষ্ট্য অনুরোধের জন্য:
feature/feature-name
- অভ্যন্তরীণ আপডেটের জন্য,
internal/change-name
- বাগ ফিক্সের জন্য:
bugfix/issue-name
যেহেতু আপনি একটি নতুন বৈশিষ্ট্য যোগ করছেন, আপনি আপনার অস্থায়ী শাখা 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"
আপনি এখন ক্লাউড ফাউন্ডেশন টুলকিটে কাজ শুরু করার জন্য সমস্ত সেটআপ করেছেন!
4. একটি পরীক্ষার পরিবেশ তৈরি করুন
স্ট্যান্ডার্ড সিএফটি বিকাশ প্রক্রিয়াটি পরীক্ষার জন্য একটি বিচ্ছিন্ন পরীক্ষা প্রকল্প ব্যবহার করে। এই পদক্ষেপটি একটি পরিষেবা অ্যাকাউন্টের মাধ্যমে পরীক্ষামূলক প্রকল্প (একটি স্ট্যান্ডার্ড কনফিগারেশনের উপর ভিত্তি করে) তৈরি করার মাধ্যমে আপনাকে গাইড করবে।
0. ডকার ইঞ্জিন ইনস্টল করুন
আপনি যদি আপনার মেশিনটি উন্নয়নের উদ্দেশ্যে ব্যবহার করেন তবে আপনাকে ডকার ইঞ্জিন ইনস্টল করতে হবে।
1. Google Cloud SDK ইনস্টল করুন৷
আপনি যদি GCP ক্লাউড শেল ব্যবহার করেন তাহলে আপনাকে Google Cloud SDK ইনস্টল করার দরকার নেই৷
Google Cloud SDK- এ যান এবং আপনার প্ল্যাটফর্মের জন্য ইন্টারেক্টিভ ইনস্টলার ডাউনলোড করুন।
2. কনফিগারেশন সেট করুন
একটি পরীক্ষার পরিবেশ তৈরি করার জন্য, আপনার একটি Google ক্লাউড সংস্থা, একটি পরীক্ষা ফোল্ডার এবং একটি বিলিং অ্যাকাউন্টের প্রয়োজন হবে৷ এই মানগুলি পরিবেশের ভেরিয়েবলের মাধ্যমে সেট করা দরকার:
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 আপনার পরিষেবা অ্যাকাউন্ট সেট আপ করুন৷
একটি পরীক্ষার পরিবেশ তৈরি করার আগে, আপনাকে আপনার পরীক্ষার পরিবেশে একটি পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করতে হবে। এই পরিষেবা অ্যাকাউন্টের প্রয়োজন হবে প্রকল্প নির্মাতা, বিলিং অ্যাকাউন্ট ব্যবহারকারী, এবং সংস্থা দর্শকের ভূমিকা। এই পদক্ষেপগুলি আপনাকে একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরি করতে সহায়তা করে তবে আপনি একটি বিদ্যমান অ্যাকাউন্ট পুনরায় ব্যবহার করতে পারেন।
3.1 বীজ GCP প্রকল্প তৈরি বা নির্বাচন করুন
আপনার পরিষেবা অ্যাকাউন্ট তৈরি করার আগে, আপনাকে এটি হোস্ট করার জন্য একটি প্রকল্প নির্বাচন করতে হবে৷ আপনি একটি নতুন প্রকল্পও তৈরি করতে পারেন৷
gcloud config set core/project YOUR_PROJECT_ID
3.2 Google ক্লাউড API সক্ষম করুন৷
আপনার বীজ প্রকল্পে নিম্নলিখিত Google ক্লাউড APIগুলি সক্ষম করুন:
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable iam.googleapis.com
gcloud services enable cloudbilling.googleapis.com
3.3 পরিষেবা অ্যাকাউন্ট তৈরি করুন
পরীক্ষার পরিবেশ পরিচালনা করতে একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরি করুন:
# 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
আপনার পরিষেবা অ্যাকাউন্ট তৈরি হয়েছে যাচাই করুন:
gcloud iam service-accounts list --filter="EMAIL=${SERVICE_ACCOUNT}"
3.4 পরিষেবা অ্যাকাউন্টে প্রকল্প নির্মাতা, বিলিং অ্যাকাউন্ট ব্যবহারকারী এবং সংস্থার দর্শকের ভূমিকা মঞ্জুর করুন:
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 organizations add-iam-policy-binding ${TF_VAR_org_id} \
--member="serviceAccount:${SERVICE_ACCOUNT}" \
--role="roles/resourcemanager.organizationViewer"
এখন আপনার একটি পরিষেবা অ্যাকাউন্ট রয়েছে যা পরীক্ষার পরিবেশ পরিচালনার জন্য ব্যবহার করা যেতে পারে।
4. বিলিং অ্যাকাউন্ট রিসোর্সে বিলিং অ্যাকাউন্ট ব্যবহারকারীর ভূমিকা বরাদ্দ করুন
4.1 বিলিং অ্যাকাউন্ট IAM নীতি আনুন
বিলিং অ্যাকাউন্টে বিদ্যমান IAM পলিসি বাইন্ডিং ডাউনলোড করুন
gcloud beta billing accounts get-iam-policy ${TF_VAR_billing_account} | tee policy.yml
4.2 পরিষেবা অ্যাকাউন্ট অন্তর্ভুক্ত করতে নীতি আপডেট করুন
roles/billing.user
ভূমিকা সহ পরিষেবা অ্যাকাউন্টের জন্য একটি নতুন বাইন্ডিং যোগ করতে policy.yml
ফাইলটি আপডেট করুন
bindings:
- members:
- serviceAccount:cft-onboarding@<YOUR_PROJECT_ID>.iam.gserviceaccount.com
role: roles/billing.user
4.3 বিলিং অ্যাকাউন্ট নীতি আপডেট করুন
বিলিং অ্যাকাউন্টে পরিবর্তনগুলি প্রয়োগ করুন৷
gcloud beta billing accounts set-iam-policy ${TF_VAR_billing_account} policy.yml
5. টেরাফর্ম শংসাপত্র প্রস্তুত করুন
পরীক্ষার পরিবেশ তৈরি করার জন্য, আপনাকে আপনার শেলে পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করতে হবে।
5.1 পরিষেবা অ্যাকাউন্ট কী
Terraform এর জন্য একটি পরিষেবা অ্যাকাউন্ট কী তৈরি করুন এবং ডাউনলোড করুন
gcloud iam service-accounts keys create cft.json --iam-account=${SERVICE_ACCOUNT}
5.2 টেরাফর্ম শংসাপত্র সেটআপ করুন
পরিবেশ পরিবর্তনশীল SERVICE_ACCOUNT_JSON
ব্যবহার করে Terraform-এ কী সরবরাহ করুন, আপনার পরিষেবা অ্যাকাউন্ট কী-এর বিষয়বস্তুর মান নির্ধারণ করুন।
export SERVICE_ACCOUNT_JSON=$(< cft.json)
6. টেরাফর্ম স্থাপনার জন্য পরীক্ষামূলক প্রকল্প তৈরি করুন
এখন সবকিছু প্রস্তুত করা হয়েছে, আপনি একটি একক কমান্ড দিয়ে পরীক্ষা প্রকল্প তৈরি করতে পারেন। terraform-google-Cloud-storage ডিরেক্টরি রুট থেকে এই কমান্ডটি চালান:
make docker_test_prepare
আপনি যখন make docker_test_prepare
চালাবেন তখন আপনি নীচের আউটপুটটি দেখতে পাবেন, শেষে আপনি পরীক্ষামূলক প্রকল্প_আইডি পাবেন যা তৈরি করা হয়েছে যেখানে আপনি আপনার নতুন বৈশিষ্ট্যের সাথে আপনার ক্লাউড স্টোরেজ মডিউলটি স্থাপন এবং পরীক্ষা করবেন।
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.
আপনি এখন একটি পরীক্ষামূলক প্রকল্প তৈরি করেছেন যা প্রজেক্ট_আইডি দ্বারা উল্লেখ করা হয়েছে যেমন আপনি কনসোল আউটপুটে দেখতে পাচ্ছেন। আপনার বিকাশ এবং পরীক্ষার পরিবেশ সেটআপ করা হয়েছে।
5. CFT মডিউলে একটি নতুন বৈশিষ্ট্য যোগ করুন
এখন আপনার ডেভেলপমেন্ট এবং টেস্ট এনভায়রনমেন্ট সেটআপ করা হয়েছে, চলুন google-Cloud-storage CFT মডিউলে আপনার "silly_label" ফিচার যোগ করা শুরু করি।
নিশ্চিত করুন যে আপনি terraform-google-cloud-storage-এ আছেন এবং main.tf ফাইলটি খুলুন যেভাবে আপনি ফোল্ডারের কাঠামোতে নীচে দেখছেন।
যেহেতু "silly_label" একটি লেবেল, তাই আপনি main.tf-এর ভেরিয়েবল "লেবেল"-এ 27 লাইনে বৈশিষ্ট্যটি যোগ করবেন, যেমন আপনি নীচে দেখছেন:
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(element(var.names, count.index))}", ".", "-") }, { "silly" = var.silly_label })
force_destroy = lookup(
<...>
}
এখন, আপনি variables.tf-এ silly_label ভেরিয়েবল যোগ করবেন যা আপনি উপরের ফোল্ডার কাঠামোতে দেখতে পাচ্ছেন।
নীচের কোডটি অনুলিপি করুন এবং variables.tf-এর 29 নম্বর লাইনে যোগ করুন এবং আপনি যে পরিবর্তনশীল ব্লকটি যুক্ত করেছেন তার উপরে এবং নীচে একটি নতুন লাইন অক্ষর আছে তা নিশ্চিত করুন।
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. স্টোরেজ বাকেটের উদাহরণে একটি নতুন বৈশিষ্ট্য যোগ করুন
আপনি মডিউলের main.tf এ আপনার বৈশিষ্ট্য যোগ করেছেন এবং এখন আপনি একটি উদাহরণের মাধ্যমে আপনার যোগ করা বৈশিষ্ট্যটি পরীক্ষা করবেন।
উদাহরণ/multiple-buckets/main.tf-এ "silly_label" যোগ করতে হবে
এই উদাহরণটি একটি ফিক্সচার দ্বারা পরবর্তী ধাপে ইন্টিগ্রেশন পরীক্ষা করার জন্য ব্যবহার করা হবে।
টেরাফর্ম-google-cloud-storage/examples/multiple-buckets/ এ ফোল্ডারের কাঠামোতে দেখা যায় এমন নীচের পরিবর্তনশীল silly_label লাইনটিকে main.tf-এ লাইন 27-এ কপি করুন:
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. বৈশিষ্ট্য পরীক্ষা করার জন্য একটি পরিদর্শক পরীক্ষা লিখুন
আপনি আপনার বৈশিষ্ট্যটি মডিউলের main.tf-এ যোগ করেছেন এবং তারপর ফিক্সচারের মাধ্যমে পরীক্ষা করার জন্য একাধিক_বাকেট উদাহরণে বৈশিষ্ট্যটি যোগ করেছেন। আপনাকে রুবিতে লেখা একটি InSpec ইন্টিগ্রেশন পরীক্ষার মাধ্যমে আপনার বৈশিষ্ট্য পরীক্ষা করতে হবে।
আপনি নীচের ফোল্ডার কাঠামোতে পাওয়া gsutil.rb ফাইলে আপনার নতুন পরীক্ষা যোগ করবেন:
আপনি মাল্টিপল_বাকেট মডিউলের মাধ্যমে তৈরি করা সমস্ত বালতিতে "সিলি_লেবেল" যোগ করেছেন এবং এখন নতুন বৈশিষ্ট্যটি পরীক্ষা করার জন্য আপনাকে পরীক্ষা লিখতে হবে।
নীচের কোডে, আপনি gsutil কমান্ডের মাধ্যমে প্রতিটি বালতির লেবেল পাচ্ছেন এবং তারপর আপনি কমান্ড থেকে ফিরে আসা আউটপুটটি পরীক্ষা করুন।
terraform-google-cloud-storage/test/integration/multiple-buckets/controls/gsutil.rb
control "gsutil" do
<..>
# CODELAB: Copy paste the below test in gsutil.rb to test silly_label feature.
# command to get the labels for bucket_1
describe command("gsutil label get gs://#{attribute("names_list")[0]}") do
//check if the command gave a valid response
its(:exit_status) { should eq 0 }
its(:stderr) { should eq "" }
//parse the command's output into JSON
let!(:data) do
if subject.exit_status == 0
JSON.parse(subject.stdout)
else
{}
end
end
# check if bucket_1 has the new "silly" label with the value "awesome"
describe "bucket_1" do
it "has label" do
data.each do |bucket|
expect(data["silly"]).to include("awesome")
end
end
end
end
8. CFT এ ইন্টিগ্রেশন পরীক্ষা চালান
ইন্টিগ্রেশন টেস্টিং
ইন্টিগ্রেশন পরীক্ষা রুট মডিউল, সাবমডিউল এবং উদাহরণ মডিউলের আচরণ যাচাই করতে ব্যবহৃত হয়। পরীক্ষার সাথে সংযোজন, পরিবর্তন এবং সংশোধন করা উচিত।
ইন্টিগ্রেশন পরীক্ষাগুলি রান্নাঘর , রান্নাঘর-টেরাফর্ম এবং InSpec ব্যবহার করে চালানো হয়। এই সরঞ্জামগুলি সুবিধার জন্য একটি ডকার চিত্রের মধ্যে প্যাকেজ করা হয়।
এই পরীক্ষার জন্য সাধারণ কৌশল হল উদাহরণ মডিউলগুলির আচরণ যাচাই করা, এইভাবে নিশ্চিত করা যে রুট মডিউল, সাবমডিউল এবং উদাহরণ মডিউলগুলি কার্যকরীভাবে সঠিক।
ইন্টারেক্টিভ এক্সিকিউশনে, আপনি একাধিক কমান্ডের মাধ্যমে প্রতিটি ধাপ চালান।
- ইন্টারেক্টিভ মোডে ডকার কন্টেইনার টেস্টিং শুরু করতে
make docker_run
চালান।
মেক হল একটি বিল্ড অটোমেশন টুল যা স্বয়ংক্রিয়ভাবে মেকফাইলস নামক ফাইলগুলি পড়ে সোর্স কোড থেকে এক্সিকিউটেবল প্রোগ্রাম এবং লাইব্রেরি তৈরি করে যা নির্দিষ্ট করে কিভাবে টার্গেট প্রোগ্রামটি বের করতে হয়। আপনি যখন ফাইল পরিবর্তন করবেন তখন ডকার কন্টেইনারটি স্বয়ংক্রিয়ভাবে আপডেট হতে হবে।
আপনি যখন make docker_run
চালান, তখন আপনি আপনার ডকার কন্টেইনারে একটি ওয়ার্কস্পেস তৈরি করেন এবং আপনার পরিষেবা অ্যাকাউন্টের জন্য শংসাপত্রগুলি সক্রিয় করেন। ওয়ার্কস্পেস পরীক্ষা চালানোর জন্য পরবর্তী ধাপে ব্যবহার করা হবে।
আপনি আপনার টার্মিনালে নীচের আউটপুট দেখতে পাবেন:
Activated service account credentials for: [cft@<PROJECT_ID>.iam.gserviceaccount.com]
- ইন্টিগ্রেশন পরীক্ষা ধারণ করে আপনার কর্মক্ষেত্রের সমস্ত দৃষ্টান্ত তালিকাভুক্ত করতে
kitchen_do list
চালান।You will see the below output in your terminal.
[root@<CONTAINER_ID> workspace]# kitchen_do list
Automatically setting inputs from outputs of test/setup
Found test/source.sh. Using it for additional explicit environment configuration.
Activated service account credentials for: [cft@<PROJECT_ID>.iam.gserviceaccount.com]
Instance Driver Provisioner Verifier Transport Last Action Last Error
multiple-buckets-default Terraform Terraform Terraform Ssh Verified <None>
- একটি উদাহরণ মডিউলের জন্য ওয়ার্কিং ডাইরেক্টরি শুরু করতে
kitchen_do create <EXAMPLE_NAME>
চালান।
এই ধাপটি রান্নাঘর আরম্ভ করে এবং কর্মক্ষেত্রে টেরাফর্ম শুরু করে।
আপনি আপনার টার্মিনালে নীচের আউটপুট দেখতে পাবেন।
[root@<CONTAINER_ID> workspace]# kitchen_do create multiple-buckets-default
Automatically setting inputs from outputs of test/setup
Found test/source.sh. Using it for additional explicit environment configuration.
Activated service account credentials for: [cft@<PROJECT_ID>.iam.gserviceaccount.com]
-----> Starting Kitchen (v1.24.0)
-----> Creating <multiple-buckets-default>...
Terraform v0.12.12
+ provider.google v3.10.0
Your version of Terraform is out of date! The latest version
is 0.12.21. You can update by downloading from www.terraform.io/downloads.html
$$$$$$ Running command `terraform init -input=false -lock=true -lock-timeout=0s -upgrade -force-copy -backend=true -get=true -get-plugins=true -verify-plugins=true` in directory /workspace/test/fi
xtures/multiple_buckets
Upgrading modules...
- example in ../../../examples/multiple_buckets
- example.cloud_storage in ../../..
Initializing the backend...
Initializing provider plugins...
- Checking for available provider plugins...
- Downloading plugin for provider "google" (hashicorp/google) 2.18.1...
- Downloading plugin for provider "random" (hashicorp/random) 2.2.1...
Terraform has been successfully initialized!
$$$$$$ Running command `terraform workspace select kitchen-terraform-multiple-buckets-default` in directory /workspace/test/fixtures/multiple_buckets
Finished creating <multiple-buckets-default> (0m11.01s).
-----> Kitchen is finished. (0m12.62s)
- উদাহরণ মডিউল প্রয়োগ করতে
kitchen_do converge <EXAMPLE_NAME>
চালান।
এই ধাপটি টেরাফর্ম ওয়ার্কস্পেসকে প্রযোজ্য করে যা পূর্ববর্তী ধাপে তৈরি করা হয়েছিল কোডল্যাবে আগে তৈরি করা GCP প্রকল্পে।
আপনি আপনার টার্মিনালে নীচের আউটপুট দেখতে পাবেন।
[root@<CONTAINER_ID> workspace]# kitchen_do converge multiple-buckets-default
Automatically setting inputs from outputs of test/setup
Found test/source.sh. Using it for additional explicit environment configuration.
Activated service account credentials for: [cft@<YOUR_PROJECT_ID>.iam.gserviceaccount.com]
-----> Starting Kitchen (v1.24.0)
-----> Converging <multiple-buckets-default>...
Terraform v0.12.20
+ provider.google v3.9.0
Your version of Terraform is out of date! The latest version
is 0.12.21. You can update by downloading from https://www.terraform.io/downloads.html
$$$$$$ Running command `terraform workspace select kitchen-terraform-multiple-buckets-default` in directory /workspace/test/fixtures/multiple_buckets
$$$$$$ Running command `terraform get -update` in directory /workspace/test/fixtures/multiple_buckets
- example in ../../../examples/multiple_buckets
- example.cloud_storage in ../../..
$$$$$$ Running command `terraform validate ` in directory /workspace/test/fixtures/multiple_buckets
Success! The configuration is valid.
$$$$$$ Running command `terraform apply -lock=true -lock-timeout=0s -input=false -auto-approve=true -parallelism=10 -refresh=true ` in directory /workspace/test/fixtures/multiple_buckets
random_pet.main: Creating...
random_pet.main: Creation complete after 0s [id=<BUCKET-ID>]
module.example.module.cloud_storage.google_storage_bucket.buckets[0]: Creating...
module.example.module.cloud_storage.google_storage_bucket.buckets[1]: Creating...
module.example.module.cloud_storage.google_storage_bucket.buckets[1]: Creation complete after 3s [id=<BUCKET-ID-01>]
module.example.module.cloud_storage.google_storage_bucket.buckets[0]: Creation complete after 3s [id=<BUCKET-ID-02>]
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Outputs:
names = {
"one" = "<BUCKET-ID-01>"
"two" = "<BUCKET-ID-02>"
}
names_list = [
"<BUCKET-NAME-01>",
"<BUCKET-NAME-02>",
]
project_id = ci-cloud-storage-ae79
Finished converging <multiple-buckets-default> (0m7.17s).
-----> Kitchen is finished. (0m8.77s)
- উদাহরণ মডিউল পরীক্ষা করার জন্য
kitchen_do verify <EXAMPLE_NAME>
চালান।
এই ধাপটি gsutils.rb ফাইলের মাধ্যমে চালানো হবে যাতে একাধিক_বাকেট মডিউলের পরীক্ষা রয়েছে। প্রতিটি পরীক্ষায় একটি gsutil কমান্ড থাকে যা পরিষেবা অ্যাকাউন্ট শংসাপত্র সেটআপ ব্যবহার করে আপনি আগে তৈরি করা পরীক্ষা প্রকল্পের বিরুদ্ধে চালানো হবে।
আপনি যদি কোনো ত্রুটি পান, আপনি দেখতে পাবেন কী প্রত্যাশিত ছিল এবং পরীক্ষার জন্য কমান্ড দ্বারা কী প্রাপ্ত হয়েছিল।
আপনি আপনার টার্মিনালে নীচের আউটপুট দেখতে পাবেন।
multiple_buckets local: Verifying
Profile: multiple_buckets
Version: (not specified)
Target: local://
✔ gsutil: gsutil
✔ Command: `gsutil ls -p <PROJECT_ID>` exit_status should eq 0
✔ Command: `gsutil ls -p <PROJECT_ID>` stderr should eq ""
✔ Command: `gsutil ls -p <PROJECT_ID>` stdout should include "multiple-buckets-mzgy-eu-one"
✔ Command: `gsutil ls -p <PROJECT_ID>` stdout should include "<BUCKET-ID-01>"
✔ Command: `gsutil bucketpolicyonly get gs://<BUCKET-ID-01>` exit_status should eq 0
✔ Command: `gsutil bucketpolicyonly get gs://<BUCKET-ID-01>` stderr should eq ""
✔ Command: `gsutil bucketpolicyonly get gs://<BUCKET-ID-01>` stdout should include "Enabled: True"
✔ Command: `gsutil bucketpolicyonly get gs://<BUCKET-ID-02>` exit_status should eq 0
✔ Command: `gsutil bucketpolicyonly get gs://<BUCKET-ID-02>` stderr should eq ""
✔ Command: `gsutil bucketpolicyonly get gs://<BUCKET-ID-02>` stdout should include "Enabled: False"
✔ Command: `gsutil label get gs://<BUCKET-ID-01>` exit_status should eq 0
✔ Command: `gsutil label get gs://<BUCKET-ID-01>` stderr should eq ""
✔ Command: `gsutil label get gs://<BUCKET-ID-01>` bucket_1 has label
✔ Command: `gsutil label get gs://<BUCKET-ID-02>` exit_status should eq 0
✔ Command: `gsutil label get gs://<BUCKET-ID-02>` stderr should eq ""
✔ Command: `gsutil label get gs://<BUCKET-ID-02>` bucket_2 has label
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-01>` should eq "NEARLINE"
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-01>` should eq "SetStorageClass"
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-01>` should eq 10
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-01>` should eq false
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-01>` should eq ["MULTI_REGIONAL", "STANDARD", "DURABLE_REDUCED_AVAILABILITY"]
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-01>` exit_status should eq 0
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-01>` stderr should eq ""
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-02>` should eq "NEARLINE"
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-02>` should eq "SetStorageClass"
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-02>` should eq 10
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-02>` should eq false
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-02>` should eq ["MULTI_REGIONAL", "STANDARD", "DURABLE_REDUCED_AVAILABILITY"]
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-02>` exit_status should eq 0
✔ Command: `gsutil lifecycle get gs://<BUCKET-ID-02>` stderr should eq ""
Profile Summary: 1 successful control, 0 control failures, 0 controls skipped
Test Summary: 30 successful, 0 failures, 0 skipped
Finished verifying <multiple-buckets-default> (0m8.83s).
-----> Kitchen is finished. (0m16.61s)
- উদাহরণ মডিউল অবস্থা ধ্বংস করতে
kitchen_do destroy <EXAMPLE_NAME>
চালান।
এই ধাপটি উপরের ধাপে আপনার তৈরি করা ওয়ার্কস্পেসটিকে ধ্বংস করে দেয়। এই পদক্ষেপটি আপনি GCS মডিউলে যে লেবেলটি যুক্ত করেছেন তার সাথে প্রকল্পে তৈরি করা GCS বালতিগুলিকেও ধ্বংস করবে।
আপনি আপনার টার্মিনালে নীচের আউটপুট দেখতে পারেন।
[root@<CONTAINER_ID> workspace]# kitchen_do destroy multiple-buckets-default
Automatically setting inputs from outputs of test/setup
Found test/source.sh. Using it for additional explicit environment configuration.
Activated service account credentials for: [ci-cloud-storage@ci-cloud-storage-54ab.iam.gserviceaccount.com]
-----> Starting Kitchen (v1.24.0)
-----> Destroying <multiple-buckets-default>...
Terraform v0.12.12
+ provider.google v3.10.0
Your version of Terraform is out of date! The latest version
is 0.12.21. You can update by downloading from www.terraform.io/downloads.html
$$$$$$ Running command `terraform init -input=false -lock=true -lock-timeout=0s -force-copy -backend=true -get=true -get-plugins=true -verify-plugins=true` in directory /workspace/test/fixtures/mu
ltiple_buckets
Initializing modules...
Initializing the backend...
Initializing provider plugins...
Terraform has been successfully initialized!
$$$$$$ Running command `terraform workspace select kitchen-terraform-multiple-buckets-default` in directory /workspace/test/fixtures/multiple_buckets
$$$$$$ Running command `terraform destroy -auto-approve -lock=true -lock-timeout=0s -input=false -parallelism=10 -refresh=true ` in directory /workspace/test/fixtures/multiple_buckets
random_string.prefix: Refreshing state... [id=mzgy]
module.example.module.cloud_storage.google_storage_bucket.buckets[0]: Refreshing state... [id=<BUCKET-ID-01>]
module.example.module.cloud_storage.google_storage_bucket.buckets[1]: Refreshing state... [id=<BUCKET-ID-02>]
module.example.module.cloud_storage.google_storage_bucket.buckets[0]: Destroying... [id=<BUCKET-ID-01>]
module.example.module.cloud_storage.google_storage_bucket.buckets[1]: Destroying... [id=<BUCKET-ID-02>]
module.example.module.cloud_storage.google_storage_bucket.buckets[0]: Destruction complete after 1s
module.example.module.cloud_storage.google_storage_bucket.buckets[1]: Destruction complete after 2s
random_string.prefix: Destroying... [id=mzgy]
random_string.prefix: Destruction complete after 0s
Destroy complete! Resources: 3 destroyed.
$$$$$$ Running command `terraform workspace select default` in directory /workspace/test/fixtures/multiple_buckets
Switched to workspace "default".
$$$$$$ Running command `terraform workspace delete kitchen-terraform-multiple-buckets-default` in directory /workspace/test/fixtures/multiple_buckets
Deleted workspace "kitchen-terraform-multiple-buckets-default"!
Finished destroying <multiple-buckets-default> (0m6.49s).
-----> Kitchen is finished. (0m8.10s)
9. ইনপুট এবং আউটপুটগুলির জন্য ডকুমেন্টেশন তৈরি করা
রুট মডিউল, সাবমডিউল এবং উদাহরণ মডিউলের README তে ইনপুট এবং আউটপুট টেবিলগুলি স্বয়ংক্রিয়ভাবে সংশ্লিষ্ট মডিউলগুলির variables
এবং outputs
উপর ভিত্তি করে তৈরি হয়। মডিউল ইন্টারফেস পরিবর্তন করা হলে এই টেবিলগুলি অবশ্যই রিফ্রেশ করা উচিত।
চালান:
make generate_docs
# This will generate new Inputs and Outputs tables
10. CFT এ লিন্ট পরীক্ষা চালান
একটি লিন্টার হল এমন একটি টুল যা প্রোগ্রামিং ত্রুটি, বাগ, শৈলীগত ত্রুটি এবং সন্দেহজনক নির্মাণগুলিকে ফ্ল্যাগ করার জন্য সোর্স কোড বিশ্লেষণ করে।
রিপোজিটরির অনেক ফাইল মানের মান বজায় রাখতে লিন্টেড বা ফরম্যাট করা যেতে পারে। সিএফটি-তে গুণমান নিশ্চিত করতে, আপনি একটি লিন্ট পরীক্ষা ব্যবহার করবেন।
চালান:
make docker_test_lint
# This will run all lint tests on your repo
11. Github-এ PR জমা দেওয়া
এখন আপনি স্থানীয়ভাবে আপনার কোড পরিবর্তন করেছেন এবং ইন্টিগ্রেশন পরীক্ষার মাধ্যমে এটি পরীক্ষা করেছেন আপনি এই কোডটি মাস্টার রেপোতে প্রকাশ করতে চান।
আপনার কোডটি মাস্টার রেপোতে উপলব্ধ করতে, আপনাকে আপনার শাখায় কোড পরিবর্তন করতে হবে এবং এটিকে মাস্টার সংগ্রহস্থলে ঠেলে দিতে হবে। আপনার কোড মূল রেপোতে যোগ করার জন্য যেটি আপনি কোডল্যাবের শুরুতে কাঁটা দিয়েছিলেন, আপনি আপনার রেপোতে কোড দেওয়ার পরে মাস্টার রেপোতে একটি পুল অনুরোধ (PR) উত্থাপন করবেন।
আপনি যখন PR বাড়াবেন, প্রস্তাবিত কোড পরিবর্তনগুলি পর্যালোচনা করার জন্য রেপো অ্যাডমিনকে অবহিত করা হবে। উপরন্তু, আপনি আপনার কোড পরিবর্তনের প্রতিক্রিয়া পেতে অন্যান্য ব্যবহারকারীদেরও পর্যালোচক হিসেবে যোগ করতে পারেন। পিআর একটি ক্লাউড বিল্ডকে ট্রিগার করবে যা রেপোতে পরীক্ষা চালাবে।
আপনার কোড পরিবর্তনের উপর ভিত্তি করে, কোড পর্যালোচকরা আপনার কোডের উপর মন্তব্য প্রদান করবে এবং সর্বোত্তম অনুশীলন এবং ডকুমেন্টেশনের উপর ভিত্তি করে কিছু পরিবর্তন করার প্রয়োজন হলে পরিবর্তনের জন্য বলবে। প্রশাসক আপনার কোড পরিবর্তনগুলি পর্যালোচনা করবেন, আপনার কোড রেপোর সাথে সঙ্গতিপূর্ণ কিনা তা নিশ্চিত করুন এবং আপনার কোড মাস্টার রেপোতে মার্জ করার আগে আপনাকে আবার কিছু পরিবর্তন করার জন্য অনুরোধ করতে পারে।
আপনার কাঁটাযুক্ত শাখায় কোড কমিট করার জন্য নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন এবং আপনার কাঁটাযুক্ত শাখায় কোড পুশ করুন:
- প্রথম ধাপ হল স্থানীয় রেপোতে পরিবর্তিত ফাইল যোগ করা।
$ 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/controls/gsutil.rb
# 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
- আপনার ফাইলগুলি এখন মঞ্চস্থ করা হয়েছে, পরবর্তীতে আপনি পরিবর্তনগুলি কমিট করবেন৷
$ 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.
- একটি পুল রিকোয়েস্ট (পিআর) তৈরি করার জন্য আপনার স্থানীয় সংগ্রহস্থলে প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলিকে গিটহাবে পুশ করুন।
$ git push -u origin master
# Pushes the changes in your local repository up to the remote
# repository you specified as the origin
আপনার কোড পরিবর্তন এখন একটি টান অনুরোধের জন্য প্রস্তুত!
terraform-google-modules/terraform-google-cloud-storage repo- তে PR বাড়াতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন :
- আপনার ওয়েব ব্রাউজারে, রেপোর মূল পৃষ্ঠায় নেভিগেট করুন।
- শাখা মেনুতে, আপনার কাঁটা বেছে নিন যাতে আপনার কমিট রয়েছে।
- "শাখা" মেনুর ডানদিকে, "নতুন টান অনুরোধ" ক্লিক করুন।
- আপনি যে শাখায় আপনার পরিবর্তনগুলিকে একত্রিত করতে চান সেটি নির্বাচন করতে বেস "বেস" ড্রপডাউন মেনু ব্যবহার করুন, সাধারণত এটি "মাস্টার" শাখা, যেহেতু আপনি আপনার কাঁটায় কোড পরিবর্তন করেছেন।
- আপনার কোড পরিবর্তনগুলি বর্ণনা করতে আপনার পুল অনুরোধের জন্য একটি শিরোনাম এবং বিবরণ লিখুন৷ সংক্ষিপ্ত হওয়ার সময় যতটা সম্ভব নির্দিষ্ট হন।
- পর্যালোচনার জন্য প্রস্তুত একটি পুল অনুরোধ তৈরি করতে, "পুল অনুরোধ তৈরি করুন" এ ক্লিক করুন।
- আপনি দেখতে পাবেন ক্লাউড বিল্ড ট্রিগার চলছে যা PR এর কারণে ট্রিগার হয়েছে।
আপনি আপনার কাঁটাযুক্ত শাখায় আপনার প্রথম কোড পরিবর্তনটি সফলভাবে পুশ করেছেন এবং আপনার প্রথম CFT PR মাস্টার শাখার বিরুদ্ধে উত্থাপন করেছেন!
12. অভিনন্দন
অভিনন্দন, আপনি সফলভাবে একটি CFT মডিউলে একটি বৈশিষ্ট্য যোগ করেছেন এবং পর্যালোচনার জন্য একটি PR জমা দিয়েছেন!
আপনি একটি CFT মডিউলে একটি বৈশিষ্ট্য যুক্ত করেছেন, একটি উদাহরণের মাধ্যমে এটি স্থানীয়ভাবে পরীক্ষা করেছেন এবং আপনার কোড GitHub এ কমিট করার আগে পরীক্ষা করেছেন। অবশেষে, আপনি পর্যালোচনার জন্য একটি PR উত্থাপন করেছেন এবং CFT-এ চূড়ান্ত একত্রীকরণ করেছেন।
আপনি এখন ক্লাউড ফাউন্ডেশন টুলকিটের সাথে শুরু করার গুরুত্বপূর্ণ পদক্ষেপগুলি জানেন৷