paint-brush
CI/CD হ্যান্ডস-অন: একটি সহজ কিন্তু কার্যকরী ক্রমাগত ইন্টিগ্রেশন ওয়ার্কফ্লো [পর্ব 1]দ্বারা@j04n
3,793 পড়া
3,793 পড়া

CI/CD হ্যান্ডস-অন: একটি সহজ কিন্তু কার্যকরী ক্রমাগত ইন্টিগ্রেশন ওয়ার্কফ্লো [পর্ব 1]

দ্বারা Joan Flotats6m2023/09/05
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

আমি বিষয়টি সম্পর্কে কয়েক ডজন নিবন্ধ পড়েছি এবং এন্ড-টু-এন্ড CI/CD পাইপলাইন বাস্তবায়নের অভিজ্ঞতা পেয়েছি। বাস্তবতা হল যে একটি CI/CD পাইপলাইন বাস্তবায়ন করা নিবন্ধ পড়া, CI/CD সামগ্রিক চিত্র বোঝা এবং তত্ত্ব ব্যবহার করার চেয়ে অনেক বেশি জটিল। এই নিবন্ধটি ব্যাখ্যা করে কিভাবে একটি পাইথন অ্যাপ্লিকেশনের একটি ন্যূনতম কার্যকর CI পাইপলাইন উদাহরণ তৈরি করতে হয়।

People Mentioned

Mention Thumbnail
featured image - CI/CD হ্যান্ডস-অন: একটি সহজ কিন্তু কার্যকরী ক্রমাগত ইন্টিগ্রেশন ওয়ার্কফ্লো [পর্ব 1]
Joan Flotats HackerNoon profile picture
0-item
1-item


CI/CD একটি সু-প্রতিষ্ঠিত সফটওয়্যার ডেভেলপমেন্ট ডগমা। ইন্টারনেট CI/CD সম্পর্কে কথা বলা নিবন্ধ এবং পৃষ্ঠাগুলিতে পূর্ণ। তাদের সবসময় একই CI/CD ইমেজ থাকে। আমি বাজি ধরতে পারি যে আমি যে ছবিটির কথা বলছি তা আপনি জানেন।


আমি বিষয়টি সম্পর্কে কয়েক ডজন নিবন্ধ পড়েছি এবং এন্ড-টু-এন্ড CI/CD পাইপলাইন বাস্তবায়নের অভিজ্ঞতা পেয়েছি। বাস্তবতা হল যে একটি CI/CD পাইপলাইন বাস্তবায়ন করা নিবন্ধ পড়া, CI/CD সামগ্রিক চিত্র বোঝা এবং তত্ত্ব ব্যবহার করার চেয়ে অনেক বেশি জটিল। একটি CI/CD পাইপলাইন ডেভেলপমেন্টের জন্য আন্তঃবিভাগীয় এবং অভিজ্ঞ দলের প্রয়োজন।


এই নিবন্ধটি ব্যাখ্যা করে কিভাবে একটি পাইথন অ্যাপ্লিকেশনের একটি ন্যূনতম কার্যকর CI পাইপলাইন তৈরি করতে হয়। আপনি নিবন্ধের বিষয়বস্তু অন্যান্য ভাষা এবং প্রয়োজনীয়তার সাথে মানিয়ে নিতে পারেন। নমুনা FastAPI এবং GitHub অ্যাকশন ব্যবহার করে।


গিটহাবের উদাহরণ: https://github.com/joan-mido-qa/continuous-integration-example

CI: ক্রমাগত ইন্টিগ্রেশন

আমাকে বিদ্যমান অবিচ্ছিন্ন ইন্টিগ্রেশন বর্ণনায় আমার দুই সেন্ট যোগ করতে দিন। ক্রমাগত ইন্টিগ্রেশন মানে প্রোজেক্ট রিপোজিটরিতে স্বয়ংক্রিয়ভাবে পরীক্ষিত, অনুমোদিত এবং বিতরণযোগ্য কোড পরিবর্তনগুলিকে নিয়মিত একত্রিত করা।


এই উদাহরণটি GitHub অ্যাকশন ব্যবহার করে স্বয়ংক্রিয়ভাবে প্রতিটি 'পুল রিকোয়েস্ট' বা 'পুশ টু মেইন' ইভেন্টে প্রয়োজনীয় চেকগুলি চালায় যাতে কোডটি রিপোজিটরি মানের মানদণ্ডে লেগে থাকে। বাজার সিআই/সিডি সরঞ্জামগুলির একটি বৈচিত্র্যময় সংগ্রহ অফার করে: জেনকিন্স , ট্র্যাভিস , সার্কেলসিআই , গিটল্যাব, ইত্যাদি৷ আপনার পাইপলাইনের প্রয়োজনীয়তার সাথে সবচেয়ে উপযুক্ত একটি চয়ন করুন৷


