CI/CD Python – Μέρος 3 : Πηγαίνουμε πιο μακριά με το Poetry, το Docker και την προχωρημένη δημοσίευση
Publié le 19 July 2025
Σε τα πρώτα δύο μέρη αυτής της σειράς, έχουμε : - Έθεσε έναν λειτουργικό pipeline CI/CD για μια εφαρμογή Python με το GitHub Actions και το PyPI. - Ενσωματώσαμε αυτήν τη διαδικασία με δοκιμές πολλαπλών εκδόσεων, σταδιακή δημοσίευση μέσω Test PyPI, και εργαλεία ποιότητας και ασφαλείας.
Σε αυτό το τρίτο μέρος, θα πάμεπέρα από την απλή δημοσίευση στο PyPIγια τη κατασκευή μιας πλήρους, αξιόπιστης και επαγγελματικής αλυσίδας CI/CD με : - Ποίησηγια ένα σύγχρονο πακέτο και μια βελτιστοποιημένη διαχείριση των εξαρτήσεων. - Dockerγια να δημιουργήσετε builds επαναλαμβανόμενα και πολυ-πλατφορμικά. - Συνθηκή δημοσίευσηγια τη διαχείριση σεναρίων όπως τα release candidates. - Εργαλεία αυτοματοποίησης(Renovate, Dependabot) για να διατηρείτε τον αγωγό ενημερωμένο χωρίς κόπο.
Ενσωμάτωση με το Poetry
Η Poetry αντικαθιστά τα παλαιά εργαλεία πακεταρίσματος (setup.py, requirements.txt) κεντροποιώντας τη διαχείριση των εξαρτήσεων και του build σε`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
Έκδοση υπό συνθήκη
Σε έναν επαγγελματικό pipeline, πρέπει να μπορέσουμε να δημοσιεύουμε μόνο σε ορισμένα περιπτώσεις: - Εκδόσεις υποψηφιότητες προς Test PyPI. - Οι σταθερές έκδοσεις προς το PyPI. - Builds 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
Ακολουθία – Δημοσίευση υπό συνθήκη
Καταστάσεις – Pipeline CI/CD
Ανάπτυξη – Αρχιτεκτονική CI/CD
Συμπέρασμα
Στο αυτό το τρίτο μέρος, είδαμε πώς: - Μοντέρναποίηση του πακετάρισματος Python με το Poetry. - Εγγυάστε αναπαραγώγιμη κατασκευή μέσω Docker. - Ρυθμίστε μια συνθηματική δημοσίευση. - Αυτοματοποίηση της ενημέρωσης των εξαρτήσεων.
Τώρα έχετε ένα pipeline CI/CDπλήρης, βιομηχανοποιημένος και ασφαλής, πρόθυμος να εξελιχθεί με τα έργα σας.