इस श्रृंखला के पहले दो भागों में, हमने : - 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 पाइपलाइन है।पूर्ण, औद्योगिक और सुरक्षित, आपके प्रोजेक्ट्स के साथ विकसित होने को तैयार।

संबंधित लेख