SlideShare uma empresa Scribd logo
1 de 47
Allez plus loin dans l'intégration
     continue avec Jenkins

       Sébastien Brousse (Zenika)
                    -
      D’après Kohsuke Kawaguchi
         (Jenkins / CloudBees)
Sébastien Brousse


• Consultant Zenika Ouest
• Formateur

• Contribution OSS
                            Jenkins        Automatisation
• Conférences, JUG
                                   Continuous Delivery
                        TDD                            Tests
                                 Intégration continue
                            Maven     Forge logicielle
Auteur de la présentation


• Kohsuke Kawaguchi
  • Créateur / Project lead Jenkins
  • Architecte @ CloudBees
  • Mais aussi :
     – RELAX
     – JAXB, JAX-WS, JAXP, etc.@ Sun
     – Une partie de GlassFish V3
L’intégration continue ?


• « Intégration » ?
  Différents processus : compilation, exécution des tests,
  opérations sur base de données, packaging, déploiements, etc.

• « Continue » ?
  L’effort d’intégration augmente avec le temps écoulé depuis la
  dernière intégration. La régularité diminue les risques.
Composantes de l’IC


• Éléments composants l'intégration continue :
   • Mécanismes de surveillance du changement (on surveille un
     environnement)
   • Gestionnaire de versions
      – Indispensable même sans intégration continue
   • Ensemble de scripts pour implémenter les processus
     d'intégration
   • Mécanismes de notifications


• L’IC n’est pas un concept récent
L’IC à l'heure actuelle


• Une méthode reconnue
• Des outils matures :
   •   Gestionnaire de versions : SVN
   •   Build : Maven, Ant/Ivy, Gradle
   •   Analyseurs : Checkstyle, PMD, Sonar
   •   Gestion de documentation : Wiki
   •   Test : Junit, Cobertura, Selenium

• Des bonnes pratiques malgré tout encore partiellement adoptées
  et restreintes surtout aux développeurs
« L’intégration continue c’est pour les
            développeurs »
L’IC : les idées reçues


• Des outils développés pour les développeurs
   • Quel opérationnel utilise Maven pour déployer en
     production ?
   • Quel fonctionnel regarde les rapports de couverture de
     tests ?
   • Quel DBA code des scripts de migration avec Ant ?

• Chaque monde a ses propres outils, son langage, sa vision
• La barrière technique empêche la communication et la
  compréhension
La promesse de l’IC


• L’intégration continue comme chaînon manquant entre les
  équipes
   • Abstraire les concepts techniques au travers d’un
      langage commun
        • « livrer la dernière version aux exploitants »
        • « installer la v2.3 en qualification »
        • « valider la fonctionnalité »

• Toutes ces actions en 1 clic !
• Des retours visuels et simples : Vert = OK !
• Le tout de manière automatisé
L’objectif de l’IC


• Objectifs
  • Mettre en œuvre un ensemble de moyens pour que les
    processus d’intégration d’un projet deviennent un « non
    événement »

• Moyens
  • Avoir un processus rapide, répétable et automatisable

• C’est tout ?
L’intégration continue


• Qu’est-ce qui est capable de :
  • Analyser des rapports de tests ?
  • Vérifier qu’il n’y a pas d’erreurs lors de l’exécution d’une
    migration de base de données ?
  • Transférer des archives d’un serveur à un autre ?
  • Surveiller la correction d’un bug sur le gestionnaire de
    sources ?
  • Construire des projets à la fois en Java, .NET et C++ ?
  • Ecrire un email pour vous rassurer ?
  • Afficher la météo ?
Jenkins
Jenkins-ci.org


•   Serveur d’Intégration Continue Open Source
•   Ecrit en Java
•   Existe depuis 7 ans
•   Facile à installer et utiliser
•   Extensible via 350+ plugins
•   Largement utilisé
    • 11K+ installations
    • 26K+ si on tient compte de l’ancien nom (Hud…)
L'état de l'art de l'IC


                               6:publish metrics

                2:update




                                        4:deploy
     1:commit

                           3:share


                7:notify             5:install
What’s Next ?
Toujours plus d’automatisation
Du coté des outils de dév…


• Progrès constants au niveau des outils de développement

• Invocation non-interactive sous Windows
   • Visual Studio  MSBuild

• Outils offrent une sortie pouvant être utilisée par une
  machine
   • CVS  Subversion
   • Tests frameworks

