P3 A new story begins

Aller au contenu | Aller au menu | Aller à la recherche

Intégration Continue

Fil des billets - Fil des commentaires

mercredi 19 octobre 2011

Sonar RuleSet

Today I decide to share my Sonar Source ruleset that I use for JavaFX 2.0 project (JRebirth.org), because global quality greatly depends on rules used.

My Sonar instance is accessible here quality.jrebirth.org

Sonar_Timeline_JRebirth

Recently I update the default ruleset and the quality index decrease from 98.7% to only 10% !

Here you can see the project timeline view which illustrate well the impact of the new ruleset !!

I activate all rules Pmd,Checkstyle,FindBugs (721) excepts :

  • At Least One Constructor - Pmd
    Sometimes it could be a waste of time to write empty default constructor.
  • Bean Members Should Serialize - Pmd
    Sometimes we don't want to provide a setter, (workaround is to set the property transient, but every object is not a bean specifically in UI)
  • Default Package - Pmd
    it could be useful to reduce visibility to current package, to not share public API
  • Header - Checkstyle
    Broken
  • Illegal Catch - Checkstyle
    In order to manage Jdk7 Multicatch
  • Javadoc Package - Checkstyle
    Who write javadoc for package in a dedicated file ?
  • Magic Number - Checkstyle
    When writing UI there is a lot of magic numbers needed.
  • Missing Constructor - Checkstyle
    See above At Least One Constructor
  • Regexp - Checkstyle
    Broken
  • Regexp Header - Checkstyle
    Broken
  • Regexp Multiline - Checkstyle
    Broken
  • Regexp Singleline - Checkstyle
    Broken
  • Regexp Singleline Java - Checkstyle
    Broken
  • Short Variable - Pmd
    When I work with a bean named Car I'm used to name variable c, to be homogenous with long name like NotificationType nt
  • XPath rule template - Pmd
    Broken

You can download my active rules : Sonar Active RuleSet and my inactive rules : Sonar Inactive RuleSet

Let me know what do you think about them !

Later I will share my dedicated xml configuration files for CheckStyle, Pmd and FindBugs

mercredi 1 juin 2011

L'Url magique du jour

Voici l'URL magique du jour :

https://hudson|jenkins:port/scm/SubversionSCM/enterCredential

Elle vous permet de changer le compte utilisé pour rapatrier le code source depuis votre SCM (subversion par exemple)

Je l'avais utilisé il y a quelques mois mais maintenant en cliquant sur l'icône info situé à côté du champs url du Repository vous pouvez y accéder sans avoir à vous en souvenir, c'est beau le progrès.

Prochaine astuce à venir, comment gérer le protcole svn+ssh avec jenkins

vendredi 14 janvier 2011

Liste de plugins pur Hudson/Jenkins

Voici la liste de plugins que j'utilise avec Hudson

  1. Hudson Active Directory plugin
  2. Analysis Collector Plugin
  3. Static Code Analysis Plug-ins
  4. Backup Plugin
  5. Checkstyle Plugin
  6. ChuckNorris Plugin
  7. Hudson Continuous Integration game
  8. Dashboard View
  9. Hudson Dependency Analyzer Plugin
  10. Deploy Plugin
  11. Hudson disk-usage plugin
  12. DRY Plugin
  13. Hudson Email Extension Plugin
  14. Emotional Hudson plugin
  15. FindBugs Plugin
  16. FTP publisher plugin
  17. Green Balls
  18. Hudson JavaNCSS plugin
  19. Hudson Maven Release Plug-in Plug-in
  20. Hudson Mantis plugin
  21. Maven 2 Project Plugin
  22. Monitoring
  23. PMD Plugin
  24. Hudson Support Subscription Notification Plugin
  25. SCP plugin
  26. Hudson Sonar Plugin
  27. Hudson SSH Slaves plugin
  28. Subversion Plugin
  29. Task Scanner Plugin
  30. Translation Assistance Plugin
  31. Hudson Violations plugin
  32. Warnings Plugin

mercredi 15 décembre 2010

De l'interêt de Sonar

Mais pourquoi utiliser Sonar ??

Tout simplement parce que la qualité ne dépend pas des développeurs mais des priorités du moment.

