====== Automatisation & CI/CD ====== Méthodes et outils de Développement et d'Intégration Continue et Automatisation de tâches d'administration. ===== Versionning ===== ==== Git ==== Git est un client pour les logiciels de versioning basés sur Gitlab ou GitHub [[Utiliser Git pour push du code sur un repo]] [[https://ohshitgit.com/fr|Ohshitgit : résoudre des problèmes courants avec Git]] ==== Gitlab ==== GitLab est un logiciel de versioning de code open source auto-hébergeable, avec une interface web et des fonctionnalités d'aide au développement et à l'intégration logicielle. [[https://docs.gitlab.com/install/docker/installation/|Installation de Gitlab via docker compose]] [[https://www.it-connect.fr/comment-generer-une-paire-de-cles-ssh-et-lutiliser-avec-gitlab/#II_Generer_les_cles_SSH|Générer des clés SSH pour gitlab]]^ ===== Intégration continue ===== ==== Jenkins ==== Jenkins est un outil d'intégration continue open source. Il permet d'automatiser le workflow d'intégration d'un logiciel étape par étape : {{ :exemple_workflow_cicd.png?1000 |Exemple de workflow d'intégration logicielle automatisé avec Jenkins}} Dans l'exemple ci-dessus, un programme Java est en cours de développement. Jenkins détecte de nouvelles modifications sur le dépôt GitLab et récupère la dernière version du code produite et testée localement par le développeur. Maven intervient pour le compiler, puis effectue les tests unitaires afin de vérifier que le programme fonctionne correctement. Un second intervenant, SonarQube, analyse la qualité du code dans le but de déceler des vulnérabilités ou des problèmes de performance. Enfin, Jenkins génère un artefact du programme, prêt à être déployé, et le met à disposition des intégrateurs. Ce pipeline est exécuté à chaque nouveau push de code sur le dépôt et notifie le développeur de l'issue de celui-ci (s'il y a erreur ou pas). ==== SonarQube ==== SonarQube est un outil open source d'analyse de code. Il permet de vérifier la qualité d'un code source afin d'y déceler des vulnérabilités ou des problèmes de performances. ===== Orchestration de configurations ===== ==== Ansible ==== Ansible est un outil d'orchestration permettant de déployer des configurations sur des nœuds distants via le protocole SSH. Son intérêt principal réside dans son approche déclarative qui simplifie le développement des playbooks : * Lisibilité : Les playbooks décrivent clairement l’état souhaité, sans se perdre dans les détails d’implémentation. * Idempotence : Les playbooks peuvent être exécutés plusieurs fois sans risque, Ansible ne réalisant que les changements nécessaires. * Maintenabilité : Les playbooks sont plus faciles à maintenir et à faire évoluer que des scripts shell complexes. === Formations / tutoriels === [[https://openclassrooms.com/fr/courses/2035796-utilisez-ansible-pour-automatiser-vos-taches-de-configuration|📕 Apprendre à utiliser Ansible (OpenClassRoom)]] [[https://blog.microlinux.fr/formation-ansible/|📕 Apprendre à utiliser Ansible (MicroLinux)]] [[https://gist.github.com/Tes3awy/dd73fdf0cd7e650d55a89d254a0005aa|Installer Ansible sous WSL (debian/ubuntu)]] [[Créer un utilisateur pour Ansible sur les machines clientes]] === Debug === [[https://stackoverflow.com/questions/42462435/ansible-provisioning-error-using-a-ssh-password-instead-of-a-key-is-not-possibl|Using a SSH password instead of a key is not possible]] === Outils === [[https://github.com/haidaraM/ansible-playbook-grapher|Ansible Playbook Grapher : représenter un playbook ansible sous forme de Graph]] ==== Puppet ==== Puppet est un outil d'orchestration comme Ansible, mais utilisant un agent sur les nœuds [[https://doc.ubuntu-fr.org/puppet|Déploiement de configurations Linux avec Puppet]] ==== Salt ==== Salt est un outil d'orchestration comme Ansible, mais utilisant un agent sur les nœuds [[https://docs.saltproject.io/en/latest/contents.html|📖 Documentation officielle de Salt]] ===== Automatisation de flux ===== ==== n8n ==== n8n est un workflow d'automatisation Open Source très puissant basé sur NodeJS. [[https://lcdgg.thomascyrix.com/2021/02/18/n8n-et-nodered-automatisez-vos-flux/|Automatisez vos flux avec n8n et NodeRed]] [[https://datascientest.com/n8n-tout-savoir|Tout savoir sur n8n]] [[https://ordimission.com/blog/2023/10/20/installer-n8n/|Installation de n8n]] [[https://community.n8n.io/t/n8n-secure-cookie-to-false/43942|Désactiver le cookie sécurisé]] ===== Déploiement de machines virtuelles ===== Outils d'automatisation de déploiement de machines virtuelles. ==== Vagrant ==== Vagrant est un utilitaire de déploiement et de provisionnement automatique de machines virtuelles locales. Il permet de créer des environnements de tests ou de formation très rapidement à partir d'images systèmes existantes (générées avec Packer). [[https://learn.hashicorp.com/collections/vagrant/getting-started|Commencer avec Vagrant]] [[https://itectec.com/superuser/how-to-force-vagrant-to-have-a-single-bridged-network-interface/|[Débug] Ajouter une carte réseau en accès par pont (bridge) à une VM avec Vagrant]] ==== Packer ==== Packer permet de générer des images systèmes préconfigurées pour être déployées sur une plateforme de virtualisation (VirtualBox, VMWare, Microsoft Azure, AWS EC2...) [[https://devopssec.fr/article_to_pdf_process/decouverte-utilisation-packer|Découverte de Packer]] ==== Terraform ==== Terraform permet d'automatiser le déploiement d'environnements informatiques préconfigurés dans le cloud. [[https://developer.hashicorp.com/terraform?product_intent=terraform|📖 Documentation officielle Terraform]] [[https://github.com/GoogleCloudPlatform/terraformer|Terraformer : Créer un fichier Terraform à partir d'une infrastructure existante]]