في الجزأين الأولين من هذه السلسلة، لدينا : - أنشأ سير عمل CI/CD وظيفي لتطبيق Python باستخدام GitHub Actions وPyPI. - تم صناعته خط أنابيب مع اختبارات متعددة الإصدارات، ونشر تدريجي عبر Test PyPI، وأدوات للجودة والأمان.

في هذا الجزء الثالث، سنذهبما هو أبعد من مجرد النشر على PyPIلبناء سلسلة CI/CD كاملة وقوية واحترافية مع : - الشعرلتغليف حديث وإدارة محسّنة للاعتماديات - دوكيرلإنشاء بنى قابلة للتكرار ومتعددة المنصات. - النشر المشروطلإدارة سيناريوهات مثل مرشحات الإصدار - أدوات الأتمتة(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`.

إنشاءات قابلة للتكرار باستخدام Docker

ضمانًا لتنفيذات متطابقة في التطوير، و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"]

هذا يضمن: - بيئة Python ثابتة. - تبعيات مغلقة عبر`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

النشر الشرطي

في خط أنابيب احترافي، يجب أن تكون قادرًا على النشر فقط في بعض الحالات: - مرشحات الإصدار إلى اختبار 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 المتقدم

usecase cicd

التسلسل – النشر المشروط

sequence cicd

الحالات – خط أنابيب CI/CD

states cicd

النشر – بنية CI/CD

deployment cicd

خاتمة

في هذا الجزء الثالث، رأينا كيف : - تطوير تغليف Python باستخدام Poetry. ضمان بناءات قابلة للتكرار عبر Docker. إعداد نشر مشروط أتمتة تحديث التبعيات.

أنت الآن تمتلك خط أنابيب CI/CDكامل، صناعي وآمن, مستعد للتطور مع مشاريعك.

Articles connexes