CI/CD Python – অংশ ৩ : Poeetry, Docker ও উন্নত প্রকাশের সাহায্যে আরও অগ্রসর হওয়া
প্রকাশিত: 19 July 2025
এই সিরিজেরデュটি প্রথম অংশে, আমাদের : - একটি পাইথন অ্যাপ্লিকেশনের জন্য গিটহাব একশনস এবং পিপি ব্যবহার করে একটি কার্যকর CI/CD পাইপলাইন তৈরি করুন। - বহুবার্শন টেস্ট, Test PyPI-এর মাধ্যমে পর্যায়ক্রমিক প্রকাশ, এবং গুণমান ও নিরাপত্তা সরঞ্জামসহ এই পাইপলাইনটি শিল্পসীভূত করা হয়েছে।
এই তৃতীয় অংশে, আমরা যাবো।PyPI-এ শুধু প্রকাশের চেয়ে বেশিপূর্ণাঙ্গ, শক্তিশালী ও পেশাদার CI/CD চেইন তৈরি করতে : - কবিতাআধুনিক প্যাকেজিং এবং অপ্টিমাইজ্ড নির্ভরতা ব্যবস্থাপনার জন্য। - Dockerপুনরাবৃত্তিযোগ্য ও বহু-প্ল্যাটফর্ম বিল্ড তৈরি করতে - শর্তসাপেক্ষ প্রকাশrelease candidates-er moto scenarios.byavastha karar jonne - স্বয়ংক্রিয়করণের সরঞ্জাম(Renovate, Dependabot) পাইপালাইনকে আপ-টু-ডেট রাখতে কোনো প্রয়োগ ছাড়াই।
Poetry-এর সাথে ইন্টিগ্রেশন
Poetry প্রাচীন প্যাকেজিং সরঞ্জামগুলো (setup.py, requirements.txt) এর পরিবর্তে করে নির্ভরশীলতা ও বিল্ডের ব্যবস্থাপনাকে কেন্দ্রীয়করণ করে`pyproject.toml`.
Poetry এর ইন্সটলেশন
# Installer Poetry
curl -sSL https://install.python-poetry.org | python3 -
# Vérifier la version
poetry --version
প্রকল্পের আরম্ভ
# Initialiser un nouveau projet avec Poetry
poetry init
# Suivre l'assistant pour renseigner : nom, version, description, licence, dépendances.
এটি একটি ফাইল তৈরি করে`pyproject.toml`:
[tool.poetry]
name = "playlist-downloader"
version = "0.1.0"
description = "CLI tool for managing YouTube playlists"
authors = ["Christophe Hérolivier <[email protected]>"]
[tool.poetry.dependencies]
python = ">=3.8"
typer = "^0.9.0"
yt-dlp = "^2023.7.6"
google-api-python-client = "^2.0.0"
google-auth-oauthlib = "^1.0.0"
[tool.poetry.group.dev.dependencies]
pytest = "^7.0"
mypy = "^1.0"
bandit = "^1.7"
safety = "^2.3"
black = "^23.0"
ruff = "^0.1"
ডিপেন্ডেন্সি যোগ ও ইন্সটলেশন
poetry add typer yt-dlp google-api-python-client google-auth-oauthlib
poetry add --group dev pytest mypy black bandit safety ruff
প্রকাশ সঙ্গে Poetry
কবিতা নেটিভভাবে প্রকাশ পরিচালনা করে:
# Publication sur Test PyPI
poetry publish --build --repository test-pypi
# Publication sur PyPI
poetry publish --build
এটি স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত থাকা তথ্য ব্যবহার করে।pyproject.toml.
Docker দিয়ে পুনরুত্পাদনযোগ্য বিল্ড
উন্নয়ন, CI/CD এবং উৎপাদনে একই কার্যক্রম নিশ্চিত করতে, Docker Poetrry-এর সাথে পরিপূর্ণভাবে সংযুক্ত হয়।
ডকফাইলের উদাহরণ
FROM python:3.11-slim
WORKDIR /app
COPY pyproject.toml poetry.lock ./
RUN pip install poetry
RUN poetry install --no-root --only main
COPY . .
CMD ["poetry", "run", "python", "cli.py"]
এটি নিশ্চিত করে : একটি জমে যাওয়া পাইথন পরিবেশ। নির্ভরতা বন্ধ থেকে`poetry.lock`. - একটি চালনাযোগ্য ইমেজ সব Docker সমর্থনকারী σύστημα ওপর
GitHub Actions-এ একীকরণ
name: Docker Build
on:
push:
branches: [main]
jobs:
build-docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: docker build -t ghcr.io/${{ github.repository }}:latest .
- name: Push Docker image
run: docker push ghcr.io/${{ github.repository }}:latest
শর্তসাপেক্ষ প্রকাশ
একটি পেশাগত পাইপলাইনে, কেবল কিছু</tool_call>ে প্রকাশ করতে সক্ষম হওয়া দরকার: রিলিজ ক্যান্ডিডেটস টেস্ট পাইপিআই-এ PyPI-এ স্থিতিশীল সংস্করণ। - ট্রিগারকৃত ডকর বিল্ডগুলো শুধুমাত্র`main`.
- name: Publish to Test PyPI
if: contains(github.ref, '-rc')
run: poetry publish --build --repository test-pypi
- name: Publish to PyPI
if: startsWith(github.ref, 'refs/tags/v')
run: poetry publish --build
এই পদ্ধতিটি আকস்மিক প্রকাশগুলোকে এড়িয়ে যায়।
Renovate ও Dependabot দিয়ে নির্ভরতা স্বয়ংক্রিয়করণ
আপনার নির্ভরতাগুলি মেটা না হওয়ার জন্য স্বয়ংক্রিয় আপডেট সরঞ্জামগুলো যোগ করুন।
ডিপেন্ডাবট
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
Dependabot প্রতিটি সপ্তাহে পাইথন ও GitHub Actions নির্ভরতাগুলো আপডেট করার জন্য PR খুলে।
নবীকরণ করুন
{
"extends": ["config:base"],
"packageRules": [
{
"matchManagers": ["pip"],
"groupName": "python-dependencies",
"schedule": ["before 6am on monday"]
}
]
}
Renovate আরও সুনির্দিষ্ট নিয়ন্ত্রণ প্রদান করে: নির্ভরতা গোষ্ঠীকরণ, পরিকল্পনা এবং উন্নত বিধি।
PlantUML ডায়াগ্রাম
ব্যবহার ক্ষেত্র – উন্নত CI/CD
@startuml actor Developer actor GitHub as "GitHub অ্যাকশন" actor PyPI actor DockerRegistry as "Docker নিবন্ধন" actor Automation as "পুনর্নির্মাণ/Dependabot" Developer --> (Push code) (ট্রিগার করুন CI) --> GitHub GitHub --> (Run Tests & Lint) GitHub --> (Build Docker Image) GitHub --> DockerRegistry GitHub --> (Publish to Test PyPI) GitHub --> (Promote to PyPI) Automation --> (Update Dependencies) @enduml
অনুক্রম – শর্তাধীন প্রকাশ
@startuml !theme vibrant left to right direction Developer -> GitHub: পুশ ট্যাগ v1.2.3-rc GitHub -> CI: পরীক্ষা চালান CI -> CD: রিলিজের ধরন পরীক্ষা করুন CD -> Test PyPI: প্রকাশ করুন RC Developer -> GitHub: পুশ ট্যাগ v1.2.3 GitHub -> CD: প্রকাশ করুন PyPI CD -> Docker Registry: পুশ Docker ছবি @enduml
রাজ্য – সিআই/সিডি পাইপলাইন
@startuml [*] --> Idle Idle --> CI_Running : push CI_Running --> CI_Success : পরীক্ষা ঠিক CI_Running --> CI_Failed : টেস্ট ব্যর্থ হয় CI_Success --> CD_Running : tag detected CD_Running --> CD_Success : প্রকাশ করুন ঠিক আছে CD_Running --> CD_Failed : ত্রুটি CD_Success --> [*] @enduml
ডিপ্লয়মেন্ট – আর্কিটেকচার CI/CD
@startuml
node "ডেভেলপার মেশিন" {
component "Git ক্লায়েন্ট"
}
node "GitHub অ্যাকশন" {
component "CI ওয়ার্কফ্লো"
component "CD ওয়ার্কফ্লো"
}
node "প্যাকেজ রেপোজিটরি" {
artifact "টেস্ট PyPI"
artifact "PyPI"
artifact "Docker রেজিস্ট্রি"
}
"ডেভেলপার মেশিন" --> "GitHub অ্যাকশন"
"GitHub অ্যাকশন" --> "টেস্ট PyPI"
"GitHub অ্যাকশন" --> "PyPI"
"GitHub অ্যাকশন" --> "Docker রেজিস্ট্রি"
@enduml
উপসংহার
এই তৃতীয় অংশে, আমরা দেখেছি কীভাবে : - Poetry ব্যবহার করে পাইথন প্যাকেজিংকে আধুনিক করা - ডককারের माध्यमে পুনরোৎপাদনযোগ্য বিল্ড নিশ্চিত করুন। শর্তবদ্ধ প্রকাশ স্থাপন করা - নির্ভরতাগুলির আপডেট স্বয়ংক্রিয়ভাবে করুন
আপনার কাছে এখন একটি CI/CD পাইপলাইন আছে.সম্পূর্ণ, শিল্পীকৃত এবং নিরাপদ, আপনার প্রকল্পের সাথে উন্নতি করতে প্রস্তুত.