mardi 28 février 2012

Release your product with cloudbees/git/github and maven (of course)

  • Intro

We needed to be able to release a version of our product in the following context:
-a release each sprint (2 weeks) if we did some modification into the product
-CI = Jenkins & Maven @ CloudBees + git @ GitHub

We wanted to release each sprint and because we are lazy developer, we would like to have an industrial process to do new release with a simple "clic button release" feature. We know that we are able to create a fresh new release "manually" using maven with somes edition and some command but you know: the less human do things manually, the less bug you have, the more you script, the more you can reproduce it easily and frequently. And having a industrial process doesn't force us to use it, if we need to use another workflow for a specific release, we can choose to do the release manually. But most of the time we should use the industrial process...

This may seems easy for you, but since I don't want to forget how I did it, I script it... ugh... I blog it.

Here is a set of article explaining how to use the maven release plugin and what is the process a release:

But in our context, here is what we should do :

  • Configure your pom

First you have to change your pom.xml since the release plugin has some requirement.

Add a scm config:
<scm>
<developerConnection>scm:git:ssh://git@github.com/geek4ever/kickass.git</developerConnection>
<connection>scm:git:ssh://git@github.com/geek4ever/kickass.git</connection>
<url>git:ssh://git@github.com/geek4ever/kickass.git</url>
</scm>
Be careful, your githubb scm url must be ssh://git@github.com/geek4ever and not ssh://git@github.com:geek4ever or you will face a limitation of the maven git scm plugin. Because when you use ":", the plugin think the word just after (eg: geek4ever)is the port to use to connect to the host.

Add a distribution management config:
 <distributionManagement>
<downloadUrl>https://github.com/geek4ever/kickass</downloadUrl>
<repository>
<id>geek4ever-cloudbees-release</id>
<name>geek4ever-cloudbees-release</name>
<url>dav:https://repository-geek4ever.forge.cloudbees.com/release/</url>
</repository>
<snapshotRepository>
<id>geek4ever-cloudbees-snapshot</id>
<name>geek4ever-cloudbees-snapshot</name>
<url>dav:https://repository-geek4ever.forge.cloudbees.com/snapshot/</url>
</snapshotRepository>
</distributionManagement>
Be careful, don't forget the "dav:" prefix in your url or you will face a problem when trying to deploy your artifact, because cloudbees repositories are available only with webdav.

Add an extension to your build to be able to deploy on a webdav repository:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav-jackrabbit</artifactId>
<version>2.2</version>
</extension>
</extensions>
...
</build>
You can try wagon-webdav if you face problem with wagon-webdav-jackrabbit

Of course you add the release plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
</plugin>
Add your repositories:
      <repository>
<id>geek4ever-cloudbees-snapshot</id>
<name>geek4ever-cloudbees-snapshot</name>
<url>https://repository-geek4ever.forge.cloudbees.com/snapshot/</url>
</repository>
<repository>
<id>geek4ever-cloudbees-release</id>
<name>geek4ever-cloudbees-release</name>
<url>https://repository-geek4ever.forge.cloudbees.com/release/</url>
</repository>
Now, your pom config is ready and you can release your project using the maven release plugin with these command:
mvn release:prepare -DdryRun=true #until BUILD SUCCESSFULL
mvn release:prepare
mvn release:perform

  • Configure Jenkins:

Next step is to configure jenkins to be able to release with a simple click button:

You need to install M2 Release Plugin on jenkins:

On Cloudbees to install a plugin, it is pretty easy with in the administration screen.

Then you need to setup a specific settings.xml for your jenkins because to be able to deploy on the repositories, maven need to know your credentials to access to the repositories:
<servers>
<server>
<id>geek4ever-cloudbees-snapshot</id>
<username>jenkins</username>
<password>pass;-)word</password>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
<server>
<id>geek4ever-cloudbees-release</id>
<username>jenkins</username>
<password>pass;-)word</password>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
<server>
<id>cloudbees-private-repository</id>
<username>jenkins</username>
<password>pass;-)word</password>
</server>
<server>
<id>cloudbees-private-snapshot-repository</id>
<username>jenkins</username>
<password>pass;-)word</password>
</server>
</servers>
cloudbees-private-repository and cloudbees-private-snapshot-repository are 2 repositories that jenkins use to deploy your release/snapshot artifacts.
geek4ever-cloudbees-snapshot and geek4ever-cloudbees-release are 2 repositories we used in our pom.xml to deploy your release/snapshot artifacts.
You should add this settings.xml in your private cloudbees repository: https://repository-webadeo.forge.cloudbees.com/private/settings.xml