• Demande de plus en plus forte des utilisateurs pour un
  accès batch / CLI à leurs outils
Du coté des navigateurs…


• … la prochaine « grande bataille »
Du coté des navigateurs…


• Quid de Selenium ?
   • Preuve que le besoin est là, mais la solution n’est pas
     optimale


• Idéalement, il faudrait:
   • Pas d’affichage nécessaire
   • Possibilité d’embarquer le navigateur dans le processus, afin
     d’offrir une meilleure délimitation des comportements
   • Plus de proxy
   • Accès direct aux logs consoles du navigateur
   • Injection de comportements / d’erreurs
Intégration Continue, Cloud, VMs
Evolutions des processeurs
Le plein de puissance !


• De plus en plus de puissance de calcul
• De moins en moins cher




• Ratio Performance/Prix de la puissance de calcul meilleur
  que jamais
• Ratio Performance/Prix des personnes évolue peu
•  Utiliser les ordinateurs efficacement est primordial !
Plus de Machines

Machines Physiques
Plus de VMs

Machines Physiques   Machines Virtuelles
Plus de processus

Machines Physiques   Machines Virtuelles   Processus
Le plein de puissance !


• Plus de puissance mais plus de parallélisme !
   • À tous les niveaux

• Des outils avec un mode « parallèle »
   • Maven 3 : construction des modules
   • Junit : lancement des tests
   • Selenium Grid : exécution des tests fonctionnels
Apport du Cloud et des VMs


• Mise à disposition automatique et en temps réel de
  machines virtuelles
• Permet de changer la donne :
   • Cloner une machine virtuelle « fraîche » à chaque exécution
     des tests
   • Transformer une machine de tests « Quality Assurance » en
     production sans redéployer

• Instantanés (Snapshots) des VMs
   • Lors de tests en échecs
Cloud & SaaS


• SaaS = Software as a Service, hébergé dans le Cloud
   • Sauce OnDemand : Selenium
   • DeviceAnywhere : Tests d’applications mobiles
• Un autre moyen de simplifier et automatiser la mise à
  disposition des éléments nécessaires
• Flexibilité grâce au Just-In-Time
• Tarifs au temps consommé (pour Cloudbees)
          Nb Machines                Nb Machines




                           Temps                     Temps
Automatiser, encore et encore !


• Automatiser à tous les niveaux :
   • Machines, OS, middlewares, outils


• Automatiser grâce :
   • Au Cloud, aux VMs, aux SaaS


• D’innombrables perspectives d’automatisation vous sont
  ouvertes !

• Utilisation des serveurs d’Intégration Continue pour fédérer
  toutes ces briques : Jenkins
Jenkins


• Exécution de builds distribués depuis 5 ans

• Permet de contrôler et gérer plus de 100 machines depuis
  un seul endroit

• Offre un mécanisme de plugin permettant d’étendre
  facilement ses possibilités
L’intégration continue en tant que
             Fonction
Une Fonction ?


• Penser un build/test comme une fonction
   • Par exemple : F(objet source) = métriques qualité
   • Pas d’effets de bord


• L’évaluation de la fonction peut être coûteuse
   •   Faire de l’asynchrone
   •   L’« objet source » est créé en premier
   •   Calcul des métriques qualité viennent par la suite
   •   Calcul des métriques qualité découpé en plusieurs étapes
Une Fonction ?


• F(objet source) = métriques qualité

• En pratique, on a F(commit) = métriques qualité

• Pourquoi les commits :
   • Déterminent sans ambiguïté une arborescence source
   • Nombreux outils déjà disponibles
   • Copie simple et rapide d’une machine vers une autre
Dilemme des commits SVN


• Imaginez un projet avec de nombreux tests
• Le développeur se concentre sur ce qu’il doit faire
   • Le reste, comme par exemple l’exécution des tests, est
     effectué par le serveur d’Intégration Continue
• Un commit est nécessaire pour l’Intégration Continue
• Mais vous ne voulez pas commiter sans valider via l’IC
• Donc, vous ne pouvez pas créer de commits                   


•  Solution : Utilisation d’un gestionnaire de version
  distribué (Distributed VCS comme Git, Mercurial, etc.)
Distributed VCS


• Permet de séparer la notion de commit de la notion de
  partage

• Comme pour SVN, commit = arborescence source

• Mais possibilité de partager seulement une partie des
  commits (avec SVN, pas de commit non partagé)
   •  Partage sélectif
