Skip to content

Latest commit

 

History

History
161 lines (133 loc) · 7.81 KB

devops.adoc

File metadata and controls

161 lines (133 loc) · 7.81 KB

Vers la livraison continue

Collaborer avec un VCS et une forge

Intégration continue ([wikipedia w])

Introduction

  • L'intégration continue (continuous Integration) est une pratique de développement où les membres d’une équipe intègre fréquemment (au moins une fois par jour) leur travail

  • Un outil automatique est chargé de vérifier et de détecter les problèmes d’intégration au plus tôt

  • Est issu d'Extreme Programming

  • S’appuie généralement sur un serveur d’intégration continue

Pratiques recommandées

Maintenir un référentiel unique des sources

  • en général avec un outil de gestion de versions

  • tous les développeurs doivent utiliser ce référentiel

  • tout ce qui est nécessaire à la compilation doit se trouver dans le référentiel (tests, fichier de propriétés, scripts SQL, …)

  • limiter l’utilisation des branches (favoriser la branche principale)

  • ne placer aucun produit de la compilation dans le référentiel

Automatiser les compilations

  • chaque tâche répétitive doit être automatisée (création de la BD, …) \art{(à partir d’une machine vierge, un checkout et une unique commande doit permettre d’obtenir un système utilisable)}

  • l’outil doit permettre de ne recompiler que ce qui est nécessaire

  • l’outil doit permettre de définir différentes cibles

  • le système de compilation de l’IDE ne suffit pas

Rendre les compilations auto-testantes

  • un ensemble de tests automatisés doit être disponible

  • la compilation doit inclure l’exécution des tests

  • l’échec d’un test doit être reporté comme un échec de la compilation

Tout le monde valide chaque jour

  • des validations fréquentes favorisent une détection rapide des problèmes d’intégration

  • validation fréquente

    • donc moins d’endroits où les conflits peuvent se produire

    • donc détection plus rapide des problèmes

  • des validations fréquentes encouragent les développeur à découper leur travail en tâches

Chaque validation doit compiler la branche principale sur une machine d’intégration

  • permet d’avoir une compilation de référence

  • la validation dépend de la réussite de cette compilation

  • c’est en général le rôle du serveur d’intégration continue

  • le serveur notifie le développeur de la réussite de la compilation

Maintenir une compilation courte

  • pour obtenir un feedback rapide

  • XP recommande un maximum de 10mn

Tester dans un environnement de production cloné

  • chaque différence avec l’environnement de production peut conduire à des résultats de tests différents

  • parfois difficile mais il faut s’en approcher au maximum

Rendre disponible facilement le dernier exécutable

  • chacun doit pouvoir utiliser la dernière version du système

Tout le monde peut voir ce qui se passe

  • le but de l’intégration continue est de faciliter la communication

  • tout le monde doit voir l’état de la branche principale (compilation en cours, échec de la compilation, …)

  • et les changements apportés

Automatiser le déploiement

  • la copie des exécutables dans les différents environnements doit être automatique

  • il peut être nécessaire de mettre aussi en place un mécanisme pour annuler un déploiement (en production par exemple)

Intégration continue vs. outils d’intégration continue

  • L’intégration continue ne dépend pas d’un outil

  • C’est une pratique qui doit être acceptée par l’équipe de développement

    • la dernière version du code dans le référentiel doit toujours compiler et passer tous les tests

    • le code doit être validé fréquemment

  • Processus

    1. avant la validation, s’assurer que la compilation et les tests réussissent

    2. prévenir l’équipe de ne pas mettre à jour le référentiel à cause de l’intégration en cours

    3. valider

    4. aller sur la machine d’intégration, récupérer la dernière version du référentiel et s’assurer que la compilation et les tests réussissent

    5. prévenir l’équipe que les mises à jour peuvent reprendre

  • Un outil d’intégration continue permet d’automatiser l’étape 4

Gestion des binaires ([wikipedia w])

Dépôt de binaires

  • Le dépôt de binaires permet de centraliser l’entreposage et la distribution des résultats de la compilation

  • Il doit s’intégrer avec:

    • le serveur d’intégration continue,

    • le système de build utilisé.

  • Il gère également le contrôle d’accès aux différents paquets

Table 1. Outils de gestion des binaires par langage
Java Python

Archiva, Nexus, Artifactory,

pip, PyPI

Déploiement ([wikipedia w])

Livraison continue

  • La livraison continue (continuous delivery) est une approche visant à

    • produire un logiciel en cycles courts,

    • pouvoir livrer le logiciel à tout moment.

  • La construction, les tests et la distribution doivent être plus fréquent

  • Cette approche s’appuie sur un déploiement fiable et reproductible

  • La décision de déployer reste manuelle

Pipeline de déploiement

  • Un pipeline de déploiement couvre trois aspects

    Visibilité

    Toutes les phases du processus de la livraison sont visibles par tous les membres de l’équipe

    Feedback

    Les problèmes doivent être remontés au plus tôt à l’équipe

    Automatisation

    Toute version du logiciel peut être déployée sur n’importe quelle plate-forme automatiquement

  • La construction du projet est décomposée en étapes successives

    • chaque étape améliore la confiance dans le logiciel

    • les premières étapes fournissent un feedback rapidement

Déploiement continu

  • Le déploiement continu (continuous deployment) doit permettre de déployer automatiquement en production tout changement

  • Peut conduire à mettre à jour le système en production plusieurs fois par jour

Infrastructure as code

  • L'Infrastructure as code consiste à gérer et installer les infrastructures (serveur physique, machine virtuelle, …) en utilisant des fichiers de description exécutables par la machine

  • Ces descriptions sont ensuite ajoutées dans le VCS pour maintenir les différentes versions

  • C’est une réponse à la question du passage à l’échelle pour l’installation de machines

Infrastructure as code

Ansible/Ansible Tower, Puppet/ Foreman, Chef,

Machine virtuelle

  • Une machine virtuelle (VM) est une émulation d’un système informatique

  • Elles permettent d’optimiser l’usage des serveurs physiques et apporte de la souplesse

Machine virtuelle

Virtualbox, QEMU,

Conteneur logiciel

  • La virtualisation au niveau du système d’exploitation permet de mettre en place des espaces isolés nommés conteneur

  • Dans un conteneur, les processus sont isolés et l’OS propose un mécanisme de gestion des ressources

  • C’est une version évoluées du mécanisme de chroot disponible sous Unix