Si vous voulez en savoir un peu plus sur Cloudbees, notre nouveau partenaire technique, nous vous invitons à découvrir la présentation de Noel Bardelot.
Noel nous a préparé une démonstration sur la manière d'aborder le développement Java dans le Cloud via la solution DEV@Cloud de CloudBees.
A cette occasion vous apprendrez à créer un projet pas à pas, outil par outil et à reproduire à volonté.
Pas de pré-requis particulier pour cette vidéo tout public.
MongoDB : la base NoSQL qui réinvente la gestion de données
Dev cloud java : la tête dans les nuages
1. Java la tête dans le nuage
par Noël Bardelot
Ingénieur chez So@t
2. Introduction
● Qu'est-ce que le Cloud ?
● Qu'est-ce que CloudBees ?
● Ce qui sera abordé
● Ce qui ne sera pas abordé (ce soir)
● Les cinq « pourquoi »
● Un voyage dans le nuage, pas à pas
Presentation by Noël Bardelot, So@t 2
3. Qu'est-ce que le Cloud ?
● « La programmation dans le Cloud consiste à
utiliser des ressources (matérielles et logicielles) qui
sont fournies comme service à travers un réseau. »
(traduction libre de Wikipedia)
● Trois principales catégories de ressources :
– Infrastructure (IaaS): temps de calcul, mémoire, bande
passante...
– Plateforme (PaaS): système, SGBD, conteneur J2E...
– Logiciel (SaaS): Google Docs, Tumblr...
● Concepts : montée en charge, redondance, standards
Presentation by Noël Bardelot, So@t 3
4. Qu'est-ce que CloudBees ?
● Créé en 2010
● Par Sacha Labourey, ancien directeur
technique de JBoss
● Vend un PaaS orienté Java
● Devoxx France 2012
Presentation by Noël Bardelot, So@t 4
5. Ce qui sera abordé
● CloudBees gratuit pour du logiciel libre
– Poste de développement Linux
– Une application Java SE développée sur Eclipse
– Git : dépôt de sources
– Maven : dépôts et constructions
– Jenkins : automatisation des constructions
Presentation by Noël Bardelot, So@t 5
6. Ce qui ne sera pas abordé
● MySQL et le conteneur Web : revenez pour la
prochaine soirée !
● CloudBees pour J2E, qui est payant
● Windows ou OS X
...mais grâce à Java vous vous sentirez comme chez vous
● D'autres langages orientés Java (JRuby)
Presentation by Noël Bardelot, So@t 6
7. Cinq fois « pourquoi ? »
● Posons nous la question cinq fois
– Pourquoi utiliser CloudBees? Parce qu'il rend la vie du
développeur plus simple.
– Pourquoi ? On peut passer plus de temps à coder.
– Pourquoi ? CloudBees fournit des outils qui font beaucoup de
choses fastidieuses à notre place.
– Pourquoi ? La plupart des choses tournent chez CloudBees, nous
n'avons qu'à les configurer, ce qui est plus simple.
– Pourquoi ? Ce sont des outils standards, nous les connaissons
déjà ! Nous les utilisons déjà tous les jours !
Presentation by Noël Bardelot, So@t 7
8. La pause XKCD
(du site xkcd.com de Randall Munroe)
Presentation by Noël Bardelot, So@t 8
9. Pas à pas : préparation
1) Configurer le poste de développement
• JDK
• Eclipse
• DAVFS2
• Maven
• Git
2) Rejoindre la ruche CloudBees
• Créer un compte CloudBees
• Installer le SDK CloudBees
• Première visite du site
Presentation by Noël Bardelot, So@t 9
10. Pas à pas : Git (1)
● Créer un nouveau dépôt Git dans CloudBees
● Créer un couple de clefs (publique, privée) SSH
ssh-keygen
● Associer la clef publique au site CloudBees
Help > Support > Account > SSH Keys
● Cloner le dépôt Git dans l'espace de travail Eclipse
git clone ssh://git@git.cloudbees.com/<projectid>/<repo>.git <repo>
● Vérifier qu'on voit bien le dépôt à distance
git remote show
Presentation by Noël Bardelot, So@t 10
11. Pas à pas : Git (2)
● Paramétrer le fichier ~/.gitconfig
[alias]
graph = log --graph --full-history --all
--color --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"
[user]
email = user@mailserver.com
name = John Doe
[core]
eol = crlf
● Ce paramétrage peut aussi être fait avec
la commande git config
Presentation by Noël Bardelot, So@t 11
12. Pas à pas : Git (3)
● Créer un premier fichier nommé license.txt dans le
répertoire du projet
– Vous pouvez utiliser par exemple la GPL v3: http://www.gnu.org/licenses/gpl-3.0.html
● Pour débuter avec Git, afficher les commandes
git
● En cas de doute taper
git <command> -h
or
git <command> --help
Presentation by Noël Bardelot, So@t 12
13. Pas à pas : Git (4)
● Ajouter le fichier modifié au prochain commit
git add license.txt
● Exporter la variable EDITOR dans ~/.bashrc permet
de changer l'éditeur pour les messages de commit
export EDITOR=vim
● Soumettre les changements à votre branche master
git commit -v
● Publier les changements sur le dépôt CloudBees
git push origin master
Presentation by Noël Bardelot, So@t 13
14. La pause XKCD
(du site xkcd.com de Randall Munroe)
Presentation by Noël Bardelot, So@t 14
15. Pas à pas : Maven (1)
● Configurer /etc/fstab pour utiliser DAV
https://repository-<projectid>.forge.cloudbees.com/snapshot/ /mnt/cloudbees/snapshot davfs
rw,user,noauto,conf=/etc/davfs2/davfs2.conf,uid=$UID 0 0
https://repository-<projectid>.forge.cloudbees.com/release/ /mnt/cloudbees/release davfs
rw,user,noauto,conf=/etc/davfs2/davfs2.conf,uid=$UID 0 0
https://repository-<projectid>.forge.cloudbees.com/private/ /mnt/cloudbees/private davfs
rw,user,noauto,conf=/etc/davfs2/davfs2.conf,uid=$UID 0 0
https://repository-<projectid>.forge.cloudbees.com/backup/ /mnt/cloudbees/backup davfs
rw,user,noauto,conf=/etc/davfs2/davfs2.conf,uid=$UID 0 0
● Configurer /etc/davfs2/davfs2.conf
use_locks 0
ask_auth 1
if_match_bug 1
ignore_home kernoops
● Ajouter l'utilisateur au groupe davfs2
sudo usermod -aG davfs2 <user>
Presentation by Noël Bardelot, So@t 15
16. Pas à pas : Maven (2)
● Déclarer les serveurs dans ~/.m2/settings.xml
<servers>
<server>
<id>cloudbees-snapshot</id>
<username>userid</username>
<password>password</password>
</server>
<server>
<id>cloudbees-release</id>
<username>userid</username>
<password>password</password>
</server>
</servers>
● Les serveurs pourront être reliés par leur ID dans le
fichier pom.xml de chaque projet
● Attention userid n'est pas l'adresse e-mail !
Presentation by Noël Bardelot, So@t 16
17. Pas à pas : Maven (3)
● Une clef maîtresse pour chiffrer les autres
mvn --encrypt-master-password S3cr3t_p4ssPhr4se
● Créer le fichier ~/.m2/settings-security.xml pour la stocker
<settingsSecurity>
<master>{encrypted master password}</master>
</settingsSecurity>
● Utiliser la clef maîtresse pour créer d'autres clefs
mvn --encrypt-password cloudbeespassword
● Utiliser ~/.m2/settings.xml pour les stocker
<password>{encrypted password}</password>
Presentation by Noël Bardelot, So@t 17
18. Pas à pas : Maven (4)
● Créer l'arborescence, et la donner au groupe
/mnt/cloudbees:
drwxr-xr-x 2 root davfs2 4096 nov. 3 00:43 backup
drwxr-xr-x 2 root davfs2 4096 nov. 3 00:43 private
drwxr-xr-x 2 root davfs2 4096 nov. 3 00:43 release
drwxr-xr-x 2 root davfs2 4096 nov. 3 00:43 snapshot
● Monter le dépôt privé avec DAV
sudo mount /mnt/cloudbees/private
● Y déposer les fichiers de configuration Maven
sudo cp ~/.m2/settings.xml /mnt/cloudbees/private
sudo cp ~/.m2/settings-security.xml /mnt/cloudbees/private
● Ils sont désormais utilisables depuis Jenkins
Presentation by Noël Bardelot, So@t 18
19. Pas à pas : Maven (5)
● Configurer le déploiement vers CloudBees
dans le fichier pom.xml
<distributionManagement>
<repository>
<id>cloudbees-release</id>
<name>Cloudbees Releases</name>
<url>dav:https://repository-<projectid>.forge.cloudbees.com/release</url>
</repository>
<snapshotRepository>
<id>cloudbees-snapshot</id>
<name>Cloudbees Snapshots</name>
<url>dav:https://repository-<projectid>.forge.cloudbees.com/snapshot</url>
</snapshotRepository>
</distributionManagement>
Presentation by Noël Bardelot, So@t 19
20. Pas à pas : Maven (6)
● Il faut également une extension configurée pour utiliser DAV,
celle-ci étant conseillée par CloudBees
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav-jackrabbit</artifactId>
<version>2.2</version>
</extension>
</extensions>
</build>
● Vous pouvez maintenant déployer votre projet depuis le
poste de développement vers CloudBees avec l'habituel
mvn deploy
Presentation by Noël Bardelot, So@t 20
21. La pause XKCD
(du site xkcd.com de Randall Munroe)
Presentation by Noël Bardelot, So@t 21
22. Pas à pas : Eclipse (1)
● Utilisez l'extension m2e pour créer un fichier
pom.xml
● … ou importez un fichier pom.xml existant
● Dans tous les cas n'oubliez pas d'adapter votre fichier
pom.xml de la manière décrite dans la partie
« Maven » de la présentation !
Presentation by Noël Bardelot, So@t 22
23. Pas à pas : Eclipse (2)
● Ajouter le support CloudBees au projet Eclipse
– Faire un clic droit sur le projet
– CloudBees > Add CloudBees Support
● Plusieurs options disponibles
– New Jenkins Job
– Run Local
– Deploy to RUN@Cloud
– Remove CloudBees Support
Presentation by Noël Bardelot, So@t 23
24. Pas à pas : Eclipse (3)
● Créer un programme Java
Presentation by Noël Bardelot, So@t 24
25. Pas à pas : Eclipse (4)
● Créer un test avec JUnit que Maven lancera
Presentation by Noël Bardelot, So@t 25
26. Pas à pas : Eclipse (5)
● Ajouter les dépendances du projet dans le fichier pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
Presentation by Noël Bardelot, So@t 26
27. Pas à pas : Eclipse (6)
● Ajouter une configuration log4j.xml dans les
deux répertoires de ressources
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
</layout>
</appender>
<root>
<priority value="debug"></priority>
<appender-ref ref="stdout" />
</root>
</log4j:configuration>
Presentation by Noël Bardelot, So@t 27
28. Pas à pas : Eclipse (7)
● Il reste une alerte à la compilation du JAR
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered
resources, i.e. build is platform dependent!
● Corriger ce problème dans le fichier pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
Presentation by Noël Bardelot, So@t 28
29. Pas à pas : Eclipse (8)
● Afficher les changements de notre dépôt Git local
git status
● Ajouter les fichiers/répertoires modifiés à la
prochaine révision
git add <list of directories and files>
● Créer la nouvelle révision sur le dépôt local
git commit -v
● Pousser les révisions locales vers la branche origin
dans le dépôt CloudBees
git push origin master
Presentation by Noël Bardelot, So@t 29
30. Pas à pas : Eclipse (9)
● Nettoyer et compiler
mvn clean compile
● Déployer sur le dépôt Maven local
mvn install
● Et si tout va bien, déployer pour la première fois sur
le dépôt Maven chez CloudBees
mvn deploy
● Vérifier les traces : s'il n'y a pas d'erreur les artéfacts se trouvent
dans le dépôt Maven snapshot chez CloudBees, ce que vous
pouvez voir ou bien depuis le site, ou bien depuis votre montage
DAV
Presentation by Noël Bardelot, So@t 30
31. La pause XKCD
(du site xkcd.com de Randall Munroe)
Presentation by Noël Bardelot, So@t 31
32. Pas à pas : Jenkins (1)
● Pour compiler/déployer depuis le poste de travail quand
Jenkins peut le faire pour nous ?
● Création d'un job Jenkins
– Aller sur la page Jenkins depuis le lien 'Builds' dans CloudBees
– Créer un nouveau job
– Choisir Free-style project et l'appeler <repo> origin HEAD
● Comme le temps c'est de l'argent également dans le Cloud,
faites attention à configurer vos jobs pour n'utiliser que ce
dont vous avez réellement besoin
Presentation by Noël Bardelot, So@t 32
33. Pas à pas : Jenkins (2)
● Rappelez-vous des fichiers settings.xml et
settings-security.xml que vous aviez copé dans le
dépôt Maven privé
● Disponible par le chemin /private depuis Jenkins
● Pour déployer depuis Jenkins il faut configurer son
utilisation de Maven pour qu'il le sache
– Cliquer sur Jenkins administration puis System configuration
– Trouver la propriété nommée MAVEN_OPTS global
– Lui donner la valeur suivante
-Dsettings.security=/private/<projectid>/settings-security.xml
Presentation by Noël Bardelot, So@t 33
34. Pas à pas : Jenkins (3)
● Retourner au job, et cliquer configure
● Configurer le dépôt Git
– Repository URL:
ssh://git@git.cloudbees.com/<projectid>/<repo>.git
– Branches to build: origin/HEAD
● Dans la section Build
– Add a high level maven goal
– Set the goal:
deploy -s /private/<projectid>/settings.xml
Presentation by Noël Bardelot, So@t 34
35. Pas à pas : Jenkins (4)
● Les autres options sur lesquelles s'attarder
– Manual builds
– Garbage your old artifacts (since it's a snapshot job)
– Allow parrallel builds
– Publish Javadoc and/or JUnit reports
● Jenkins est fourni chez CloudBees avec une poignée
d'extensions, et vous pouvez en installer d'autres
● Si votre objectif est un projet Web sous TomCat ou un
projet J2E n'oubliez pas que Jenkins peut effectuer le
déploiement automatique sur le conteneur
Presentation by Noël Bardelot, So@t 35
37. Licence
Cette présentation est publiée sous la licence Creative
Common BY-NC-ND
Vous êtes libre de reproduire distribuer et communiquer la présentation, en l'attribuant à
son auteur, sans la dériver ni en faire une utilisation commerciale.
Pour lire la licence complète :
http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
Presentation by Noël Bardelot, So@t 37