Intégration continue Gilles QUERRET Riverside Software
Gilles Querret Dans le monde Progress / Java depuis une dizaine d années Riverside Software depuis 7 and Basé à Lyon, France Expertise technique et intégration continue Solutions de déploiement Progress
http://geekandpoke.typepad.com
Agenda Definitions Implementing continuous integration in a few steps
«L intégration continue est la pratique consistant à exécuter la compilation et le déploiement de vos briques logicielles de manière la plus fréquente possible. Chaque déploiement réussi doit donner lieu à l exécution des tests automatisés. Chaque échec de compilation, de déploiement ou de test doit immédiatement avertir la personne en cause afin de minimiser le temps de résolution des problèmes, ainsi que le risque d instabilité de vos systèmes de production.»
Agenda Definitions Implementing continuous integration in a few steps
Steps to CI SCM setup 1 Build automation 2 CI tool setup 3 Automated deployment 4 Automated tests 5
Use the right tools
Step 1 : code repositories Client / Serveur : CVS / SVN ClearCase Perforce VSS Distribués Mercurial Git BitKeeper
Step 1 : code repositories If you can generate something, don t store it in your SCM It will be part of your build script Separate requirements and dependencies OpenEdge is a requirement, pdf_include is a dependency Don t forget database versioning Commit as much as possible, using branches if necessary Associate a bugtracker to your SCM
Step 2 : Build automation Création DB Compil. Gen. PL
Step 2 : Build automation Nombreux outils impliqués Procédures OE Scripts shell Ant + PCT pour les tâches OpenEdge
Step 2 : Build automation <PCTCreateBase dbname="ged" destdir="${db}" codepage="utf" schemafile="db/schema1.df,db/schema2.df" structfile="db/struct.st" blocksize="4" dlchome="${dlc}" /> <PCTRun procedure="src/initdb.p" paramfile="conf/param.pf" dlchome="${dlc}" cpstream="utf-8"> <PCTConnection dbname="ged" dbdir="${db}" singleuser="yes" /> <PCTConnection dbname="cust" dbdir="${db}" singleuser="yes" /> </PCTRun>
Step 2 : Build automation <PCTCompile destdir="${build}" graphicalmode="true" dlchome="${dlc}" md5="false" minsize="false" cpinternal="iso8859-15" cpstream="iso8859-15" inputchars="16384" debuglisting="true"> <fileset dir="src/core" includes="**/*.p,**/*.w" /> <fileset dir="src/module1" includes="**/*.p,**/*.w" /> <fileset dir="src/oo" includes="**/*.cls /> <PCTConnection dbname="ged" dbdir="${db}" /> <PCTConnection dbname="cust" dbdir="${db}" /> <propath> <pathelement location="src/core" /> <pathelement location="src/oo" /> </propath> </PCTCompile>
Step 2 : Build automation Utilisez des outils du marché Pensez aux prérequis Utilisez les variables au maximum Dossiers séparés pour les builds
Step 3 : Serveurs CI Fonctionnalités communes Définir et déclencher des jobs Stocker des livrables Les rendre facilement accessibles Informer des résultats Choix : Gratuit ou non Intégration avec vos outils Greffons
Step 3 : Serveurs CI Cruise control Hudson / Jenkins Teamcity (JetBrains) Bamboo (Atlassian)
Step 3 Tips Clean server Jobs distribués Un job pour chaque branche Conserver les livrables pour la production, les jeter en intégration Uniquement des alertes en cas d échec
Step 4 : Déploiement Utiliser uniquement ce qui a été généré Pensez (encore) aux prérequis Déployer sur un serveur propre Chaque livrable doit être testé et déployé
Virtualisation VMWare ESX Clones, snapshots et exécution à distance VM propres pour chaque configuration Clone pour chaque job Déploiement automatisé par l exécution à distance
Step 5 : tests Unit testing User interface testing API testing Regression testing Load testing Security testing
Agenda Definitions Implementing continuous integration in a few steps Bonus track
SonarSource PCT Jenkins Analyse de code source Lint Analyse des xref, debug listing, listing, profiler Code coverage Stockage en base de données
Questions? Ant : http://ant.apache.org PCT : http://pct.rssw.eu Hudson : http://hudson-ci.org Jenkins : http://jenkins-ci.org Me contacter (g.querret@riversidesoftware.fr) pour plus d infos