Partage sélectif


• Aussi appelé Revue de Code
• Vous partagez votre modification avec quelques personnes
• La modification est évaluée
Partage sélectif


•   Aussi appelé Revue de Code
•   Vous partagez votre modification avec quelques personnes
•   La modification est évaluée
•   Puis vous partagez de manière globale cette même
    modification
IC en tant que Revue de Code



 Développement     Jenkins / Gerrit   Central Repo
IC en tant que Revue de Code



 Développement     Jenkins / Gerrit   Central Repo
IC en tant que Revue de Code



 Développement     Jenkins / Gerrit   Central Repo
IC en tant que Revue de Code



 Développement     Jenkins / Gerrit   Central Repo
IC en tant que Revue de Code



 Développement     Jenkins / Gerrit   Central Repo
IC en tant que Revue de Code


• Plusieurs façons d’implémenter ce fonctionnement

• Surveiller les commits locaux

• Envoyer (push) certains commits pour demander à l’IC de
  le tester

• Lors du push sur le repository central, le repo peut
  consulter les résultats du serveur d’IC via le commit ID
   • Rejet des changements non validés
   • Réduction du temps entre le push et l’apparition dans le repo
IC en tant que Revue de Code


• « Liberal branching »
   • Chaque développeur pousse ses commits sur sa branche
   • Jenkins les récupère et les intègre dans le repo central

                                                       Branche Dev1


                                                       Branche Dev2




                                                      Central Repo
Fini les tests en local !


• Laisser travailler les serveurs d’IC
• Ne pas bloquer les développeurs est primordial
• Mieux vaut attendre pour avoir les résultats via l’IC, plutôt
  que les lancer en local



•  Plusieurs réponses possibles
   • Dépend des équipes, des workflows mis en œuvre
   • Mais quelque soit l’implémentation choisie, l’Intégration
     Continue en tant que Fonction est toujours là
Conclusion


• De plus en plus de puissance de calcul à disposition
   • De plus en plus de parallélisme à exploiter
   • Impacte l’ingénierie logicielle : comment bénéficier du
     parallélisme ?

• De nombreuses tendances poussent à l’automatisation :
   • Cloud, VM, DVCS, outils développeurs avec batch mode, …


• Laisser les ordinateurs faire le travail répétitif
• Laisser les décisions aux personnes
• « Auparavant, l’intégration continue était la noisette dans le
  chocolat, maintenant c’est le chocolat  »
Questions ?

Mais conteúdo relacionado

Mais procurados

L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tousAurelien Navarre
 
Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transcolaurent_opnworks
 
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIsPetit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIsOCTO Technology
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/HudsonSonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudsonxmacina
 
Intégration continue
Intégration continueIntégration continue
Intégration continueKlee Group
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?Fou Cha
 
JCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsJCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsRossi Oddet
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelCocoaHeads France
 
Qualité & Industrialisation des développements mobiles sur iOS & Android
Qualité & Industrialisation des développements mobiles sur iOS & AndroidQualité & Industrialisation des développements mobiles sur iOS & Android
Qualité & Industrialisation des développements mobiles sur iOS & AndroidThibaud CAVIN
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration ContinueXavier Warzee
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOpsJeoffrey Bauvin
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
DevMobCA: Continuous integration
DevMobCA: Continuous integrationDevMobCA: Continuous integration
DevMobCA: Continuous integrationOlivier Destrebecq
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetOlivier BAZOUD
 
DevOps - from idea to production
DevOps - from idea to productionDevOps - from idea to production
DevOps - from idea to productionHabib MAALEM
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureJonathan Bonzy
 
TDD for DevOps with Chef
TDD for DevOps with ChefTDD for DevOps with Chef
TDD for DevOps with ChefOlivier BAZOUD
 

Mais procurados (20)

L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
 
Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transco
 
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIsPetit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
Petit déjeuner OCTO Technology - Nouvelles Architectures Web Front-End et APIs
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/HudsonSonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
JCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsJCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec Jenkins
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter Meuel
 
Qualité & Industrialisation des développements mobiles sur iOS & Android
Qualité & Industrialisation des développements mobiles sur iOS & AndroidQualité & Industrialisation des développements mobiles sur iOS & Android
Qualité & Industrialisation des développements mobiles sur iOS & Android
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration Continue
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOps
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
REX Openshift à la Poste
REX Openshift à la PosteREX Openshift à la Poste
REX Openshift à la Poste
 
