Voici quelques notes sur le CI ( Continuous integration), CD (Continuous Deployment), IAC (Infrastructure as a Code)

En cours

A ranger :

  • RocketChat : plateforme de communication collaborative pour organiser et centraliser l’ensemble des communications des équipes.

Faire un plan avec les trucs ci-dessous :

  • https://www.padok.fr/blog/outils-devops
  • https://xebialabs.com/the-ultimate-devops-tool-chest/open-source/

1 – Fonctionnement

Source : http://igm.univ-mlv.fr/~dr/XPOSE2012/Integration%20Continue/concept.html#1

Voici un plan expliquant les étapes de l’intégration continue

cisecuritychecking2

Coté infrastructure : Devops

source : https://blog.octo.com/bd-pet-vs-cattle/

l’Infrastructure as Code (IAC) nous permet de facilement et rapidement détruire et remonter des machines. Cela a donc grandement impacté la façon de travailler des ops ! Plutôt que de travailler sur des serveurs spécifiques qu’on maintient et qu’on bichonne des mois durant, on préfère détruire et remonter les machines régulièrement. On parle de « Pet vs Cattle ».

Différence entre déploiement continu et livraison continue : le déploiement continu réclame une validation humaine pour passer en production

A – Explication

Source : https://blog.myagilepartner.fr/index.php/2018/02/18/integration-continue/

L’intégration continue est un ensemble de pratiques d’ingénierie logiciel permettant de tester automatiquement les aspects techniques d’un produit à différents niveaux. Elle a pour but d’éviter au maximum de potentielles régressions futures.

Pratique pour Java car besoin de compilation

Dans le cadre de micro-service : but du CI est de produire une image OCI dans une registry puis faire un push dans registry -> Système -> OK mais rate le coche de l’automatisation

Le top : git push ou merge du dépot produise un évenement + déclenchement du build de l’image

  • La Gestion de contrôle de Sources ( VCS ou SCM ) qui permet de rassembler le code, les branches et les versions.
  • La Plate-forme d’intégration continue qui sera en lien avec le VCS et effectuera des tests, ou bien générera des rapports aux développeurs.
  • La plate-forme de livraison qui permet le « provisionning » des versions sur des serveurs, des clusters ou toute autre plateforme de production.

B – Les environnements

  • Dev : Code sur la machine du développeur
  • Recette : test sur un environnement stable + test du developpeur si tout OK
  • Pré-prod : Plateforme identique à la production
  • Prod : C’est la version final -> les livraisons sur cette plateforme sont directement à destination des utilisateurs finaux.

C – Les tests

  • Les tests unitaires et TDD : Le but est de créer un test pour chaque fonction (technique et non fonctionnelle) créée dans le but de tester qu’elle fonctionne bien
  • Les tests fonctionnels et BDD: Ils permettent de tester chacune des user-stories avec plusieurs scénarios différents.
  • Les tests de qualimétrie : Ils permettent de mesurer la qualité du code.
  • Les tests de performance : Voir plus bas
  • Les tests de charges : mettre énormément à contribution l’application pour voir comment celle-ci résiste à des charges extrêmement fortes

CI : PHP

CI : JAVA

CD

2 – Les outils

A – SCM/VS : Gestion de code source

Description: Permet d’éviter les conflits entre le code des développeurs et versionning

  • avoir un accès continu et régulier aux codes « commit »,
  • commenter ses actions,
  • créer des branches à chaque changement, et ne pousser que du code sur le dépôt.
  • GIT : Top – Permet un historique – Gestion des droits système de gestion décentralisé le plus couramment utilisé, car il permet d’offrir la notion de dépôt multibranche et permet à tout un chacun d’en cloner une partie précise sur sa propre machine.
  • SVN : Old school – Permet un historique c’est un système de gestion centralisée historique, et n’est plus très utilisé.
B – CI – Gestion de l’intégration continue

