Bu serinin ilk iki bölümünde, şunları yaptık : - İşlevsel bir CI/CD pipeline’ı oluşturuldu Python uygulaması için GitHub Actions ve PyPI ile - Bu pipeline’i çoklu-sürüm testleri, Test PyPI üzerinden aşamalı yayınlama ve kalite‑güvenlik araçlarıyla industrielle hâle getirdik.

Bu üçüncü bölümde, gideceğiz.PyPI’de basit bir yayınlamanın ötesindetam, güçlü ve profesyonel bir CI/CD zinciri oluşturmak için - şiirmodern bir paketleme ve optimize edilmiş bağımlılık yönetimi - Dockertekrarlanabilir ve çok platformlu derlemeler oluşturmak için. - Koşullu yayınrelease candidate gibi senaryoları yönetmek için - Otomasyon araçları(Renovate, Dependabot) pipeline’ı çaba sarf etmeden güncel tutmak için.

Intégration avec Poetry

Poetry, eski paketleme araçlarını (setup.py, requirements.txt) yerine kullanarak bağımlılık ve derleme yönetimini merkeziştirir içinde.pyproject.toml.

Poetry kurulumu

# Installer Poetry
curl -sSL https://install.python-poetry.org | python3 -
# Vérifier la version
poetry --version

Proje başlatma

# Initialiser un nouveau projet avec Poetry
poetry init
# Suivre l'assistant pour renseigner : nom, version, description, licence, dépendances.

Bu bir dosya oluşturur.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"

Bağımlılıkların eklenmesi ve kurulması

poetry add typer yt-dlp google-api-python-client google-auth-oauthlib
poetry add --group dev pytest mypy black bandit safety ruff

Poetry ile yayın

Poetry yayınlamayı yerleşik olarak yönetir :

# Publication sur Test PyPI
poetry publish --build --repository test-pypi

# Publication sur PyPI
poetry publish --build

Bu komut içinde bulunan bilgileri otomatik olarak kullanır.pyproject.toml.

Docker ile tekrarlanabilir derlemeler

Geliştirme, CI/CD ve üretim ortamlarında aynı yürütümleri sağlamak için Docker, Poetry ile mükemmel şekilde entegre olur.

Dockerfile örneği

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"]

Bu şunu garanti eder: Donmuş bir Python ortamı. - Kilitlenmiş bağımlılıklar aracılığıyla`poetry.lock`. Docker’ı destekleyen her sistemde çalıştırılabilir bir görüntü.

GitHub Actions’te entegrasyon

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

Koşullu yayın

Bir profesyonel hattada, sadece belirli durumlarda yayın yapabilmek gerektir : - Sürüm adayları Test PyPI’ya. - Stabil sürümler PyPI’ye. Sadece tetiklenen Docker derlemeleri için`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

Bu yaklaşım istenmeyen yayınları önler.

Renovate ve Dependabot ile bağımlılık otomasyonu

Bağımlılıklarınızın eski kalmasını önlemek için otomatik güncelleme araçları entegre edin.

Dependabot

version: 2
updates:
  - package-ecosystem: "pip"
    directory: "/"
    schedule:
      interval: "weekly"
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"

Dependabot her hafta bir PR açarak Python ve GitHub Actions bağımlılıklarını güncelliyor.

Yenilemek

{
  "extends": ["config:base"],
  "packageRules": [
    {
      "matchManagers": ["pip"],
      "groupName": "python-dependencies",
      "schedule": ["before 6am on monday"]
    }
  ]
}

Renovate, daha hassas bir denetim sağlar: bağımlılık gruplama, planlama ve gelişmiş kurallar.

PlantUML diyagramları

Kullanım Senaryosu – Gelişmiş CI/CD

@startuml
actor Developer
actor GitHub as "GitHub Eylemler"
actor PyPI
actor DockerRegistry as "Docker Kayıt"
actor Automation as "Yenile/Dependabot"

Developer --> (Push code)
(CI'yi tetikle) --> GitHub
GitHub --> (Run Tests & Lint)
GitHub --> (Build Docker Image)
GitHub --> DockerRegistry
GitHub --> (Publish to Test PyPI)
GitHub --> (Promote to PyPI)
Automation --> (Update Dependencies)
@enduml

Dizi – Koşullu yayın

@startuml
!theme vibrant
left to right direction
Developer -> GitHub: Etiği v1.2.3 gönder-rc
GitHub -> CI: Testleri çalıştır
CI -> CD: Yayın tipini kontrol et
CD -> Test PyPI: RC yayınla
Developer -> GitHub: Etiği v1.2.3 gönder
GitHub -> CD: PyPI'a yayınla
CD -> Docker Registry: Push Docker görüntü
@enduml

Ortamlar – CI/CD ardın işlem hattı

@startuml
[*] --> Idle
Idle --> CI_Running : itmek
CI_Running --> CI_Success : testler tamam
CI_Running --> CI_Failed : Testler başarısız olur
CI_Success --> CD_Running : Etiket algılandı
CD_Running --> CD_Success : yayınla tamam
CD_Running --> CD_Failed : hata
CD_Success --> [*]
@enduml

Dağıtım – CI/CD Mimari

@startuml
node "Geliştirici Makinesi" {
  component "Git İstemcisi"
}

node "GitHub Eylemler" {
  component "CI İş Akışı"
  component "CD İş Akışı"
}

node "Paket Depoları" {
  artifact "Test PyPI"
  artifact "PyPI"
  artifact "Docker Kayıt Defteri"
}

"Geliştirici Makinesi" --> "GitHub Eylemler"
"GitHub Eylemler" --> "Test PyPI"
"GitHub Eylemler" --> "PyPI"
"GitHub Eylemler" --> "Docker Kayıt Defteri"
@enduml

Sonuç

Bu üçüncü bölümde şunları öğrendik: Poetry ile Python paketlemeyi modernleştirin. Docker kullanarak tekrarlanabilir derlemeleri sağlayın - Koşullu yayın oluşturun. - Bağımlılıkların güncellemesini otomatikleştirme

Şimdi bir CI/CD pipeline’iniz var.tam, endüstriyel ve güvenli, projelerinizle gelişmeye hazır

İlgili Makaleler