Voici un exemple pour une petite application développé par un seul développeur (en l'occurrence c'est moi qui m'y suis collé)

Avant le premier commit, revue de code et Hop un bon 99%

Puis dans l'urgence modification du code pour ajouter des fonctionnalités non prévues et bam ... le nombre de lignes a bien augmenté mais la qualité a baissée (pas tant que ça au vue des 50% de code en plus).

D'où la nécessité de refaire une revue de code et là miracle on arrive aux 100% !!

Sonar-evolution.png

Pour ce projet un seul développeur était à l'œuvre imaginez avec plusieurs dont des débutants modifiant le code d'expérimentés ...

La qualité c'est bien mais la suivre en temps réel c'est mieux

Une belle page comme celle-là ca se mérite :D

Sonar_-_Overview.png

et encore il reste des corrections, 2 lignes de codes commentées et 2copier-coller qui auraient pu être factorisé... il reste toujours du travail quand on est perfectionniste :p

jeudi 3 juin 2010

Liste des plugin Maven Indispensable pour le Reporting

Voici une liste intéressante de plugin maven utiles pour le reporting et la génération du site.

  1. <reporting>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-pmd-plugin</artifactId>
  6. <configuration>
  7. <targetJdk>1.5</targetJdk>
  8. </configuration>
  9. </plugin>
  10. <plugin>
  11. <groupId>org.apache.maven.plugins</groupId>
  12. <artifactId>maven-checkstyle-plugin</artifactId>
  13. </plugin>
  14. <plugin>
  15. <groupId>org.apache.maven.plugins</groupId>
  16. <artifactId>maven-plugin-plugin</artifactId>
  17. </plugin>
  18. <plugin>
  19. <groupId>org.apache.maven.plugins</groupId>
  20. <artifactId>maven-jxr-plugin</artifactId>
  21. </plugin>
  22. <plugin>
  23. <groupId>org.apache.maven.plugins</groupId>
  24. <artifactId>maven-javadoc-plugin</artifactId>
  25. </plugin>
  26. <plugin>
  27. <groupId>org.codehaus.mojo</groupId>
  28. <artifactId>taglist-maven-plugin</artifactId>
  29. </plugin>
  30. <plugin>
  31. <groupId>org.codehaus.mojo</groupId>
  32. <artifactId>changelog-maven-plugin</artifactId>
  33. </plugin>
  34. <plugin>
  35. <groupId>org.apache.maven.plugins</groupId>
  36. <artifactId>maven-project-info-reports-plugin</artifactId>
  37. <version>2.1.2</version>
  38. <reportSets>
  39. <reportSet>
  40. <reports>
  41. <report>summary</report>
  42. <report>project-team</report>
  43. <report>mailing-list</report>
  44. <report>cim</report>
  45. <report>issue-tracking</report>
  46. <report>license</report>
  47. <report>scm</report>
  48. </reports>
  49. </reportSet>
  50. </reportSets>
  51. </plugin>
  52. </plugins>
  53. </reporting>

mercredi 24 février 2010

Maven Site avec Hudson via SCP

Si vous déployer vos sites Maven via SCP comme dans cette exemple :

  1. <site>
  2. <id>Webeo_Sites</id>
  3. <name>Webeo Sites</name>
  4. <url>scp://development.webeo.fr/var/www/projects/rapidoo-${version}</url>
  5. </site>

Et si vous utilisez Hudson alors il peut arriver la mésaventure qu'un déploiement via SCP ne fonctionne pas à cause du manque d'interactivité imposé par Hudson à la session Maven. En effet le build peut se retrouver bloquer en attente d'une interaction avec l'utilisateur lui demandant d'accepter la signature d'un serveur, mais depuis Hudson il est impossible d'interagir avec le shell amven donc le build reste bloqué ad vitam eternam.

Voici donc une astuce pour palier à ce problème

Pour ce faire modifier le user hudson (ou celui que vous utilisez pour lancer ce service) pour lui rajouter un home directory, et surtout un fichier .ssh/know_hosts avec la bonné clé SSH

Lancer la commande

  1. /var/lib/hudson/tools/Maven_2.2.1/bin/mvn site-deploy -s /var/lib/hudson/.m2/settings.xml
  2.  
  3. [INFO] [site:deploy {execution: default-deploy}]
  4. The authenticity of host 'development.webeo.fr' can't be established.
  5. RSA key fingerprint is 6a:1d:86:8b:a0:7a:1c:23:20:df:7e:ff:bb:17:3f:5f.
  6. Are you sure you want to continue connecting? (yes/no):

Dites Yes et la clé sera ajouté dans le fichier, ainsi vos build ne resteront plus bloqués à cause de votre deploiement SCP !!

Autre source d'information : http://debalex.wordpress.com/2008/10/07/maven-site-deployment-inside-hudson

mardi 10 novembre 2009

Nexus : Out of Memory

Après seulement quelques heures d'utilisation e la dernière version du logiciel Nexus de Sonatype, j'ai été confronté à une erreur courante et pénible, le fameux :

"Java heap space Nexus returned an error: ERROR 500: Internal Server Error"



Après avoir cherché un petit peu j'ai enfin trouvé le fichier de configuration à modifier pour augmenter la taille de la HEAP.

Tout se passe dans le fichier wrapper.conf

  1. # Initial Java Heap Size (in MB)
  2. wrapper.java.initmemory=64
  3.  
  4. # Maximum Java Heap Size (in MB)
  5. wrapper.java.maxmemory=256

Puis une petite commande pour vérifier que c'est bien pris en compte : /etc/init.d/nexus restart

  1. (pour ma part je suis obligé de tuer le processus et de le lancer avec un start....)
  1. ps aux | grep nexus
  2. nexus 24599 0.0 0.0 16916 724 ? Sl 12:32 0:00 /usr/local/nexus-webapp-1.4.0/bin/jsw/linux-x86-64/./wrapper /usr/local/nexus-webapp-1.4.0/bin/jsw/linux-x86-64/../../../conf/wrapper.conf wrapper.syslog.ident=nexus-webapp wrapper.pidfile=/usr/local/nexus-webapp-1.4.0/bin/jsw/linux-x86-64/./nexus-webapp.pid wrapper.daemonize=TRUE
  3. nexus 24601 8.1 15.2 449320 235436 ? Sl 12:32 0:22 java -Dbasedir=../../.. -Djava.io.tmpdir=../../../runtime/tmp -Dsun.net.inetaddr.ttl=3600 -Xms64m -Xmx256m -Djava.library.path=./lib -classpath ../../../lib/wrapper-3.2.3.jar:../../../lib/plexus-classworlds-1.4.jar:../../../conf/ -Dwrapper.key=WPDAeAC8dDyWWk38 -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=24599 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.codehaus.plexus.classworlds.launcher.Launcher

Maintenant plus de problèmes de mémoire, je peux lancer des recherches comme un malade sur tous les repositories :D

Edit : Sonatype a complètement refondu son module de recherche qui est moins gourmand en mémoire je vous conseille vivement de mettre à jour vers au moins la version 1.7.2 Pour ma part j'utilise maintenant 128Mo et 512Mo pour 13 dépôts