Développement logiciel au Greyc Bonnes pratiques : Outils / Méthodes Service Développement GREYC, CNRS UMR 6072 [email protected] Novembre 2015 Sommaire Intégration continue Java La forge Subversion / Git Conclusion Sommaire 1 Intégration continue Objectifs Pratiques d’intégration continue Règle 1 Règles 2, 3, 6 et 10 Règles 5, 8 et 9 2 Java JRE, JDK IDE 3 La forge Présentation Créer un projet 4 Subversion / Git Service Développement (GREYC) 5 Choisir son gestionnaire de versions Récupérer le dépôt du projet Créer votre projet Propager les nouveautés Récupérer les évolutions Consulter l’état du projet Créer une branche Propager / Partager une branche Fusionner avec le tronc Fusionner avec la branche master Supprimer une branche Consulter la liste des branches En savoir plus Conclusion Développement logiciel au Greyc Novembre 2015 2 / 40 Sommaire Intégration continue Java La forge Subversion / Git Conclusion Objectifs L’intégrateur Assemble le travail de plusieurs programmeurs et livre le produit fini aux testeurs de l’équipe qualité. L’intégration continue Réduit les problèmes d’intégration ; Facilite la cohésion des logiciels. http://www.martinfowler.com/articles/continuousIntegration.html Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 3 / 40 Pratiques d’intégration continue Sommaire Intégration continue Java La forge Subversion / Git Conclusion Les pratiques d’intégration continue sont les suivantes : 1 Maintenir un dépôt unique de code source versionné ; 2 Automatiser les compilations ; 3 Rendre les compilations auto-testantes ; 4 Tout le monde commit sur le tronc chaque jour ; 5 Chaque commit doit construire le tronc sur une machine d’intégration ; 6 Mettre en œuvre des chaı̂nes de compilation rapides ; 7 Tester dans un environnement de production cloné ; 8 Chacun peut accéder facilement à la dernière version exécutable ; 9 Chacun peut voir ce qui se passe ; 10 Automatiser les déploiements. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 4 / 40 Sommaire Intégration continue Java La forge Subversion / Git Conclusion Règle 1 Maintenir un dépôt unique de code source versionné La forge du laboratoire, disponible pour l’ensemble du greyc, support assuré par le service développement et les administrateurs systèmes : redmine ; Le serveur de versions : subversion ou git ; https://forge.greyc.fr/ La forge du C.R.U. (développements inter-u) : sourcesup ; Le serveur de versions : subversion ou git ; https://sourcesup.cru.fr/ Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 5 / 40 Règles 2, 3, 6 et 10 Sommaire Intégration continue Java La forge Subversion / Git Conclusion Automatiser les compilations ; Rendre les compilations auto-testantes ; Mettre en oeuvre des chaı̂nes de compilation rapides ; Automatiser les deploiements. Support assuré pour 3 outils populaires : Maven ; Ant ; Makefile. D’autres outils existent... libre à vous de choisir l’outil le mieux adapté à votre besoin... Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 6 / 40 Sommaire Intégration continue Java La forge Subversion / Git Conclusion Règles 5, 8 et 9 Chaque projet doit construire le tronc sur une machine d’intégration ; Chacun peut accéder facilement à la dernière version exécutable ; Chacun peut voir ce qui se passe. Outils : Jenkins, serveur d’intégration continue (java). http ://localhost :8080/jenkins/ Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 7 / 40 Sommaire Intégration continue Java La forge Subversion / Git Conclusion Java, JRE, JDK Les versions de java pré-installées sont : Open JDK 7 ; Oracle JDK 8. La variable JAVA HOME pointe sur l’emplacement du JRE. Il vous appartient de déclarer la version de java qui vous convient, par exemple, dans votre .bashrc. export JAVA HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre export JAVA HOME=/usr/local/jdk1.8 export PATH=${JAVA HOME}/bin:${PATH} Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 8 / 40 Sommaire Intégration continue Java La forge Subversion / Git Conclusion Java, IDE 2 Environnements de Développement Intégrés (IDE) sont installés sur les machines : Eclipse Netbeans Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 9 / 40 Eclipse vs Netbeans Sommaire Intégration continue Java La forge Subversion / Git Conclusion Parts de marché (2011) : Netbeans, 8 % Eclipse, 61 % En résumé... Netbeans, peut-être plus facile à prendre en main, plutôt moins utilisé ; Eclipse, plus sophistiqué, largement répandu. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 10 / 40 La forge, présentation Sommaire Intégration continue Java La forge Subversion / Git Conclusion Un site web : https://forge.greyc.fr/ Un outil : redmine Dépôt de sources ; Wiki ; Gestion des anomalies ; Demandes d’évolutions ; Support. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 11 / 40 Sommaire Intégration continue Java La forge Subversion / Git Conclusion Créer un projet Étape 1 : se connecter à l’aide de son persop@ss Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 12 / 40 Créer un projet (Étape 2 et 3) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Étape 2 : Cliquer sur l’onglet ”projets” Étape 3 : Cliquer sur ”Nouveau projet” Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 13 / 40 Créer un projet (Étape 4) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Étape 4 : Complétez les champs du formulaire, sans oublier le champ ”Description” Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 14 / 40 Créer un projet (Étape 5), confirmation Sommaire Intégration continue Java La forge Subversion / Git Conclusion Étape 5 : Une confirmation par courriel vous est adressée Pour plus d’informations au sujet de la forge, consultez le séminaire sysadmin à l’adresse ci-dessous https://portail.greyc.fr/fr/ressources/seminaires_sysadmin https://portail.greyc.fr/fr/ressources/forge Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 15 / 40 Choisir son gestionnaire de versions Service Développement (GREYC) Développement logiciel au Greyc Sommaire Intégration continue Java La forge Subversion / Git Conclusion Novembre 2015 16 / 40 Récupérer le dépôt du projet (subversion) Sommaire Intégration continue Java La forge Subversion / Git Conclusion SVN ”checkout” afin de récupérer le dépôt du projet en local Exemple $ svn checkout https://forge.greyc.fr/svn/sandbox --username paul Domaine d’authentification : <https://forge.greyc.fr:443> SVN Reposi Mot de passe pour ’paul’ : A sandbox/trunk A sandbox/trunk2 A sandbox/tags A sandbox/tags/version-1.2 A sandbox/tags/version-1.2/yo Révision 21 extraite. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 17 / 40 Récupérer le dépôt du projet (git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion git ”clone” afin de récupérer le dépôt du projet en local Exemple $ git clone https://forge.greyc.fr/git/sandbox-git/ Clonage dans ’sandbox-git’... Username for ’https://forge.greyc.fr’: couronne Password for ’https://[email protected]’: remote: Counting objects: 2, done. remote: Total 2 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (2/2), done. Vérification de la connectivité... fait. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 18 / 40 Créer votre projet (exemple avec maven) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Maven permet de créer des structures de projets prêtes à l’emploi Exemple $ mvn archetype:generate -DgroupId=fr.unicaen.mon.projet -DartifactId=mon-projet -DarchetypeArtifactId=maven-archetype-quickstart groupId, le nom du paquetage qui identifie l’application de manière unique parmi tous les autres projets ; artifactId, le nom de votre projet, qui sera également le nom de votre jar ; archetypeArtifactId, l’identifiant du modèle de projet. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 19 / 40 Créez votre projet (ex. à l’aide de maven) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple de création de projet à l’aide du modèle maven-archetype-quickstart Exemple $ find -type f ./mon-projet/pom.xml ./mon-projet/src/main/java/fr/unicaen/mon/projet/App.java ./mon-projet/src/test/java/fr/unicaen/mon/projet/AppTest.java Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 20 / 40 Créez votre projet (exemple avec maven) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Pour en savoir plus : https://maven.apache.org/ Qu’est-ce que Maven ? : https://maven.apache.org/what-is-maven.html ; Quelles sont ses principales fonctionnalités ? : https://maven.apache.org/maven-features.html ; La liste des questions fréquemment posées : https://maven.apache.org/general.html. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 21 / 40 Propager les nouveautés (subversion) Sommaire Intégration continue Java La forge Subversion / Git Conclusion On procède ensuite à l’enregistrement du projet sous subversion (2 étapes) Exemple $ svn add mon-projet A mon-projet A mon-projet/pom.xml ... $ svn -m ’import initial projet mon-projet’ commit Ajout mon-projet Ajout mon-projet/pom.xml ... Transmission des données ... Révision 22 propagée. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 22 / 40 Propager les nouveautés (git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Avec git, les commandes sont les suivantes (étapes 1 et 2) Exemple $ git add mon-projet/ $ git commit [master ae35e36] ajout de l’archetype projet maven ... 3 files changed, 69 insertions(+) create mode 100644 mon-projet/pom.xml create mode 100644 mon-projet/src/main/java/fr/unicaen/mon/projet/A create mode 100644 mon-projet/src/test/java/fr/unicaen/mon/projet/A Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 23 / 40 Propager les nouveautés (avec git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Avec git, les commandes sont les suivantes (étape 3) Exemple $ git push origin master Username for ’https://forge.greyc.fr’: couronne Password for ’https://[email protected]’: Counting objects: 18, done. Delta compression using up to 4 threads. Compressing objects: 100% (6/6), done. Writing objects: 100% (17/17), 1.52 KiB | 0 bytes/s, done. Total 17 (delta 0), reused 0 (delta 0) To https://forge.greyc.fr/git/sandbox-git/ 2ad1c22..2f5271e master -> master push, envoi des modifications ; origin, l’identifiant de connexion du serveur git ; master, branche principale qui contient les modifications que l’on veut propager. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 24 / 40 Sommaire Intégration continue Consulter la/le(s) connexion(s) distante(s) (git) Java La forge Subversion / Git Conclusion le mot-clé origin sert à identifier l’URL de connexion, utile notamment pour les opérations push / pull. Exemple $ git remote -v origin https://forge.greyc.fr/git/sandbox-git/ (fetch) origin https://forge.greyc.fr/git/sandbox-git/ (push) Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 25 / 40 Récupérer les évolutions (subversion) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Subversion, sur le tronc ”trunk” $ svn update Mise à jour de ’.’ : U trunk/diaporama.tex Actualisé à la révision 47. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 26 / 40 Récupérer les évolutions (git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Git, sur la branche master $ git pull origin master Password for ’https://[email protected]’: remote: Counting objects: 5, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. Depuis https://forge.greyc.fr/git/sandbox-git * branch master -> FETCH_HEAD 9fc44e6..a45e276 master -> origin/master Mise à jour 9fc44e6..a45e276 Fast-forward mon-projet/pom.xml~ | 18 -----------------1 file changed, 18 deletions(-) delete mode 100644 mon-projet/pom.xml~ Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 27 / 40 Consulter l’état du projet (subversion) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Subversion trunk$ svn status ? diaporama.aux ? diaporama.log ? diaporama.nav ? diaporama.out M diaporama.pdf ? diaporama.snm M diaporama.tex ? diaporama.toc Pour propager la modification du fichier diaporama.tex : svn commit Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 28 / 40 Consulter l’état du projet (git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Git $ git status Sur la branche bilinguisme Modifications qui ne seront pas validées : (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé) (utilisez "git checkout -- <fichier>..." pour annuler les modifications dans la copie de travail) modifié: build.xml aucune modification n’a été ajoutée à la validation (utilisez "git a Pour propager la modification du fichier build.xml : git add build.xml, puis git commit et enfin git push origin bilinguisme Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 29 / 40 Créer une branche (subversion) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Subversion $ svn copy trunk/ branches/november-2015 A branches/november-2015 Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 30 / 40 Créer une branche (git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Git $ git branch november-2015 $ git checkout november-2015 Basculement sur la branche ’november-2015’ Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 31 / 40 Sommaire Intégration continue Propager / Partager une branche (subversion) Java La forge Subversion / Git Conclusion Exemple avec Subversion $ svn commit -m ’nouvelle branche : november-2015’ Ajout branches Ajout branches/november-2015 Ajout (bin) branches/november-2015/diaporama.pdf Ajout branches/november-2015/diaporama.tex Transmission des données .... Révision 49 propagée. Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 32 / 40 Propager / Partager une branche (git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Git $ git push origin november-2015 Password for ’https://[email protected]’: Total 0 (delta 0), reused 0 (delta 0) To https://[email protected]/git/valorisation * [new branch] november-2015 -> november-2015 Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 33 / 40 Fusionner avec le tronc (subversion) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Subversion trunk$ svn merge ../branches/november-2015/ --- Fusion de r49 à r52 dans ’.’: U diaporama.tex --- Stockage des informations de fusion (mergeinfo) de r49 à r52 dan U . Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 34 / 40 Fusionner avec la branche master (git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Subversion $ git checkout master Basculement sur la branche ’master’ $ git merge bilinguisme Merge made by the ’recursive’ strategy. build.xml valorisation-domain-beans/src/main/resources/sql/update-151125.sql valorisation-[...]/jsp/auth/form/commons/concepteurs.jsp valorisation-[...]/jsp/auth/form/commons/informationsUtiles.jsp valorisation-[...]/jsp/auth/form/commons/keywords.jsp valorisation-[...]/jsp/auth/form/commons/langages.jsp valorisation-[...]/jsp/viewLogiciel.jsp valorisation-[...]/jsp/viewMentionsLegales.jsp 8 files changed, 182 insertions(+), 131 deletions(-) create mode 100644 valorisation-domain-beans/src/main/resources/sql Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 35 / 40 Sommaire Intégration continue Supprimer la branche november-2015 (subversion) Java La forge Subversion / Git Conclusion Exemple avec Subversion $ svn delete branches/november-2015/ D branches/november-2015 [...] Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 36 / 40 Supprimer la branche november-2015 (git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Git $ git branch -d november-2015 Branche november-2015 supprimée (précédemment 0ca584a). Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 37 / 40 Consulter la liste des branches (git) Sommaire Intégration continue Java La forge Subversion / Git Conclusion Exemple avec Git $ git branch bilinguisme * master Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 38 / 40 Sommaire Intégration continue Java La forge Subversion / Git Conclusion En savoir plus Sur subversion http://svnbook.red-bean.com/ Sur Git https://git-scm.com/ Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 39 / 40 Sommaire Intégration continue Java La forge Subversion / Git Conclusion Conclusion Le portail du laboratoire https://portail.greyc.fr/ Service Développement (GREYC) Développement logiciel au Greyc Novembre 2015 40 / 40