DevMobCA: Continuous integration
DevMobCA: Continuous integrationDevMobCA: Continuous integration
DevMobCA: Continuous integration
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
 
DevOps - from idea to production
DevOps - from idea to productionDevOps - from idea to production
DevOps - from idea to production
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
TDD for DevOps with Chef
TDD for DevOps with ChefTDD for DevOps with Chef
TDD for DevOps with Chef
 
Meetup aix-js-28-08-2017
Meetup aix-js-28-08-2017Meetup aix-js-28-08-2017
Meetup aix-js-28-08-2017
 

Semelhante a What's Next Replay - IC / Jenkins

What’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontWhat’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontZenika
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...Jasmine Conseil
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsFactoVia
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsAZUG FR
 
Migrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaCédric Leblond
 
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueOmnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueXavier Callens
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Cellenza
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOpsMicrosoft
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Julien Dubois
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryDamien Goldenberg
 
Introduction DevOps & containarization des applications
Introduction DevOps & containarization des applicationsIntroduction DevOps & containarization des applications
Introduction DevOps & containarization des applicationsJulien Chable
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement MicrosoftChristophe HERAL
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outilsAgile Tour 2009 Québec
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Microsoft
 
Accéder au développement Dot.Net et Asp.Net
Accéder au développement Dot.Net et Asp.NetAccéder au développement Dot.Net et Asp.Net
Accéder au développement Dot.Net et Asp.NetFrédéric Vandenbriele
 
Realworld cd pipelines
Realworld cd pipelines Realworld cd pipelines
Realworld cd pipelines TREEPTIK
 

Semelhante a What's Next Replay - IC / Jenkins (20)

What’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontWhat’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. Darmont
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Migrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds Java
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueOmnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOps
 
Maven
MavenMaven
Maven
 
Symposium TFS - DevOps avec Microsoft
Symposium TFS - DevOps avec MicrosoftSymposium TFS - DevOps avec Microsoft
Symposium TFS - DevOps avec Microsoft
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous Delivery
 
Introduction DevOps & containarization des applications
Introduction DevOps & containarization des applicationsIntroduction DevOps & containarization des applications
Introduction DevOps & containarization des applications
 
Dev opsday case study
Dev opsday   case studyDev opsday   case study
Dev opsday case study
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outils
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1
 
Accéder au développement Dot.Net et Asp.Net
Accéder au développement Dot.Net et Asp.NetAccéder au développement Dot.Net et Asp.Net
Accéder au développement Dot.Net et Asp.Net
 
Realworld cd pipelines
Realworld cd pipelines Realworld cd pipelines
Realworld cd pipelines
 