Voici ma liste avec mes commentaires des outils CI

  • 1 – Jenkins : GRATUIT – Top & open source – Interface vieillote – Beaucoup de plugin -> https://www.edureka.co/blog/cheatsheets/jenkins-cheat-sheet/
  • 2 – Go : GRATUIT – Simple et moderne – – Opensource
  • 3 – Drone.io : GRATUIT – En docker + Pipeline en yaml ( Comme Ansible)
  • 4 – Gitlab CI : GRATUIT – Top mais un peux lourd – la version payant n’apporte rien – top pour kubernetes. Permets la gestion de projets, de version de code, de tickets, l’intégration et le déploiement continu
  • Concourse CI : Pipeline CI en GO – https://concourse-ci.org/
  • Buildbot : GRATUIT – Pipeline en python
  • Gitlab CI : Lourd – Intégrer un gitlab – En ruby – Fichier en ymal
  • BOSH : GRATUIT – PAAS – Pas assez suivi, trop jeune https://bosh.io/docs/
  • Cruise control : GRATUIT – Trop vieux
  • Spinnaker : Dans le cloud – Open source -> NON
  • Travis CI : PAYANT – You will receive unlimited builds and 3 concurrent jobs for free
  • Codeship : PAYANT – ( 100 build) par mois
  • Circle CI : PAYANT – SELF-HOSTED – CircleCI server licenses are $35/month per user
  • Bambou : PAYANT – Jusqu’à 10 tâches
  • Teamcity : PAYANT – 100 build configurations + 3 build agents
  • Bitrise : PAYANT – nécessite un compte Bitrise
  • Shippable : PAYANT – 150 builds/month for private projects
  • Spinnaker : Comprend pas trop
  • Snap : Mort
C – Build – Gestion VM & conteneur
  • 1 – Docker et Docker-Compose : Solution de gestion d’images et de contenus applicatifs -> Top
  • 2 – Packer : Top – Permet de préparer des templates d’images, afin de déployer des VM plus rapidement
  • 3 – Kubernetes : Facultatif -> Gestionnaire de cluster. Kubernetes lié à Docker, par exemple, vous permettra d’avoir une solution en mode PaaS assez simplement.
  • 4 – Openshift : Facultatif -> solution regroupant 3 briques (Docker, Kubernetes et Atomic) vous permettant d’avoir une solution SaaS.

Les autres

  • NAnt : .NET build
  • Gradle : ???
  • Grunt : Javascript build
  • sbt : En scala

D – Devops : La gestion et l’automatisation des déploiements