To connect to this repository you can use a cloudbees account (login/pass = jenkins/pass;-)word in our exemple)
  • Configure your jenkins build
In the configuration of your build:

-In Build section, click on Advanced button to check "Fichier settings alternatif" and set this value: /private/geek4ever/settings.xml where geek4ever is your account
(WARNING: You will have an error message "Alternate settings file must be a relative path." but do not care of this message)

-Check "Maven release build"

-Use "clean deploy" as goal to launch

-Use maven 3.0.4 (3.0.3 was buggy with webdav deploy)

  • Perform a release
Click on "Perform Maven Release", configure your version, look at the logs to wait the end of the build, then enjoy ^^

lundi 27 février 2012

Update maven to 3.0.4 on mac using brew

Hi,

Just to share a how to on updating maven to 3.0.4 on mac using brew.

I use brew to install some tools so I would like to use brew to update maven too. (I don't want to download maven manually, then unpack, change permission of the files etc...)

So to update maven from 3.0.3 to 3.0.4 on a Mac Snow Leopard you can use these command:

brew install maven
sudo unlink /usr/share/maven
cd /usr/share/
sudo ln -s /usr/local/Cellar/maven/3.0.4 maven

enjoy ^^ you can now download the Internet with a simple mvn install but without a strange bug when deploying your artifact on a repo using webdav (in maven 3.0.3)

lundi 11 juillet 2011

FitNesse JMX Fixture sur github

Pour réaliser des tests FitNesse capable d'appeler une opération d'un MBean JMX, j'ai du codé une Fixture Fitnesse que j'ai publiée sur github: https://github.com/cyrillakech/fitnesse-jmx-fixture

Enjoy ^^

jeudi 3 février 2011

What's Next: Le rendez-vous Français 2011 des passionnés Java!

La France possède enfin une nouvelle BIG conférence Java: la What's Next qui se tiendra le 26 et 27 mai à Paris dans le lieu unique du Grand Rex.

Pour sa 1ère édition, la What's Next nous propose un éventail de speakers venus du monde entier, dont certains nous font l'honneur de venir pour la première fois en France!

Durant deux jours les créateurs de nos frameworks et outils préférés animeront des talks techniques sur Hudson, scala, NoSQL, Spring, Clojure... Et bien sur Java!

Comme l'indique son nom, la What's Next traitera la question du futur des technologies.
Chaque speaker partagera sa propre vision sur l'avenir de Java. On va enfin pouvoir poser toutes nos questions aux grands acteurs du monde Java!

Les inscriptions viennent d'ouvrir!

Avec un tel panel de speakers et de talks techniques, ce serait dommage de ne pas y aller!
En tout cas, nous (le Ch'ti JUG) on y sera!

Retrouvez toutes les annonces des speakers et talks sur http://whatsnextparis.com/ ou sur Twitter @WsN_Paris

samedi 13 novembre 2010

Devoxx me voila!

Bon vous le savez surement, Devoxx c'est la semaine prochaine !!!

Devoxx c'est quoi ? 3000 geeks qui déambulent dans un grand cinéma belge pour assister à des conférences très très pointues (un peu comme ça) et qui parlent un étrange langage:

-"Jpa Google play!"
-"No-SQL, REST Voldemort"
-"Lily Seam Adam Bien"
-"Groovy Roo"
-"Birt IzPack Flex..."
-"Java Hadoop Devops"

Alors si vous cherchez une place, ca risque d'être compliqué car la conférence est SOLD OUT depuis plusieurs jours, alors il ne reste qu'une seule solution, racheter la place d'un geek et ca risque de vous coûter cher, très cher!

Voici mon pré-programme:
Lundi: Seam + (Roo ou OSGI Labs) + Spring STS + (VisualVM ou Apache Mahout)
Mardi: (Android ou REST Labs) + HBase + Groovy/Grails + Kauri/Lily
Mercredi: Devops + (Infinispan ou Scale?) + Vaadin + Spring 3.1
Jeudi: Matt Raible + Akka + Twitter No-SQL Arch + (HadoopHBaseHive ou Josh Long at springsource) + (Jigsaw ou Neal Ford) + Devops
Vendredi: Camel + ElasticSearch
Samedi: Décollage pour la Nouvelle-Calédonie (Ah non, ca ne fais pas partie de Devoxx pardon)

J'aimerai resté le jeudi soir pour participer aux BOFs des Jug leaders ainsi qu'à celui du Cloud/NoSQL, mais bon pour ça il faudrait que je trouve un hotel et que je sache comment m'y rendre...

http://www.devoxx.com

dimanche 31 octobre 2010

Articles sur nos retours d'expérience sur un projet GWT

Sur les 6 derniers mois j'ai travaillé sur un projet GWT et avec le reste de l'équipe en charge du développement on a décidé de mettre en ligne la documentation produite sous forme de 8 articles publiés sur le blog de Sfeir: http://www.insideit.fr

Voici le texte d'introduction des articles :

Le contexte:

Le projet a pour but d'améliorer l'ergonomie et l'usabilité du back office d’un produit en cours de développement réalisé en collaboration avec SFEIR

Dans le cadre de ce projet, la version de GWT utilisée passe de la 1.7.1 à la 2.0.3 afin de bénéficier des nouvelles fonctionnalités offertes par cette version. De nouveaux pattern de développement ont également été mis en place au cours de ce projet.

Voici une série d'article sur les nouveautés de GWT 2, les choix d'architectures, et bibliothèques utilisés qui font part de notre retour d'expérience sur le sujet. Ces articles ont été écris par David Aboulkheir, Patrice de Saint Steban et Cyril Lakech

Voici la liste des articles publiés ou en cours de publication:
  1. Nouveautés de GWT 2.0
  2. UiBinder, enfin une forte collaboration entre le designer et le développeur
  3. Intégration facile de maquette Html en GWT 2
  4. Architecture Modèle-Vue-Presenteur
  5. Implémentation Modèle-Vue-Présenteur
  6. Ecrire des tests unitaires avec Mockito
  7. Mise en place de Gin sur le projet
  8. Internationalisation
Voici le lien vers le premier article concernant les nouveautés de GWT 2.0: http://www.insideit.fr/post/2010/10/25/Nouveaut%C3%A9s-de-GWT-2.0

GWT 2 est déjà dépassé puisque GWT 2.1 est déjà là! Mais ils nous a semblé important de partager ce retour d'expérience avec la communauté.

samedi 17 juillet 2010

Compte-rendu Soirée Ehcache / Terracotta @ ZenikaIT


J'ai eu la chance de pouvoir assister chez Zenika à une conférence animée par Greg Luck, qui est le créateur d'Ehcache et qui travaille maintenant chez Terracottech, la société qui développe Terracotta, une solution de cache distribuée.

Sa présentation se décompose en 3 parties, les intérêts de l'utilisation du cache, les nouveautés dans Ehcache 2 et les performances d'Ehcache.

Alors pourquoi utiliser du cache ? Pour le fun, parce que c'est à la mode ?
1/ Pour réduire la consommation de ressources
2/ Pour améliorer les performances
3/ Pour scaler en distribuant les données avec le cache

Pour cela c'est très simple, il suffit de raccourcir le parcours et le traitement de la demande d'informations. Vous avez un service qui doit aller charger des données en base, et bien la première fois vous allez effectivement charger ces données depuis la base de données mais les fois suivantes, pas besoin d'aller jusqu'à la base de données car vous avez pris soin de garder cette donnée au plus près de là ou vous en avez besoin. Donc vous raccourcissez le traitement entre la requête et la réponse.

Ensuite, il nous explique la loi d'Amdhal qui aide a comprendre comment on peut accélérer un système en s'attaquant au composant du système qui est le mieux placé pour être amélioré. Bref, voyez avec M. Wikipedia, il expliquera cela très bien.

Après quoi, on comprend comment l'efficacité du cache est calculée, c'est le rapport entre les requêtes du cache sur les requêtes totales. Une grande efficacité est égale à un grand offload et a de grandes performances.

Pourquoi le cache fonctionne t-il ?
Parce qu'il rapproche les données demandées au plus près du besoin.
La distribution de pareto est ensuite expliquée, il faut mettre en cache les parties du système qui sont le plus demandées et pas la totalité.

Ensuite, il nous explique pourquoi il faut utiliser un cluster; pour la disponibilité et pouvoir scale out (et non scale up)

Mais cela entraine d'autres problèmes :
- cela ajoute aurant de problèmes qu'il y a de nœuds car ils doivent récupérer l'information,
- la cohérence du cluster quand l'information se trouve à plusieurs endroits,
- la limite du théorème de CAP, qu'il renomme en PACELC :
« if there is a partition (P) how does the system tradeoff between availability and consistency (A and C); else (E) when the system is running as normal in the absence of partitions, how does the system tradeoff between latency (L) and consistency (C)? »

Et il n'y a pas de bonne réponse, car cela dépend de chaque application, il faudra donc que la solution soit configurable.

http://dbmsmusings.blogspot.com/2010/04/problems-with-cap-and-yahoos-little.html

Parlons un peu d'Ehache !

Il nous a dresser un beau tableau d'Ehcache, un solution robuste, qui tien la route, répandue, open source etc etc... Bref, LA solution de cache qu'il vous faut !

Il compare ensuite Ehcache avant et après le passage de Terracotta, en sommes c'est comme dans les pubs avant/après pour les rasoirs à 15 lames sauf que la ca vaut vraiment le coup de voir l'évolution !

Puis on regarde les modifications à apporter à ehcache pour mettre en place Terracotta: il suffit d'ajouter 3 lignes au ehcache.xml, vraiment très simple.

Les nouveautés de Ehcache 2:

-Compatibilité avec Hibernate 3.3+, refonte du SPI, union avec Terracotta 3.2,
-JTA compliant (avec XA, spring, ejb, config manuelle etc),
-Write-Behing: l'écriture dans le cache en tache de fond (asynchrone)
-Nouveaux paramètres de tuning
-Du monitoring (avec JMX) dans une nouvelle UI
-Et la ehcache console (dans la version 2.1)

Waou... une vrai version majeure, il y a tellement de nouvelles choses qu'il faudrait une heure pour expliquer chaque partie.

On a ensuite des démo de la Terracotta console et de la Ehcache console, impressive !

Après quoi on a tout un tas de comparaison des performances des solutions Terracotta/Ehcache versus le reste du monde : IMDG, memcached, mysql (pour l'exemple d'une BDD en directe)

On retrouve les sources de ces bench en ligne: https://svn.terracotta.org/repo/forge/projects/ehcacheperf/ (compte svn = identifiants de terracotta.org)

En conclusion, la mise en place de Ehcache avec Terracotta sur la fameuse application PetClinic nous donne:
-de 30 à 95% de réduction du chargement de la BDD
-des performance 80 fois supérieures à mysql
-beaucoup moins de temps de latence évidemment

Parlons du NoSql dans tout ca, et bien en fait, la combinaison Ehcache/Terracotta est une solution de NoSql sans capacité de recherche (humhum... moyen l'argument) mais par contre, il projet voit le jour, TerraStore, un "document oriented NoSQL store based on Terracotta" La classe !

www.ehcache.org

www.terracottatech.com


C'est la fin, où plutôt l'heure des Goodies a gagner par programme random SVP: un iPod & 2 places pour un conférence IT @ SF (javaone). Et je n'ai rien gagné, flute, par contre j'ai pas mal appris sur ce beau sujet qui à un bel avenir, et pour ca, je dis merci Zenika pour l'organisation de cette session et merci ADEO de m'avoir laissé m'y rendre.

A la question, "Est-ce que les slides seront mis à dispo en ligne?" la réponse de Greg a été : "No problem, OK". Alors si vous voulez les slides... demandez moi ;-)

mercredi 7 avril 2010

Installer Ubuntu sous Windows avec Wubi


Mon PC de bureau est un portable préconfiguré sous Windows avec toute la suite logiciel habituelle (Office & co) ainsi que des applications spécifiques à mon entreprise. J'ai besoin de garder la possibilité de démarrer avec cet OS pour accéder à certaines applications et aussi pour que l'ordinateur soit toujours pris en charge par le support interne en cas de problème.

Pour développer et travailler j'ai également besoin de pouvoir travailler sous Linux pour plusieurs raisons; pour utiliser certaines applications, pour des raisons de performances, pour tous les avantages liés à l'utilisation d'un OS libre et également pour réaliser des tests sous plusieurs environnement facilement.

Comment être capable d'utiliser Windows ET Linux sur la même machine?

Une réponse très simple pour parvenir à concilier les 2 est le dual boot !

OK mais comment le faire tout en respectant tous ces besoins ?

Avec Wubi ! Un programme d'installation de Ubuntu sur Windows qui a l'avantage d'être très simple.

Par défaut, le PC est livré avec 2 partition sur le disque dur, une pour l'OS Windows et une pour le reste, les données. Pour installer Linux on pourrait croire qu'il faut absolument allouer une partition spécifique, mais pas forcément. Wubi installera Ubuntu dans le répertoire Windows de son choix, quelque soit la partition.

Pour créer une partition de données spécifiques à Linux et ainsi éviter de mélanger les fichiers de travail Windows et les fichier Linux, il faut utiliser un utilitaire de gestion de partitions. Sous Windows, il n'est pas simple d'en trouver un qui soit gratuit, simple et efficace ! Une recherche rapide me persuade de graver un live CD GParted. Après avoir téléchargé le fichier ISO de GParted, je le grave sur un CD et je redémarre avec le CD dans le lecteur. En quelques clics je modifie les partitions pour avoir une partition système pour Windows, une partition data pour les données Windows et une partition data pour les données Linux.



Après quoi, il suffit de redémarrer sous Windows pour lancer l'installation d'Ubuntu avec Wubi. La partition de data Windows peut être utilisée pour l'installer. En quelques minutes vous avez un dual boot Windows/Ubuntu et à chaque démarrage vous pouvez choisir entre un démarrage sous Windows ou sur Ubuntu.

Il est même possible de spécifier votre préférence entre Windows et Ubuntu et de réduire le temps d'attente au démarrage pour sélectionner l'OS à utiliser:

Clic droit sur Poste de travail/Propriétés/Avancé/Démarrage et récupération/Paramètres/Démarrage du système/Modifier/Mettre Ubuntu en premier.

Voila, c'est mon pense-bête pour la prochaine fois que j'ai un dual boot à faire...

Ce n'est pas la solution optimale que les puristes choisiront mais elle répond à les besoins !

samedi 20 mars 2010

l'idée du Ch'ti JUG : 1 an déjà

Il y a un peu plus d'un an commençais les débuts des premiers balbutiements de l'ébauche du Ch'ti JUG. 1 an déjà...

Si on regarde le chemin parcouru on voit qu'on est passé du stade des sessions plutôt artisanales à un système bien rodé, quasi industriel.

Les premières sessions de mai et juin avec Antonio Goncalvez et Arnaud Héritier ont été les plus difficiles à organiser car il fallait trouver nos marques et elles resteront des sessions un peu spéciales, comme le symbole de la naissance du JUG du Nord.

Après la trêve estivale, en septembre, c'est Emmanuel Bernard de JBoss qui ouvre le bal avec une session sur Hibernate Search et Validation puis en octobre, c'est au tour de Carl Azoury de Zenika avec une session sur Terracotta.

La vitesse de croisière du Ch'ti JUG est atteinte fin octobre avec une session sur Nuxeo et Hadoop / Mapreduce réalisée par Olivier Grisel de Nuxeo puis en novembre c'est une session sur les technologies Google qui s'organise avec Didier Girard et Salvador Diaz de Sfeir.

En décembre, une session sur HTML5 et les Websockets est organisée avec Peter Lubbers de Kaazing puis c'est sur le thème de Drools que la communauté se retrouve après les fêtes avec Mark Proctor et Geoffrey De Smet de JBoss.

Ensuite c'est GlassFish ESB qui est présenté par Didier Burkhalter de Sun en février et on enchaine par une session sur l'agilité en mars avec Jean-Philippe Ravillion de MC3SI et Fabrice Robini ainsi que David Alia d'Octo Technologies.

Déjà 10 sessions. "Déjà" parce que je n'ai pas vu le temps passer.
Seulement 10 sessions. "Seulement" parce que vu l'engouement de la communauté, avec un peu de chacun on pourrait en faire bien plus.

Déjà plus de 1000 participants !

Déjà 12 sponsors, entreprises et écoles qui nous ont fait confiance : Proxiad, Sopra, Norsys, Proxiad (2), Ineat, SII, ADEO, Capgemini, MC3SI, Cylande, Isen, l'Université Lille 1, L'IUT Lille 1. Merci à tous ceux qui nous ont soutenus dans la démarche.

Déjà 8 vidéos en ligne de nos conférences grâce à Proxiad, notre partenaire vidéo.

Déjà 80 photos en ligne en souvenirs de nos évènements.

Déjà 75 tweets du compte twitter @chtijug ! Déjà 113 followers ! Déjà 30 articles sur le blog !

Déjà 10000 visites et plus de 5000 visiteurs uniques sur le site.

Déjà 1000 bières partagées entre Ch'ti Juggers autours du buffet de fin de session et déjà une dizaine d'after au resto, bien sympathiques les afters d'ailleurs !

Déjà 550 personnes inscrites au mailing d'annonce des sessions !

Déjà 5 partenaires éditeurs mettant des livres à disposition pour en faire la revue ou les faire gagner: Dunod, Pearson, Oreilly, Manning, Eyrolles.

Déjà 2 partenaires Goodies pour faire gagner des licences : Jetbrains et Zeroturnaround.

Seulement 3 Ch'ti JUG Leaders !

On peut être fier du chemin parcouru et il faut encore qu'on s'améliore pour enrôler de nouveaux Ch'ti JUG leaders.