Maison > Article > développement back-end > Implémentation de CI/CD pour ReadmeGenie
Avant de plonger dans la configuration, expliquons brièvement pourquoi CI/CD est si critique :
Dans ReadmeGenie, nous avons utilisé GitHub Actions comme outil CI/CD. Il s'intègre parfaitement aux référentiels GitHub et offre flexibilité et automatisation grâce aux fichiers de configuration YAML.
Notre pipeline CI/CD comprend les étapes automatisées suivantes :
Le workflow CI est défini dans .github/workflows/python-app.yml. Voici un aperçu de ce que fait chaque partie du flux de travail :
Le workflow s'exécute à chaque demande push et pull vers la branche principale. Cela garantit que toutes les modifications de code sont validées avant d'être fusionnées en production.
name: Python application on: push: branches: ["main"] pull_request: branches: ["main"]
Nous configurons GitHub Actions pour utiliser Python 3.12.x, garantissant ainsi la cohérence avec notre environnement de développement local. Cette étape installe la version spécifique de Python et prépare l'environnement pour l'installation des dépendances.
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python 3.12.x uses: actions/setup-python@v3 with: python-version: "3.12.x"
L'étape suivante consiste à installer les dépendances du projet. Ici, nous mettons à niveau pip et installons le fichier exigences.txt, il installera les dépendances supplémentaires qui y sont spécifiées.
- name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
Le peluchage est une partie cruciale de notre flux de travail, garantissant que le code respecte les normes de qualité spécifiées. Nous exécutons flake8 avec des options pour signaler les erreurs de syntaxe, les noms non définis et les problèmes de complexité.
name: Python application on: push: branches: ["main"] pull_request: branches: ["main"]
Pour les tests unitaires, nous utilisons pytest pour exécuter tous les cas de test. De plus, nous utilisons la couverture pour suivre quelles lignes de code sont testées, garantissant ainsi que notre suite de tests respecte le seuil de couverture défini de 75 %.
Les commandes suivantes exécutent les tests et génèrent un rapport de couverture, mettant en évidence les éventuelles lacunes dans la couverture des tests. Ceci est essentiel pour l’assurance qualité, car le code non testé est une source potentielle de futurs bugs.
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python 3.12.x uses: actions/setup-python@v3 with: python-version: "3.12.x"
Cette vérification de couverture garantit un niveau élevé de qualité du code en garantissant qu'au moins 75 % de la base de code est couverte par des tests. Si la couverture tombe en dessous de ce seuil, le commit ne sera pas autorisé.
En plus de CI/CD, nous avons mis en place des hooks de pré-commit pour appliquer la qualité du code localement avant que toute modification ne soit transmise au référentiel. Ces crochets :
Voici comment nous avons ajouté la vérification de couverture en tant que hook de pré-commit dans .pre-commit-config.yaml :
- name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
La configuration de CI/CD nécessitait une compréhension approfondie de la façon dont les différents outils (flake8, pytest, couverture) interagissent au sein de GitHub Actions. Voici quelques défis auxquels nous avons été confrontés et les solutions que nous avons mises en œuvre :
Nous avons rencontré des problèmes avec des conflits de variables d'environnement, en particulier lors des tests d'intégration d'API et de gestion de la configuration. L'utilisation de @patch.dict et d'autres techniques de moquerie dans unittest nous a permis de simuler efficacement l'environnement.
Le plus grand défi était d'assurer une couverture adéquate des tests. L'utilisation de cover.py avec --fail-under=75 dans les actions GitHub et les hooks de pré-validation a contribué à appliquer cette norme.
Pour rendre le pipeline CI/CD plus robuste, nous prévoyons de :
Grâce à ce projet, j'ai réalisé l'importance d'établir dès le début des tests robustes et des pratiques CI/CD. Si je devais recommencer, je me concentrerais sur la rédaction de tests complets dès le début et sur leur extension et leur amélioration progressives à mesure que le projet progresse. Cette approche éviterait les branches manquantes ou les zones non testées et garantirait que tout nouveau code s'intègre en douceur dans une base de code bien couverte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!