১. উদ্দেশ্যসমূহ
এই টিউটোরিয়ালে আপনি preview, canary এবং prod নামে তিনটি GKE ক্লাস্টার তৈরি করবেন। এরপর, প্রতিটি ক্লাস্টারের জন্য একটি করে Cloud Deploy টার্গেট এবং একটি Cloud Deploy পাইপলাইন তৈরি করবেন, যা ঐ টার্গেটগুলোতে ডেপ্লয়মেন্ট সম্পন্ন করার ধাপগুলোর ক্রম নির্ধারণ করবে।
ডেপ্লয়মেন্ট ফ্লোটি একটি ক্লাউডবিল্ড পাইপলাইন দ্বারা ট্রিগার করা হবে, যা ক্লাউড ডেপ্লয় রিলিজ তৈরি করবে এবং প্রিভিউ ক্লাস্টারে ডেপ্লয়মেন্ট সম্পন্ন করবে। প্রিভিউতে ডেপ্লয়মেন্ট সফল হয়েছে এবং প্রত্যাশা অনুযায়ী কাজ করছে, তা যাচাই করার পর, আপনি ক্যানারি ক্লাস্টারে ম্যানুয়ালি রিলিজটি প্রমোট করবেন। প্রোড ক্লাস্টারে রিলিজ প্রমোট করার জন্য অনুমোদনের প্রয়োজন হবে; আপনি ক্লাউড ডেপ্লয় UI-তে প্রোড পাইপলাইনটি অনুমোদন করবেন এবং সবশেষে এটি প্রমোট করবেন।
এই টিউটোরিয়ালের উদ্দেশ্যগুলোকে নিম্নলিখিত ধাপগুলোতে ভাগ করা যায়:
- আপনার কর্মক্ষেত্র প্রস্তুত করুন
- ক্লাউড ডিপ্লয় টার্গেটগুলি সংজ্ঞায়িত করুন
- ক্লাউড ডিপ্লয় পাইপলাইন সংজ্ঞায়িত করুন
- একটি রিলিজ তৈরি করুন
- একটি মোতায়েন প্রচার করুন
- একটি প্রোডাকশন রিলিজ অনুমোদন করুন
স্ব-গতিতে পরিবেশ সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না, এবং আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে প্রজেক্ট আইডি অবশ্যই অনন্য হতে হবে এবং এটি অপরিবর্তনীয় (একবার সেট করার পর পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এবং এটি সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়), তাই যদি এটি আপনার পছন্দ না হয়, তবে এলোমেলোভাবে অন্য একটি তৈরি করুন, অথবা, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এরপর প্রজেক্ট তৈরি হয়ে গেলে এটি "স্থির" হয়ে যায়। - তৃতীয় আরেকটি ভ্যালু আছে, যা হলো প্রজেক্ট নম্বর এবং কিছু এপিআই এটি ব্যবহার করে। এই তিনটি ভ্যালু সম্পর্কে আরও জানতে ডকুমেন্টেশন দেখুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে কোডল্যাবের শেষে দেওয়া যেকোনো "ক্লিন-আপ" নির্দেশাবলী অনুসরণ করুন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
২. প্ল্যাটফর্ম সেটআপ
আপনার কর্মক্ষেত্র প্রস্তুত করা
এই টিউটোরিয়ালটি চালানোর জন্য প্রয়োজনীয় পরিবেশ আমরা এখানে প্রস্তুত করব। এই ধাপটি সম্পন্ন হলে, একটি GKE ক্লাস্টার তৈরি হয়ে যাবে যেখানে আমরা ডেপ্লয়মেন্টগুলো চালাতে পারব।
- gcloud কনফিগের ডিফল্ট মান সেট করুন
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- ক্লোন রিপো
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- পরিবেশ ভেরিয়েবল সেট করুন
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- এপিআই সক্ষম করুন
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- GKE ক্লাস্টার তৈরি করুন
`gcloud container clusters create preview \`
--zone=us-central1-a --async
`gcloud container clusters create canary \`
--zone=us-central1-b --async
`gcloud container clusters create prod \`
--zone=us-central1-c
ক্লাউড ডিপ্লয় টার্গেট নির্ধারণ করা
- ক্লাউডশেলে নিম্নলিখিত কমান্ডটি ব্যবহার করে deploy ডিরেক্টরিতে preview.yaml নামের একটি ফাইল তৈরি করুন:
cat <<EOF >deploy/preview.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: preview
annotations: {}
labels: {}
description: Target for preview environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview
EOF
As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
- ক্লাউডশেলে নিম্নলিখিত কমান্ডটি ব্যবহার করে deploy ডিরেক্টরিতে canary.yaml নামের একটি ফাইল তৈরি করুন:
cat <<EOF >deploy/canary.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: canary
annotations: {}
labels: {}
description: Target for canary environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary
EOF
- ক্লাউডশেলে নিম্নলিখিত কমান্ডটি ব্যবহার করে deploy ডিরেক্টরিতে prod.yaml নামের একটি ফাইল তৈরি করুন:
cat <<EOF >deploy/prod.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
annotations: {}
labels: {}
description: Target for prod environment
requireApproval: true
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod
EOF
`requireApproval` ট্যাগটি লক্ষ্য করুন, যা `true` সেট করা আছে। অনুমোদন না দেওয়া পর্যন্ত এটি `prod` টার্গেটে প্রমোশন করতে দেবে না। একটি রিলিজ অনুমোদন করার জন্য আপনার `roles/clouddeploy.approver` রোলের প্রয়োজন।
- ডিপ্লয় টার্গেট তৈরি করুন
`gcloud config set deploy/region us-central1`
gcloud beta deploy apply --file deploy/preview.yaml
gcloud beta deploy apply --file deploy/canary.yaml
gcloud beta deploy apply --file deploy/prod.yaml
৩. অ্যাপ তৈরি
একটি নতুন অ্যাপ্লিকেশন তৈরির অংশ হিসেবে, স্বয়ংক্রিয় বিল্ড, ইন্টিগ্রেশন টেস্টিং এবং ডিপ্লয়মেন্ট সম্পাদনের জন্য সাধারণত সিআইসিডি (CICD) পাইপলাইন সেটআপ করা হয়। নিম্নলিখিত ধাপগুলো একটি নতুন অ্যাপের সেটআপ প্রক্রিয়ার অংশ হিসেবে বিবেচিত হয়। প্রতিটি নতুন অ্যাপ্লিকেশনের জন্য একটি ডিপ্লয়মেন্ট পাইপলাইন কনফিগার করা থাকবে।
ক্লাউড ডিপ্লয় পাইপলাইন সংজ্ঞায়িত করা
- ক্লাউডশেলে নিম্নলিখিত কমান্ডটি ব্যবহার করে deploy ডিরেক্টরিতে pipeline.yaml নামের একটি ফাইল তৈরি করুন:
cat <<EOF >>deploy/pipeline.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: DeliveryPipeline
metadata:
name: sample-app
labels:
`app: sample-app`
description: delivery pipeline
serialPipeline:
stages:
- targetId: preview
`profiles:`
`- preview`
- targetId: canary
`profiles:`
`- canary`
- targetId: prod
`profiles:`
`- prod`
EOF
As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.
serialPipeline ট্যাগের মধ্যে stages নামের একটি ট্যাগ থাকে, যা সেই সমস্ত টার্গেটের একটি তালিকা যেখানে এই ডেলিভারি পাইপলাইনটি ডিপ্লয় করার জন্য কনফিগার করা হয়েছে।
targetId ডেলিভারি পাইপলাইনের এই পর্যায়ের জন্য ব্যবহৃত নির্দিষ্ট টার্গেটকে শনাক্ত করে। এর মান হলো টার্গেট ডেফিনিশনের metadata.name প্রপার্টি।
profiles হলো skaffold.yaml থেকে নেওয়া শূন্য বা তার বেশি সংখ্যক Skaffold প্রোফাইলের নামের একটি তালিকা। Cloud Deploy রিলিজ তৈরি করার সময় skaffold রেন্ডারের সাথে এই প্রোফাইলটি ব্যবহার করে।
- পাইপলাইন প্রয়োগ করুন
gcloud beta deploy apply --file deploy/pipeline.yaml
৪. উন্নয়ন পর্যায়
অ্যাপ্লিকেশনগুলো তৈরি হওয়ার সাথে সাথে স্বয়ংক্রিয় CICD টুলচেইনগুলো অ্যাসেট তৈরি ও সংরক্ষণ করবে। skaffold ব্যবহার করে অ্যাপ্লিকেশনটি বিল্ড করতে এবং Cloud Deploy-এর মাধ্যমে ডেপ্লয়মেন্টের জন্য অ্যাসেট সংরক্ষণ করতে নিম্নলিখিত কমান্ডগুলো চালানো হয়। প্রতিটি অ্যাপ্লিকেশন বিল্ডের জন্য আপনার CICD প্রসেস এই ধাপটি সম্পাদন করবে।
- skaffold দিয়ে অ্যাপ্লিকেশনটি তৈরি ও সংরক্ষণ করুন
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
৫. মুক্তির পর্যায়
আপনার CICD প্রক্রিয়ার শেষে, সাধারণত যখন কোডটি প্রোডাকশনের জন্য ট্যাগ করা হয়, তখন আপনি cloud deploy release কমান্ডটি কল করে রিলিজ প্রক্রিয়া শুরু করবেন। পরবর্তীতে, ডেপ্লয়মেন্টটি যাচাই এবং অনুমোদিত হয়ে গেলে, আপনি স্বয়ংক্রিয় প্রক্রিয়া বা ম্যানুয়াল অনুমোদনের মাধ্যমে অ্যাকশনটিকে প্রমোট ও অনুমোদন করে বিভিন্ন টার্গেট এনভায়রনমেন্টে রিলিজটি স্থানান্তর করবেন।
একটি রিলিজ তৈরি করা
ক্লাউড ডিপ্লয় কীভাবে কাজ করে সে সম্পর্কে ধারণা পেতে আমরা এই টিউটোরিয়ালের শুরুতে ক্লাউড ডিপ্লয় ফাইল তৈরি করেছিলাম। ডেমোর উদ্দেশ্যে, আমরা সেই একই ক্লাউড ডিপ্লয় ফাইলগুলো তৈরি করে একটি নমুনা গো অ্যাপ্লিকেশনসহ একটি গিটহাব রিপোজিটরিতে পুশ করেছি এবং সেই অ্যাপ্লিকেশনটি রিলিজ করার জন্য ক্লাউড ডিপ্লয় ব্যবহার করব।
export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud beta deploy releases create \
sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--description="Release demo" \
--build-artifacts=artifacts.json \
--annotations="release-id=rel-${REL_TIMESTAMP}"
প্রকাশনাটি পর্যালোচনা করুন
যখন একটি ক্লাউড ডিপ্লয় রিলিজ তৈরি করা হয়, তখন এটি স্বয়ংক্রিয়ভাবে প্রথম টার্গেট অর্থাৎ প্রিভিউতে রোল আউট হয়ে যায়।
- গুগল ক্লাউড কনসোলে <ক্লাউড ডিপ্লয়>-এ যান
- 'sample-app'-এ ক্লিক করুন
এই স্ক্রিনে আপনি আপনার পাইপলাইনের একটি গ্রাফিক উপস্থাপনা দেখতে পাবেন।
- প্রিভিউ বক্সের বাম দিকে একটি সবুজ আউটলাইন নিশ্চিত করুন, যার অর্থ হলো রিলিজটি সেই এনভায়রনমেন্টে ডেপ্লয় করা হয়েছে।
- ঐচ্ছিকভাবে, স্ক্রিনের নিচের অংশে থাকা 'রিলিজ ডিটেইলস'-এর অধীনে রিলিজের নামের উপর ক্লিক করে রিলিজটি সম্পর্কে অতিরিক্ত বিবরণ পর্যালোচনা করুন।
- রিলিজটি অ্যাপ্লিকেশনটি সফলভাবে ডেপ্লয় করেছে কিনা তা যাচাই করতে, cloushel-এ নিম্নলিখিত কমান্ডটি চালান।
gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- স্ক্রিনের উপরের ডানদিকে থাকা ওয়েব প্রিভিউ আইকনটিতে ক্লিক করুন।
- পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন
এটি আপনাকে একটি নতুন পৃষ্ঠায় নিয়ে যাবে যেখানে "হ্যালো ওয়ার্ল্ড!" বার্তাটি দেখানো হবে।
- পোর্ট-ফরোয়ার্ডিং বন্ধ করতে টার্মিনালে
ctrl+cব্যবহার করুন।
একটি রিলিজের প্রচার
এখন যেহেতু আপনার রিলিজটি পাইপলাইনের প্রথম টার্গেটে (প্রিভিউ) ডেপ্লয় করা হয়েছে, আপনি এটিকে পরবর্তী টার্গেটে (ক্যানারি) উন্নীত করতে পারেন। প্রক্রিয়াটি শুরু করতে নিম্নলিখিত কমান্ডটি চালান।
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
রিলিজ প্রচার পর্যালোচনা করুন
- গুগল ক্লাউড কনসোলে স্যাম্পল-অ্যাপ পাইপলাইনে যান
- ক্যানারি বক্সের বাম দিকে একটি সবুজ আউটলাইন নিশ্চিত করুন, যার অর্থ হলো রিলিজটি সেই এনভায়রনমেন্টে ডেপ্লয় করা হয়েছে।
- অ্যাপ্লিকেশনটিতে একটি টানেল তৈরি করে এটি সঠিকভাবে স্থাপন করা হয়েছে কিনা তা যাচাই করুন।
gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- স্ক্রিনের উপরের ডানদিকে থাকা ওয়েব প্রিভিউ আইকনটিতে ক্লিক করুন।
- পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন
এটি আপনাকে একটি নতুন পৃষ্ঠায় নিয়ে যাবে যেখানে "হ্যালো ওয়ার্ল্ড!" বার্তাটি দেখানো হবে।
- পোর্ট-ফরোয়ার্ডিং বন্ধ করতে টার্মিনালে
ctrl+cব্যবহার করুন।
একটি প্রোডাকশন রিলিজ অনুমোদন করা
মনে আছে, যখন আমরা prod.yaml-এর মাধ্যমে prod টার্গেট তৈরি করেছিলাম, তখন আমরা requireApproval ট্যাগটিকে true হিসেবে নির্দিষ্ট করে দিয়েছিলাম। এর ফলে prod-এ প্রমোশনের জন্য অনুমোদনের একটি আবশ্যকতা তৈরি হবে।
- নিম্নলিখিত কমান্ডের সাহায্যে ক্যানারি রিলিজটিকে প্রোডাকশনে উন্নীত করুন।
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- গুগল ক্লাউড কনসোলে স্যাম্পল-অ্যাপ পাইপলাইনে যান
- '১টি অপেক্ষমান' লেখা হলুদ নির্দেশকটি লক্ষ্য করুন।
এই বার্তাটি নির্দেশ করে যে প্রোডাকশনে স্থাপনের জন্য একটি রিলিজ সারিবদ্ধ করা আছে, কিন্তু এর জন্য পর্যালোচনা ও অনুমোদনের প্রয়োজন।
- হলুদ বিজ্ঞপ্তিটির ঠিক নিচে থাকা 'রিভিউ' বোতামটিতে ক্লিক করুন।
- পরবর্তী স্ক্রিনে, প্রোডাকশনের অনুমোদন স্ক্রিনে প্রবেশ করতে আবার "রিভিউ" বাটনে ক্লিক করুন।
- ঐচ্ছিকভাবে পরিবর্তনগুলো পর্যালোচনা করতে ম্যানিফেস্ট ডিফ (Manifest Diff) দেখুন। এক্ষেত্রে এটি একটি সম্পূর্ণ নতুন ফাইল।
- 'অনুমোদন' বোতামে ক্লিক করুন
- স্যাম্পল-অ্যাপ পাইপলাইন পৃষ্ঠায় ফিরে যান, যেখানে আপনি প্রোডাকশনে রিলিজের প্রক্রিয়াটি দেখতে পাবেন।
প্রোডাকশন রিলিজ পর্যালোচনা করুন
অন্যান্য পরিবেশের মতোই, ডেপ্লয়মেন্ট সম্পন্ন হলে আপনি নিচের ধাপগুলো অনুসরণ করে তা পর্যালোচনা করতে পারবেন।
- পোর্ট-ফরোয়ার্ড তৈরি করতে ক্লাউডশেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- স্ক্রিনের উপরের ডানদিকে থাকা ওয়েব প্রিভিউ আইকনটিতে ক্লিক করুন।
- পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন
এটি আপনাকে একটি নতুন পৃষ্ঠায় নিয়ে যাবে যেখানে "হ্যালো ওয়ার্ল্ড!" বার্তাটি দেখানো হবে।
- পোর্ট-ফরোয়ার্ডিং বন্ধ করতে টার্মিনালে
ctrl+cব্যবহার করুন।