CI/CD पायथन – भाग 3: कविता, डॉकडर और उन्नत प्रकाशन के साथ आगे बढ़ें
प्रकाशित: 19 July 2025
इस श्रृंखला के पहले दो भागों में, हमने : - GitHub Actions और PyPI के साथ एक Python एप्लिकेशन के लिए कार्यात्मक CI/CD पाइपलाइन स्थापित किया। इस पाइपलाइन को मल्टी-वर्जन टेस्ट्स, टेस्ट PyPI के माध्यम से चरणबद्ध प्रकाशन, और गुणवत्ता एवं सुरक्षा उपकरणों के साथ औद्योगिक बनाया गया।
इस तीसरे भाग में, हम जाएंगेPyPI पर केवल प्रकाशन से अधिकएक पूर्ण, मजबूत और पेशेवर CI/CD पाइपलाइन बनाने के लिए : - कविताएक आधुनिक पैकेजिंग और अनुकूलित निर्भरता प्रबंधन के लिए। - डॉकरpunarāvṛtti yogya aur malṭi‑pleṭfārm bild banāne ke liye. - शर्ती प्रकाशनरिलीज़ कैंडिडेट जैसे परिदृश्यों को प्रबंधित करने के लिए - स्वचालन उपकरण(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 के साथ प्रकाशन
Poetry नेटिव रूप से प्रकाशन को प्रबंधित करती है:
# Publication sur Test PyPI
poetry publish --build --repository test-pypi
# Publication sur PyPI
poetry publish --build
यह आदेश स्वचालित रूप से भीतर मौजूद सूचना का उपयोग करता है`pyproject.toml`.
डॉकर के साथ पुनःउत्पादन योग्य निर्माण
विकास, CI/CD और उत्पादन में समान निष्पादन सुनिश्चित करने के लिए, Docker Poetry के साथ पूरी तरह से एकीकृत होता है।
Dockerfile का उदाहरण
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`. - एक ऐसी इमेज जो डॉकर्समर्थी सभी सिस्टम पर निष्पादन योग्य है।
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
शर्तित प्रकाशन
एक व्यावसायिक पाइपलाइन में, केवल कुछ स्थितियों में ही प्रकाशित करने की क्षमता होना आवश्यक है : - Release candidates की ओर Test PyPI - PyPI के लिए स्थिर संस्करण। - निर्माण Docker ट्रिगर केवल के लिए`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 के साथ निर्भरताओं का स्वचालन
अपनी निर्भरताओं के पुराना होने से बचने के लिए, स्वचालित अपडेट टूल्स को एकीकृत करें।
Dependabot
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
Dependabot हर सप्ताह PR खोलता है Python और GitHub Actions की निर्भरताओं को अपडेट करने के लिए।
नवीकरण
{
"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: Push tag v1.2.3 GitHub -> CD: प्रकाशित PyPI CD -> Docker Registry: धकेलें Docker छवि @enduml
राज्य – CI/CD पाइपलाइन
@startuml [*] --> Idle Idle --> CI_Running : धकेलना CI_Running --> CI_Success : टेस्ट ठीक CI_Running --> CI_Failed : परीक्षण असफल होते हैं CI_Success --> CD_Running : टैग पहचाना गया CD_Running --> CD_Success : प्रकाशित ठीक CD_Running --> CD_Failed : त्रुटि CD_Success --> [*] @enduml
डिप्लॉयमेंट – CI/CD आर्किटेक्चर
@startuml
node "डेवलपर मशीन" {
component "गिट क्लाइंट"
}
node "GitHub कार्य" {
component "CI वर्कफ़्लो"
component "CD वर्कफ़्लो"
}
node "पैकेज रिपॉजिटरी" {
artifact "टेस्ट PyPI"
artifact "PyPI"
artifact "Docker रजिस्ट्री"
}
"डेवलपर मशीन" --> "GitHub कार्य"
"GitHub कार्य" --> "टेस्ट PyPI"
"GitHub कार्य" --> "PyPI"
"GitHub कार्य" --> "Docker रजिस्ट्री"
@enduml
निष्कर्ष
इस तीसरे भाग में, हमने देखा कि : - Poetry के साथ पाइथन पैकेजिंग को आधुनिक बनाएँ। डॉकर के माध्यम से पुनरोत्पाद्य बिल्ड्स सुनिश्चित करें। - शर्ती प्रकाशन स्थापित करें। - निर्भरताओं के अपडेट को स्वचालित करें।
अब आपके पास एक CI/CD पाइपलाइन है।पूर्ण, औद्योगिक और सुरक्षित, आपके प्रोजेक्ट्स के साथ विकसित होने को तैयार।