What's Next Replay - IC / Jenkins

  • 1. Allez plus loin dans l'intégration continue avec Jenkins Sébastien Brousse (Zenika) - D’après Kohsuke Kawaguchi (Jenkins / CloudBees)
  • 2. Sébastien Brousse • Consultant Zenika Ouest • Formateur • Contribution OSS Jenkins Automatisation • Conférences, JUG Continuous Delivery TDD Tests Intégration continue Maven Forge logicielle
  • 3. Auteur de la présentation • Kohsuke Kawaguchi • Créateur / Project lead Jenkins • Architecte @ CloudBees • Mais aussi : – RELAX – JAXB, JAX-WS, JAXP, etc.@ Sun – Une partie de GlassFish V3
  • 4. L’intégration continue ? • « Intégration » ? Différents processus : compilation, exécution des tests, opérations sur base de données, packaging, déploiements, etc. • « Continue » ? L’effort d’intégration augmente avec le temps écoulé depuis la dernière intégration. La régularité diminue les risques.
  • 5. Composantes de l’IC • Éléments composants l'intégration continue : • Mécanismes de surveillance du changement (on surveille un environnement) • Gestionnaire de versions – Indispensable même sans intégration continue • Ensemble de scripts pour implémenter les processus d'intégration • Mécanismes de notifications • L’IC n’est pas un concept récent
  • 6. L’IC à l'heure actuelle • Une méthode reconnue • Des outils matures : • Gestionnaire de versions : SVN • Build : Maven, Ant/Ivy, Gradle • Analyseurs : Checkstyle, PMD, Sonar • Gestion de documentation : Wiki • Test : Junit, Cobertura, Selenium • Des bonnes pratiques malgré tout encore partiellement adoptées et restreintes surtout aux développeurs
  • 7. « L’intégration continue c’est pour les développeurs »
  • 8. L’IC : les idées reçues • Des outils développés pour les développeurs • Quel opérationnel utilise Maven pour déployer en production ? • Quel fonctionnel regarde les rapports de couverture de tests ? • Quel DBA code des scripts de migration avec Ant ? • Chaque monde a ses propres outils, son langage, sa vision • La barrière technique empêche la communication et la compréhension
  • 9. La promesse de l’IC • L’intégration continue comme chaînon manquant entre les équipes • Abstraire les concepts techniques au travers d’un langage commun • « livrer la dernière version aux exploitants » • « installer la v2.3 en qualification » • « valider la fonctionnalité » • Toutes ces actions en 1 clic ! • Des retours visuels et simples : Vert = OK ! • Le tout de manière automatisé
  • 10. L’objectif de l’IC • Objectifs • Mettre en œuvre un ensemble de moyens pour que les processus d’intégration d’un projet deviennent un « non événement » • Moyens • Avoir un processus rapide, répétable et automatisable • C’est tout ?
  • 11. L’intégration continue • Qu’est-ce qui est capable de : • Analyser des rapports de tests ? • Vérifier qu’il n’y a pas d’erreurs lors de l’exécution d’une migration de base de données ? • Transférer des archives d’un serveur à un autre ? • Surveiller la correction d’un bug sur le gestionnaire de sources ? • Construire des projets à la fois en Java, .NET et C++ ? • Ecrire un email pour vous rassurer ? • Afficher la météo ?
  • 13. Jenkins-ci.org • Serveur d’Intégration Continue Open Source • Ecrit en Java • Existe depuis 7 ans • Facile à installer et utiliser • Extensible via 350+ plugins • Largement utilisé • 11K+ installations • 26K+ si on tient compte de l’ancien nom (Hud…)
  • 14. L'état de l'art de l'IC 6:publish metrics 2:update 4:deploy 1:commit 3:share 7:notify 5:install
  • 17. Du coté des outils de dév… • Progrès constants au niveau des outils de développement • Invocation non-interactive sous Windows • Visual Studio  MSBuild • Outils offrent une sortie pouvant être utilisée par une machine • CVS  Subversion • Tests frameworks • Demande de plus en plus forte des utilisateurs pour un accès batch / CLI à leurs outils
  • 18. Du coté des navigateurs… • … la prochaine « grande bataille »
  • 19. Du coté des navigateurs… • Quid de Selenium ? • Preuve que le besoin est là, mais la solution n’est pas optimale • Idéalement, il faudrait: • Pas d’affichage nécessaire • Possibilité d’embarquer le navigateur dans le processus, afin d’offrir une meilleure délimitation des comportements • Plus de proxy • Accès direct aux logs consoles du navigateur • Injection de comportements / d’erreurs
  • 22. Le plein de puissance ! • De plus en plus de puissance de calcul • De moins en moins cher • Ratio Performance/Prix de la puissance de calcul meilleur que jamais • Ratio Performance/Prix des personnes évolue peu •  Utiliser les ordinateurs efficacement est primordial !
  • 24. Plus de VMs Machines Physiques Machines Virtuelles
  • 25. Plus de processus Machines Physiques Machines Virtuelles Processus
  • 26. Le plein de puissance ! • Plus de puissance mais plus de parallélisme ! • À tous les niveaux • Des outils avec un mode « parallèle » • Maven 3 : construction des modules • Junit : lancement des tests • Selenium Grid : exécution des tests fonctionnels
  • 27. Apport du Cloud et des VMs • Mise à disposition automatique et en temps réel de machines virtuelles • Permet de changer la donne : • Cloner une machine virtuelle « fraîche » à chaque exécution des tests • Transformer une machine de tests « Quality Assurance » en production sans redéployer • Instantanés (Snapshots) des VMs • Lors de tests en échecs
  • 28. Cloud & SaaS • SaaS = Software as a Service, hébergé dans le Cloud • Sauce OnDemand : Selenium • DeviceAnywhere : Tests d’applications mobiles • Un autre moyen de simplifier et automatiser la mise à disposition des éléments nécessaires • Flexibilité grâce au Just-In-Time • Tarifs au temps consommé (pour Cloudbees) Nb Machines Nb Machines Temps Temps
  • 29. Automatiser, encore et encore ! • Automatiser à tous les niveaux : • Machines, OS, middlewares, outils • Automatiser grâce : • Au Cloud, aux VMs, aux SaaS • D’innombrables perspectives d’automatisation vous sont ouvertes ! • Utilisation des serveurs d’Intégration Continue pour fédérer toutes ces briques : Jenkins
  • 30. Jenkins • Exécution de builds distribués depuis 5 ans • Permet de contrôler et gérer plus de 100 machines depuis un seul endroit • Offre un mécanisme de plugin permettant d’étendre facilement ses possibilités
  • 31. L’intégration continue en tant que Fonction
  • 32. Une Fonction ? • Penser un build/test comme une fonction • Par exemple : F(objet source) = métriques qualité • Pas d’effets de bord • L’évaluation de la fonction peut être coûteuse • Faire de l’asynchrone • L’« objet source » est créé en premier • Calcul des métriques qualité viennent par la suite • Calcul des métriques qualité découpé en plusieurs étapes
  • 33. Une Fonction ? • F(objet source) = métriques qualité • En pratique, on a F(commit) = métriques qualité • Pourquoi les commits : • Déterminent sans ambiguïté une arborescence source • Nombreux outils déjà disponibles • Copie simple et rapide d’une machine vers une autre
  • 34. Dilemme des commits SVN • Imaginez un projet avec de nombreux tests • Le développeur se concentre sur ce qu’il doit faire • Le reste, comme par exemple l’exécution des tests, est effectué par le serveur d’Intégration Continue • Un commit est nécessaire pour l’Intégration Continue • Mais vous ne voulez pas commiter sans valider via l’IC • Donc, vous ne pouvez pas créer de commits  •  Solution : Utilisation d’un gestionnaire de version distribué (Distributed VCS comme Git, Mercurial, etc.)
  • 35. Distributed VCS • Permet de séparer la notion de commit de la notion de partage • Comme pour SVN, commit = arborescence source • Mais possibilité de partager seulement une partie des commits (avec SVN, pas de commit non partagé) •  Partage sélectif
  • 36. Partage sélectif • Aussi appelé Revue de Code • Vous partagez votre modification avec quelques personnes • La modification est évaluée
  • 37. Partage sélectif • Aussi appelé Revue de Code • Vous partagez votre modification avec quelques personnes • La modification est évaluée • Puis vous partagez de manière globale cette même modification
  • 38. IC en tant que Revue de Code Développement Jenkins / Gerrit Central Repo
  • 39. IC en tant que Revue de Code Développement Jenkins / Gerrit Central Repo
  • 40. IC en tant que Revue de Code Développement Jenkins / Gerrit Central Repo
  • 41. IC en tant que Revue de Code Développement Jenkins / Gerrit Central Repo
  • 42. IC en tant que Revue de Code Développement Jenkins / Gerrit Central Repo
  • 43. IC en tant que Revue de Code • Plusieurs façons d’implémenter ce fonctionnement • Surveiller les commits locaux • Envoyer (push) certains commits pour demander à l’IC de le tester • Lors du push sur le repository central, le repo peut consulter les résultats du serveur d’IC via le commit ID • Rejet des changements non validés • Réduction du temps entre le push et l’apparition dans le repo
  • 44. IC en tant que Revue de Code • « Liberal branching » • Chaque développeur pousse ses commits sur sa branche • Jenkins les récupère et les intègre dans le repo central Branche Dev1 Branche Dev2 Central Repo
  • 45. Fini les tests en local ! • Laisser travailler les serveurs d’IC • Ne pas bloquer les développeurs est primordial • Mieux vaut attendre pour avoir les résultats via l’IC, plutôt que les lancer en local •  Plusieurs réponses possibles • Dépend des équipes, des workflows mis en œuvre • Mais quelque soit l’implémentation choisie, l’Intégration Continue en tant que Fonction est toujours là
  • 46. Conclusion • De plus en plus de puissance de calcul à disposition • De plus en plus de parallélisme à exploiter • Impacte l’ingénierie logicielle : comment bénéficier du parallélisme ? • De nombreuses tendances poussent à l’automatisation : • Cloud, VM, DVCS, outils développeurs avec batch mode, … • Laisser les ordinateurs faire le travail répétitif • Laisser les décisions aux personnes • « Auparavant, l’intégration continue était la noisette dans le chocolat, maintenant c’est le chocolat  »