উদাহরণ ওয়ার্কফ্লো পরীক্ষা করে যে নতুন কোডটি প্রি-কমিট চলমান ফর্ম্যাটিং নিয়মগুলি অনুসরণ করে। তারপরে, এটি পাইটেস্ট ব্যবহার করে ছোট পরীক্ষাগুলি সম্পাদন করে এবং অবশেষে, মাঝারি পরীক্ষাগুলি একটি কিন ডি ক্লাস্টারে অ্যাপ্লিকেশন হেলম চার্ট ইনস্টল করে৷


আপনার ক্রমাগত ইন্টিগ্রেশন ওয়ার্কফ্লো নির্ভর করবে আপনার টিমের আকার, পরিপক্কতা, আবেদনের প্রয়োজনীয়তা এবং ব্রাঞ্চিং কৌশলের উপর।

স্ট্যাটিক কোড বিশ্লেষণ

কোড পরিবর্তনগুলি সম্পাদন না করে বিশ্লেষণ করুন। স্ট্যাটিক অ্যানালাইসিস টুলগুলি পরীক্ষা করে যে আপনার কোড ফরম্যাটিং নিয়মের সাথে লেগে আছে, অবহেলিত বা দূষিত নির্ভরতা ব্যবহার করে না এবং পঠনযোগ্য এবং যথেষ্ট সহজ। তারা প্রোগ্রামিং ভাষার উপর নির্ভর করে অ্যান্টি-প্যাটার্ন এবং বাগ কোডিং করার পরামর্শ দেয়।


আমরা কীভাবে প্রি-কমিট ইনস্টল, কনফিগার এবং চালাতে হয় তা ব্যাখ্যা করব। আপনি সোনার বা সিঙ্কের মতো অন্যান্য বিশ্লেষণ সরঞ্জামগুলির সাথে প্রি-কমিটকে একত্রিত করতে পারেন।

প্রি-কমিট

প্রি-কমিট হল পাইথনে লেখা একটি টুল। আপনার সংগ্রহস্থলে এটি কনফিগার করা একটি YAML ফাইল তৈরি করা এবং প্রতিটি কমিটের আগে আপনি যে সংস্করণযুক্ত হুকগুলি চালাতে চান তা যোগ করার মতোই সহজ। প্রি-কমিট স্বয়ংক্রিয়ভাবে হুকগুলির দ্বারা প্রয়োজনীয় নির্ভরতাগুলি পরিচালনা করে এবং পাওয়া ত্রুটিগুলি স্বয়ংক্রিয়ভাবে সংশোধন করে। এটি একাধিক ফাইল প্রকার সমর্থন করে: JSON, YAML, tf, py, ts, ইত্যাদি।


তাদের ঠেলাঠেলি করার আগে স্থানীয়ভাবে আপনার কোড চেক চালিয়ে পরিকাঠামো খরচ সংরক্ষণ করুন। পুশ করা কোডের ফরম্যাট চেক করতে আপনি আপনার CI-তে প্রি-কমিট চালাতে পারেন।


প্রি-কমিট টুল ইনস্টল করুন, কনফিগার করুন এবং চালান:


 repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.3.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace


 $ pip install pre-commit $ pre-commit install $ pre-commit run --all-files


পাইথন হুক পরামর্শ:

  • Mypy: পাইথনের জন্য স্ট্যাটিক টাইপ পরীক্ষক
  • রাফ: পাইথনের জন্য স্ট্যাটিক ফরম্যাট পরীক্ষক
  • রিফার্ব: পাইথনের জন্য কোডিং সেরা অনুশীলনের পরামর্শ দিন
  • প্রতিশ্রুতিবদ্ধ: নিশ্চিত করুন যে স্ট্যান্ডার্ড কমিট ব্যবহার এবং সংস্করণ ব্যবস্থাপনা


পরীক্ষা