Source : https://blog.syloe.com/usine-logicielle-devops-pour-tous-les-cloud/

  • Un outil de communication collaboratif pour permettre aux équipes DevOps de communiquer simplement, même à distance.
  • Un gestionnaire de projet pour suivre l’évolution du travail et gérer les anomalies et les demandes d’évolution.
  • Un gestionnaire de version de code pour stocker les développements et les partager au sein des équipes DevOps.
  • Un outil de qualité de code pour vérifier la conformité du code aux règles de développement.
  • Un outil d’intégration continue pour gérer les chaînes d’automatisation des déploiements.
  • Un gestionnaire de dépôts pour stocker les livrables à déployer sur les environnements.
  • Un gestionnaire d’environnement pour automatiser la création et la suppression des environnements.
  • Des outils de déploiement pour le ou les Cloud sur lesquels seront déployées les applications.
  • Un outil de supervision pour surveiller les applications déployées.
  • Un gestionnaire de log pour analyser le comportement des applications déployées.
  • 1 – Ansible : outil de configuration et de gestion de serveurs
    • Ne nécessite l’installation d’aucun logiciel supplémentaire
    • Contient modules pour controller n’importe quoi
  • Ansible, de son côté utilise le YAML pour ses jeux d’instructions. Si bon nombre d’outils nécessitent l’utilisation d’un agent sur la machine ciblée, Ansible n’en requiert aucun. Ansible : qui
  • 2 – Rundeck : Logiciel simple d’orchestration
  • 3 – Terraform nous permet de déployer notre infrastructure : en partant des templates fabriqués avec Packer, Terraform créé nos conteneurs Terraform : outil de « Infrastructure as Code » qui supporte les principaux fournisseurs Cloud AWS, Azure des infrastructures logicielles (VMware, Docker, Kubernetes …) et bien d’autres encore.
  • 3 – StackStorm : Automatisation de workflow : Infrastructure management Sensor, rule, action – Python
  • Saltstack : GRATUIT – comme ansible en plus lourd – Python
  • 4 – Overcast : Petit tools pratique – deploie de VM sur le cloud – pas de site pas beaucoup doc: https://github.com/andrewchilds/overcast
  • Cloudify : Pas mal mais p-e un peu lourd a configurer – Open source cloud orchestration en python et yaml
  • Consul : J’ai rien compris – It is a tool for discovering et configuring services in your infrastracture
  • Etcd : Rien compris non plus A highly(available key value store for shared configuration and service discovery
  • Doozerd ou Doozer : Pratique mais facultatif -> est un magasin hautement disponible et totalement cohérent pour de petites quantités de données extrêmement importantes. Lorsque les données changent, il peut avertir immédiatement les clients connectés (pas de sondage), ce qui le rend idéal pour les données peu fréquemment mises à jour pour lesquelles les clients veulent des mises à jour en temps réel. Doozer est idéal pour le service de nom, les élections de base de données et les données de configuration partagées entre plusieurs machines.
E – Deployment
  • 1 – Rundeck : Cool en java mais lourd
  • 2 – Kitchen-CI : Test de déploiement : https://blog.octo.com/vos-tests-dinfrastructure-de-bout-en-bout-avec-kitchen/
  • Octopus deploy : interface sympa https://www.dnsstuff.com/software-deployment-tools
  • Capistrano : pas mal car open source -> https://github.com/capistrano/capistrano
  • JUJU : GRATUIT – Orchestrateur pour manager les charms – Config YAML – Pas mal dans le futur
  • IBM UrbanCode Deploy : PAYANT – et par IBM mais via gestion interface
  • NOLIO, elasticbox : PAYANT
  • XL Deploy -> PAYANT – Trop lourd
  • Spinnaker : GRATUIT mais compliqué a comprendre
  • Mcollective : Pour python
  • Zookeeper : Gestion de configuration -> JE vois pas trop l’utilité
  • Serf : Outil pour les nodes de cluster – A test pas trop d’info sur le site :
F – Tests du code

Les outils de tests les plus populaires sont les suivants :

ans le même style que l’acronyme I.N.V.E.S.T. utilisé pour rappeler  quelques règles utiles pour les user-stories, l’acronyme F.I.R.S.T.  permet également de rappeler des règles pour les tests unitaires.

Avec ansible : voir artciel suivant : https://blog.octo.com/introduction-aux-ansible-content-collections/

Tests qualimétrie

  • SonarQube : permet la vérification de la couverture de code, du respect des règles de programmation, la détection des bugs potentiels et bien d’autres.

Test fonctionnels

  • Imacro : Facile a mettre en place ans le navigateur
  • Selenium :
  • Protactor : Pour Angular and AngularJS applications
  • Watir : Plus a jour depuis 2018
  • robot-framework-docker : Léger et pratique et en java du coup on peut rajouter des libraries

Test de charge

Autre

Nexus repository : permet la gestion de dépôts centralisés, de cache pour des dépôts externes, support de Maven/Java, npm, NuGet, RubyGems, Docker, P2, OBR, APT et YUM et bien d’autres.

6 – Monitoring/log

Les outils de cette partie sont situés sur d’autres pages du site

Les environnements de Test, PreProd, Demo doivent eux aussi être monitorés au même titre que la production.

Exemple de CI,CD

https://blog.alterway.fr/construire-un-pipeline-de-deploiement-continu-avec-kubernetes-et-concourse-ci.html

FAQ

Source :

  • https://blog.myagilepartner.fr/index.php/2019/08/21/le-canary-release/
  • https://blog.myagilepartner.fr/index.php/2019/09/12/dark-launch/
  • https://blog.myagilepartner.fr/index.php/2018/06/24/quest-ce-que-le-chaos-monkey/
  • Canary release : Le canary Release est un pattern qui permet de mettre une petite tranche de population sur la version N + 1 ; la tranche restante restera temporairement sur la version N. Cela permet de tester si tout va bien avant de déployer sur l’ensemble des utilisateurs.
  • Dark launch : Le Dark Launch est également un pattern associé au Blue Green deployment ;  il propose de switcher progressivement la population de la version N à la version N+1. Cela permet de tester progressivement notre nouvelle version qui pourrait par exemple rapidement montrer des soucis utilisateurs.
  • BizDevOps Bizops
  • Chaos Monkey (Facultatif): Technique de test de résilience des infrastructures informatiques