1. উদ্দেশ্য
এই টিউটোরিয়ালে আপনি প্রিভিউ, ক্যানারি এবং প্রোড নামে তিনটি GKE ক্লাস্টার তৈরি করবেন। তারপরে, প্রতিটি ক্লাস্টারের সাথে সম্পর্কিত একটি ক্লাউড ডিপ্লোয় টার্গেট তৈরি করুন এবং একটি ক্লাউড ডিপ্লোয় পাইপলাইন তৈরি করুন যা সেই লক্ষ্যগুলিতে স্থাপনা সম্পাদনের পদক্ষেপগুলির ক্রম নির্ধারণ করবে৷
স্থাপনার প্রবাহ একটি ক্লাউডবিল্ড পাইপলাইন দ্বারা ট্রিগার করা হবে যা ক্লাউড ডিপ্লয় রিলিজ তৈরি করবে এবং প্রিভিউ ক্লাস্টারে স্থাপনা সম্পাদন করবে। আপনি যাচাই করার পরে যে প্রিভিউতে স্থাপনা সফল হয়েছে এবং প্রত্যাশিতভাবে কাজ করছে, আপনি ম্যানুয়ালি ক্যানারি ক্লাস্টারে প্রকাশের প্রচার করবেন। প্রোড ক্লাস্টারে প্রকাশের প্রচারের জন্য অনুমোদনের প্রয়োজন হবে, আপনি ক্লাউড ডিপ্লোয় UI-তে প্রোড পাইপলাইন অনুমোদন করবেন এবং অবশেষে এটিকে প্রচার করবেন।
এই টিউটোরিয়ালের উদ্দেশ্যগুলিকে নিম্নলিখিত ধাপে ভাগ করা যেতে পারে:
- আপনার কর্মক্ষেত্র প্রস্তুত করুন
- ক্লাউড স্থাপনার লক্ষ্য নির্ধারণ করুন
- ক্লাউড ডিপ্লয় পাইপলাইন সংজ্ঞায়িত করুন
- একটি রিলিজ তৈরি করুন
- একটি স্থাপনার প্রচার করুন
- একটি উত্পাদন রিলিজ অনুমোদন
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।
- প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না এবং আপনি যে কোনো সময় এটি আপডেট করতে পারেন।
- সমস্ত Google ক্লাউড প্রজেক্ট জুড়ে প্রোজেক্ট আইডি অবশ্যই অনন্য হতে হবে এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এবং এটি সাধারণত
PROJECT_ID
হিসাবে চিহ্নিত করা হয়), তাই আপনি যদি এটি পছন্দ না করেন তবে অন্য একটি এলোমেলো তৈরি করুন, অথবা, আপনি নিজের চেষ্টা করে দেখতে পারেন এটি উপলব্ধ কিনা। তারপর প্রকল্প তৈরি হওয়ার পরে এটি "হিমায়িত" হয়। - একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন, কোডল্যাবের শেষে পাওয়া যেকোনো "ক্লিন-আপ" নির্দেশাবলী অনুসরণ করুন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
2. প্ল্যাটফর্ম সেটআপ
আপনার কর্মক্ষেত্র প্রস্তুত করা হচ্ছে
এই টিউটোরিয়ালটি চালানোর জন্য আমরা এখানে আমাদের পরিবেশ স্থাপন করব। এই ধাপটি সম্পন্ন হলে, আমাদের একটি 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
ক্লাউড স্থাপনার লক্ষ্য নির্ধারণ করা
- ক্লাউডশেলে নিম্নলিখিত কমান্ড সহ 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.
- ক্লাউডশেলে নিম্নলিখিত কমান্ড দিয়ে 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
- ক্লাউডশেলে নিম্নলিখিত কমান্ড দিয়ে 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
ট্যাগটি লক্ষ্য করুন যেটি সত্য হিসাবে সেট করা আছে। অনুমোদন না দেওয়া পর্যন্ত এটি পণ্য লক্ষ্যে প্রচারের অনুমতি দেবে না। একটি রিলিজ অনুমোদন করার জন্য আপনার ভূমিকা/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
3. অ্যাপ তৈরি
একটি নতুন অ্যাপ্লিকেশন তৈরির অংশ হিসাবে CICD পাইপলাইনটি সাধারণত স্বয়ংক্রিয় বিল্ড, ইন্টিগ্রেশন টেস্টিং এবং স্থাপনার জন্য সেটআপ করা হয়। নিম্নলিখিত পদক্ষেপগুলি একটি নতুন অ্যাপের জন্য সেটআপ প্রক্রিয়ার অংশ হিসাবে বিবেচিত হয়৷ প্রতিটি নতুন অ্যাপ্লিকেশনে একটি স্থাপনার পাইপলাইন কনফিগার করা থাকবে।
ক্লাউড ডিপ্লয় পাইপলাইন সংজ্ঞায়িত করা
- ক্লাউডশেলে নিম্নলিখিত কমান্ড দিয়ে 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
ট্যাগে স্টেজ নামে একটি ট্যাগ রয়েছে যা এই ডেলিভারি পাইপলাইনটি স্থাপন করার জন্য কনফিগার করা হয়েছে এমন সমস্ত লক্ষ্যগুলির একটি তালিকা।
targetId
ডেলিভারি পাইপলাইনের এই পর্যায়ে ব্যবহারের জন্য নির্দিষ্ট লক্ষ্য চিহ্নিত করে। মান হল লক্ষ্য সংজ্ঞা থেকে metadata.name বৈশিষ্ট্য।
profiles
হল skaffold.yaml থেকে শূন্য বা তার বেশি স্ক্যাফোল্ড প্রোফাইল নামের একটি তালিকা। ক্লাউড ডিপ্লোয় রিলিজ তৈরি করার সময় স্ক্যাফোল্ড রেন্ডার সহ প্রোফাইল ব্যবহার করে।
- পাইপলাইন প্রয়োগ করুন
gcloud beta deploy apply --file deploy/pipeline.yaml
4. উন্নয়ন পর্যায়
অ্যাপ্লিকেশনগুলি তৈরি হওয়ার সাথে সাথে স্বয়ংক্রিয় CICD টুলচেইনগুলি সম্পদ তৈরি এবং সংরক্ষণ করবে। ক্লাউড ডিপ্লোয় এর সাথে স্থাপনার জন্য স্ক্যাফোল্ড এবং স্টোর সম্পদ ব্যবহার করে অ্যাপ্লিকেশন তৈরি করতে নিম্নলিখিত কমান্ডগুলি কার্যকর করা হয়। এই পদক্ষেপটি প্রতিটি অ্যাপ্লিকেশন বিল্ডের জন্য আপনার CICD প্রক্রিয়া দ্বারা সঞ্চালিত হবে।
- স্কাফোল্ডের সাথে অ্যাপ্লিকেশনটি তৈরি করুন এবং সংরক্ষণ করুন
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. রিলিজ ফেজ
আপনার 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}"
রিলিজ পর্যালোচনা করুন
যখন একটি ক্লাউড ডিপ্লয় রিলিজ তৈরি করা হয়, এটি স্বয়ংক্রিয়ভাবে এটিকে প্রথম লক্ষ্যে রোল আউট করে যা পূর্বরূপ।
- Google ক্লাউড কনসোলে <Cloud Deploy> এ যান
- "নমুনা-অ্যাপ" এ ক্লিক করুন
এই স্ক্রিনে আপনি আপনার পাইপলাইনের একটি গ্রাফিক উপস্থাপনা দেখতে পাবেন।
- প্রিভিউ বক্সের বাম দিকে একটি সবুজ রূপরেখা নিশ্চিত করুন যার মানে রিলিজটি সেই পরিবেশে স্থাপন করা হয়েছে।
- ঐচ্ছিকভাবে স্ক্রীনের নীচের বিভাগে রিলিজ বিবরণের অধীনে রিলিজ নামের উপর ক্লিক করে রিলিজ সম্পর্কে অতিরিক্ত বিবরণ পর্যালোচনা করুন
- রিলিজ সফলভাবে অ্যাপ্লিকেশন স্থাপন করা হয়েছে কিনা যাচাই করুন, নিম্নলিখিত কমান্ড চালান এটি cloushell
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
- স্ক্রিনের উপরের ডানদিকে ওয়েব প্রিভিউ আইকনে ক্লিক করুন।
- পোর্ট 8080-এ পূর্বরূপ নির্বাচন করুন
এটি আপনাকে একটি নতুন পৃষ্ঠায় নিয়ে যাবে যা "হ্যালো ওয়ার্ল্ড!" বার্তাটি দেখায়।
- পোর্ট-ফরোয়ার্ড শেষ করতে টার্মিনালে
ctrl+c
ব্যবহার করুন।
একটি মুক্তি প্রচার
এখন যেহেতু আপনার রিলিজ পাইপলাইনে প্রথম লক্ষ্যে (প্রিভিউ) স্থাপন করা হয়েছে, আপনি এটিকে পরবর্তী লক্ষ্যে (ক্যানারি) প্রচার করতে পারেন। প্রক্রিয়াটি শুরু করতে নিম্নলিখিত কমান্ডটি চালান।
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
রিলিজ প্রচার পর্যালোচনা
- Google ক্লাউড কনসোলে নমুনা-অ্যাপ পাইপলাইনে যান
- ক্যানারি বক্সের বাম দিকে একটি সবুজ রূপরেখা নিশ্চিত করুন যার অর্থ রিলিজটি সেই পরিবেশে স্থাপন করা হয়েছে।
- এটিতে একটি টানেল তৈরি করে অ্যাপ্লিকেশনটি সঠিকভাবে স্থাপন করা হয়েছে তা যাচাই করুন৷
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
- স্ক্রিনের উপরের ডানদিকে ওয়েব প্রিভিউ আইকনে ক্লিক করুন।
- পোর্ট 8080-এ পূর্বরূপ নির্বাচন করুন
এটি আপনাকে একটি নতুন পৃষ্ঠায় নিয়ে যাবে যা "হ্যালো ওয়ার্ল্ড!" বার্তাটি দেখায়।
- পোর্ট-ফরোয়ার্ড শেষ করতে টার্মিনালে
ctrl+c
ব্যবহার করুন।
একটি উত্পাদন রিলিজ অনুমোদন
মনে রাখবেন আমরা যখন prod.yaml এর মাধ্যমে prod টার্গেট তৈরি করেছি, তখন আমরা RequireApproval ট্যাগটিকে সত্য হিসেবে নির্দিষ্ট করেছি। এটি পণ্যে প্রচারের জন্য অনুমোদনের প্রয়োজনীয়তাকে বাধ্য করবে৷
- নিম্নলিখিত কমান্ডের সাহায্যে ক্যানারি রিলিজকে উৎপাদনে উন্নীত করুন
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Google ক্লাউড কনসোলে নমুনা-অ্যাপ পাইপলাইনে যান
- হলুদ সূচকটি লক্ষ্য করুন "1 মুলতুবি"।
এই বার্তাটি নির্দেশ করে যে উত্পাদনে স্থাপনার জন্য একটি রিলিজ সারিবদ্ধ আছে তবে পর্যালোচনা এবং অনুমোদনের প্রয়োজন।
- হলুদ নোটিশের ঠিক নিচে "রিভিউ" বোতামে ক্লিক করুন।
- পরবর্তী স্ক্রিনে প্রোডাকশনের অনুমোদন স্ক্রীন অ্যাক্সেস করতে আবার "পর্যালোচনা" এ ক্লিক করুন
- পরিবর্তনগুলি পর্যালোচনা করতে ঐচ্ছিকভাবে ম্যানিফেস্ট ডিফ পর্যালোচনা করুন৷ এই ক্ষেত্রে একটি সম্পূর্ণ নতুন ফাইল.
- "অনুমোদন" বোতামে ক্লিক করুন
- নমুনা-অ্যাপ পাইপলাইন পৃষ্ঠায় ফিরে যান যেখানে আপনি প্রগতির জন্য রিলিজ দেখতে পাবেন।
উৎপাদন রিলিজ পর্যালোচনা
অন্যান্য পরিবেশের মতো আপনি নীচের পদক্ষেপগুলি ব্যবহার করে এটি সম্পূর্ণ হলে স্থাপনার পর্যালোচনা করতে পারেন।
- পোর্ট-ফরোয়ার্ড তৈরি করতে নিম্নলিখিত কমান্ডটি ক্লাউডশেল চালান
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
- স্ক্রিনের উপরের ডানদিকে ওয়েব প্রিভিউ আইকনে ক্লিক করুন।
- পোর্ট 8080-এ পূর্বরূপ নির্বাচন করুন
এটি আপনাকে একটি নতুন পৃষ্ঠায় নিয়ে যাবে যা "হ্যালো ওয়ার্ল্ড!" বার্তাটি দেখায়।
- পোর্ট-ফরোয়ার্ড শেষ করতে টার্মিনালে
ctrl+c
ব্যবহার করুন।