ইউনিট, ইন্টিগ্রেশন, এবং এন্ড-টু-এন্ড পরীক্ষার সংজ্ঞা এবং সুযোগ কখনও কখনও বিস্তৃত হয়। আমি যেমনটি অবিচ্ছিন্ন একীকরণের বিবরণ দিয়ে করেছি, আমি আমার দুটি সেন্ট Google পরীক্ষার প্রকারের সফ্টওয়্যার ইঞ্জিনিয়ারিং- এ যোগ করব:


  • ছোট : দ্রুত পরীক্ষা। কোডের ছোট টুকরা পরীক্ষা করুন। পরীক্ষা দ্বিগুণ বা উপহাস পরিবেশ ব্যবহার করুন (যেমন SQLite)। এটি কোন নিদর্শন নির্মাণের প্রয়োজন হয় না. সময়: ~ 60 সেকেন্ড।

  • মাধ্যম : কোডের একাধিক টুকরার মধ্যে মিথস্ক্রিয়া পরীক্ষা করুন। এর মধ্যে আর্টিফ্যাক্ট তৈরি করা, থার্ড-পার্টি আর্টিফ্যাক্ট (যেমন ডাটাবেস ) ব্যবহার করা এবং লোকালহোস্ট নেটওয়ার্কের সাথে সংযোগ করা অন্তর্ভুক্ত থাকতে পারে। জাল পরিবেশের ব্যবহার (যেমন ডকার-কম্পোজ, কাইন্ড, মিনিকুব, ইত্যাদি) বা বাহ্যিক পরিষেবাগুলি (যেমন Azure ব্লব স্টোরেজ বা AWS S3)। সময়: ~ 300 সেকেন্ড।

  • বড় : তারা উৎপাদনের মতো পরিবেশ ব্যবহার করে (যেমন পারফরম্যান্স টেস্টিং)। সময়: + 900 সেকেন্ড।


আপনার ক্রমাগত ইন্টিগ্রেশন পাইপলাইনে মাঝারি/বড় পরীক্ষা করা বা না করা আপনার প্রয়োজনীয়তার উপর নির্ভর করে।

ছোট

উদাহরণটি পরীক্ষা চালানোর জন্য Pytest এবং পরিবেশকে উপহাস করার জন্য FastAPI টেস্টিং ক্লায়েন্ট ব্যবহার করে। কোন গোপন; আপনার প্রোগ্রামিং ল্যাঙ্গুয়েজ টেস্টিং টুল আপনাকে আপনার অ্যাপ্লিকেশন পরীক্ষা করার জন্য প্রয়োজনীয় সমস্ত নির্ভরতা প্রদান করবে।


উপরন্তু, আপনি একটি ন্যূনতম পরীক্ষার কভারেজ চেক যোগ করতে পারেন এবং আপনার ফলাফলের অংশ হিসাবে এটি আপলোড করতে পারেন। পরীক্ষার কভারেজ একটি জটিল মেট্রিক। একটি উচ্চ পরীক্ষার কভারেজ একটি ভাল-পরীক্ষিত কোডের অন্তর্নিহিত অর্থ নয়, তবে একটি 50% হল একটি 0% পরীক্ষিত কোডের চেয়ে বেশি৷

মধ্যম

কিন ডি হল একটি ডকার-ইন-ডকার লাইটওয়েট কুবারনেটস ক্লাস্টার যা স্থানীয় উন্নয়ন বা CI এর জন্য ব্যবহৃত হয়। আমরা একটি পরীক্ষার পরিবেশ সেট আপ করতে এবং এর বিরুদ্ধে পরীক্ষা চালাতে Kind ব্যবহার করি:


  1. কাইন্ড ক্লাস্টার তৈরি করুন
  2. ডকার ইমেজ তৈরি করুন
  3. কাইন্ডে ডকার ইমেজ লোড করুন
  4. মেটালএলবি ইনস্টল করুন এবং প্রয়োজনীয় সিডিআর প্রয়োগ করুন
  5. Ingress-Nginx ইনস্টল করুন
  6. আপনার হেলম চার্ট ইনস্টল করুন
  7. আপনার OS হোস্ট সেটআপ করুন


ডকার ইমেজ লোড করুন

কাইন্ড আপনার ছবি ডাউনলোড করতে ব্যর্থ হবে কারণ এটি একটি রেজিস্ট্রি থেকে ডাউনলোডযোগ্য নয়। কাইন্ড ইমেজ ব্যবহার করার আগে লোড করা প্রয়োজন.

মেটালএলবি

MetalLB হল একটি বেয়ার মেটাল Kubernetes লোড-ব্যালেন্সার। MetalLB ওয়েব পৃষ্ঠায় কেন একটি লোড-ব্যালেন্সার প্রয়োজন সে সম্পর্কে আরও পড়ুন।


একবার হেলম চার্ট ব্যবহার করে ইনস্টল করা হলে, আমরা প্রয়োজনীয় CRD তৈরি করতে পারি:


 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: kind-advertisement --- apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: kind-address-pool spec: addresses: - "172.26.255.0/24"


ডকার কাইন্ড ক্লাস্টারের জন্য একটি সাবনেট তৈরি করে (যেমন 172.26.0.0/16)। নির্ধারিত IP ঠিকানা পরিসর জানতে Kind নেটওয়ার্ক ইন্টারফেস পরিদর্শন করুন এবং IPAddressPool সম্পদের জন্য একটি মান হিসাবে ঠিকানাটি ব্যবহার করুন। MetalLB কনফিগারেশন সম্পর্কে আরও তথ্য KinD ওয়েব পৃষ্ঠায় রয়েছে।

এক্সপোজ অ্যাপ্লিকেশন

Ingress-Nginx হেলম চার্ট ইনস্টল করুন। তারপরে, একটি ইনগ্রেস অবজেক্ট সংজ্ঞায়িত করে আপনার অ্যাপ্লিকেশন হেলম চার্ট ইনস্টল করুন। nginx-এ ingressClassName প্রপার্টি সেট করুন এবং একটি হোস্ট (যেমন api.local) নির্ধারণ করুন। অবশেষে, নিম্নলিখিত লাইনটি যুক্ত করতে /etc/host পরিবর্তন করুন:


 192.168.1.10 api.local


একই ঠিকানায় নির্দেশ করে আপনি যত খুশি হোস্ট সংজ্ঞায়িত করতে পারেন। Nginx বাকি কাজ করবে।


কাইন্ড ব্যবহার করে একটি স্থানীয় পরিবেশ শুরু, আপডেট এবং মুছে ফেলার জন্য একটি টুল তৈরি করুন। বিকাশকারীরা সহজেই অ্যাপ্লিকেশনটি ডিবাগ করতে, স্থানীয়ভাবে রিপোর্ট করা বাগগুলি পুনরুত্পাদন করতে বা CI-তে পরীক্ষা চালানোর জন্য এটি ব্যবহার করতে পারেন।


এই উদাহরণগুলি লিনাক্স ভিত্তিক বিতরণের জন্য কাজ করে। Windows/MacOS এর জন্য এটি যেমন আছে তেমন কাজ নাও করতে পারে, পরিবর্তনের প্রয়োজন হতে পারে।

ডেলিভারি

প্রয়োজনীয় নিদর্শন সরবরাহ করার আগে, ওয়ার্কফ্লো লিন্টিং এবং পরীক্ষার পদক্ষেপগুলি সম্পাদন করে।


আমরা নিদর্শনগুলির প্রকাশ পরিচালনা করতে কমিটাইজেন ব্যবহার করি। Commtizen স্বয়ংক্রিয়ভাবে আর্টিফ্যাক্ট সংস্করণ আপডেট করে এবং পরিবর্তনগুলিকে পুশ করে। এটি কনফিগার করা ট্যাগ বিন্যাসের সাথে একটি নতুন গিট ট্যাগ তৈরি করে। আপনি সাম্প্রতিক পরিবর্তনগুলির সাথে আপনার চেঞ্জলগ আপডেট করতে Commtizen কনফিগার করতে পারেন।


 [tool.commitizen] tag_format = "v$major.$minor.$patch" version_scheme = "semver" version_provider = "pep621" major_version_zero = true update_changelog_on_bump = true version_files = [ "charts/ci-example/Chart.yaml:version", "charts/ci-example/Chart.yaml:appVersion" ]


ওয়ার্কফ্লো ডকার ইমেজ এবং হেলম চার্ট ট্যাগ সেট করতে কমিটাইজেন আউটপুট সংস্করণ ব্যবহার করে।


প্রতিটি শিল্পকর্মের (চিত্র এবং চার্ট) জন্য আপনার কাছে বিভিন্ন সংস্করণ থাকতে পারে। কিন্তু তারপরে আপনার চার্ট এবং চিত্র পরিবর্তনগুলি অবশ্যই পিছিয়ে সামঞ্জস্যপূর্ণ হতে হবে। এটি বিকাশ এবং মুক্তি প্রক্রিয়াতে জটিলতা যুক্ত করবে। এটি এড়াতে, আমরা উভয় শিল্পকর্মের জন্য একই সংস্করণ ব্যবহার করি।


উপসংহার

এই নিবন্ধটি একটি সহজ কিন্তু কার্যকরী ক্রমাগত ইন্টিগ্রেশন ওয়ার্কফ্লো আউট স্কেচ. অন্যান্য প্রোগ্রামিং ভাষার জন্য কাজ করতে বা আপনার প্রয়োজনীয়তার সাথে মানানসই করার জন্য এটির পরিবর্তনের প্রয়োজন হতে পারে, তবে কিছু পদক্ষেপ সহজে রপ্তানিযোগ্য হওয়া উচিত এবং সেগুলি যেমন আছে তেমন কাজ করা উচিত।


CI/CD হ্যান্ডস-অন: ক্রমাগত স্থাপনা [পর্ব 2] শীঘ্রই আসছে …