Livraison continue avec Maven / Shell

Livraison continue


Après l’intégration continue, c’est le mot à la mode sur le web ces derniers temps. Le concept est très simple, ceci consiste à réduire le nomrbe d’étapes nécessaires au déploiement d’une application. Pour le mettre en pratique il y a plusieurs solutions, utiliser un environnement PaaS similaire pour vos développements et la production (en utilisant la nouveauté Micro Cloud Foundry de VMWare, utiliser une instance EC2 spéciale). Et vous pouvez utiliser Chef pour gérer et automatiser votre configuration. Bien que ces solutions soient très interessantes, je trouve qu’elles sont finalement trop puissante et difficile à mettre en oeuvre dans des cas simples.
Je vais expliquer ici ma solution “simple” utilisant maven, des scripts shell et la détection du nom de la machine.

Exemple d’archive de livraison

Comme un exemple est mieux que des milliers de mots, vous trouverez un exemple de ma solution dans un dépot github Easy Release Archive. C’est un projet maven construisant un fichier zip contenant tout ce qui doit être déployé, et un script d’exemple pour configurer le serveur Glassfish.

Quel contenu ?

Pour comprendre comment il fonctionne, la meilleure chose à faire est de regarder son contenu

  • un fichier assembly.xml décrivant les fichiers à inclure, leurs noms finaux et leurs localisations.
  • quelques scripts dans /src/main/resources
    • sanityCheck.sh : un script permettant de charger les variables en fonction du nom d’hôte de la machine et de s’assurer que les variables nécessaires sont correctement configurées
    • setupGlassfish.sh : un script simple permettant de configurer un serveur Glassfish avec les datasources et d’autres paramètres
    • un dossier global contenant les ficheirs de configuration globaux
    • un dossier par nom d’hôte (dans mon cas samva-mbp) contenant un script shell shell/envSetup.sh permettant de configurer les variables nécessaires et un dossier config pour les fichiers de configuration propres à l’environnement.
  • un fichier pom.xml file décrivant les versions des artefacts à utiliser dans la construction du fichier zip et le cycle de vie maven à adopter.

Un simple mvn package permettra de construire l’archive zip contenant tout ce qui est décrit dans le fichier assembly.xml. Il suffira ensuite de décompresser le zip et d’exécuter le ou les scripts correspondant au déploiement pour que celui-ci se fasse simplement, on peut même demander à son serveur d’intégration continue de le faire pour avoir un système simple mais puissant de livraison continue.

Alerta-JUL – des logs oui, mais avec du style !

La visualisation des logs

Dans mes activités quotidiennes, il y a une chose que je fais énormément et que je pense tout développeur fait : je “tail” les logs (je les visualise de façon interactive pour ceux qui ne comprendraient pas). Le soucis avec la consultation des logs est qu’un fichier de logs devient très rapidement énorme, et que le classique tail -f ne suffit plus. La partie la plus triste de la consultation des logs est qu’on ne dispose que de logs monochromes, sans aucune coloration aidant à identifier les parties les plus critiques par rapport au plus communes.
Continue reading

OS X Lion – retirer une application de Launchpad

Impressions générale sur Launchpad

Je continue mes astuces concernant OS X Lion. Comme je l’ai décrit dans mon précédent billet concernant le tour d’horizon de OS X Lion, Lion vient avec un lanceur d’application très semblable au célèbre Springboard d’iOS : Launchpad. Fraîchement installé (enfin après un upgrade depuis Snow Leopard tout particulièrement), il est automatiquement rempli avec toutes les applications installées. Les applications provenant du Mac App Store sont également ajoutées à cet endroit.

Bien que je continue de penser que c’est un programme inutile pour les utilisateurs avancés, les nouveaux arrivants y trouveront certainement un outil utile et les switchers y verront un semblant de menu démarrer (avec le look de leur iBidule en bonus).
Durant une phase de ménage sur ma machine, j’ai essayé de ranger Launchpad tout de même en faisant des dossiers et j’ai découvert qu’il n’était pas possible de retirer simplement une icône d’application (sauf celles provenant du Mac App Store qui sont désinstallées au passage).

Laissez moi ôter des icônes !

En fouinant un peu, j’ai découvert que Launchpad stocke ses préférences dans une base de données SQLite, qu’il est facile d’étudier et manipuler en utiliser la commande sqlite3.

Veuillez faire attention en essayant ma procédure, Launchpad pourrait devenir inutilisable, sauvegardez les fichiers que vous manipulez au cas où les choses tournent mal !

Mise à jour ! Encore plus facile, utilisez Launchpad-Control qui est un panneau de préférence permettant de masquer / montrer facilement une icône. Je laisse les étapes manuelles ici pour les curieux.

Continue reading

OS X Lion – désactiver la popup sur un appui long sur une touche

Une chose que je trouve ennuyeuse sous Lion est la popup qui apparaît lorsqu’on effectue une pression longue sur une touche du clavier (similaire à la version présentée sur iOS présentant les caractères spéciaux).

J’ai trouvé une astuce qui permet de désactiver simplement cette fonctionnalité avec une simple commande dans le terminal :

defaults write -g ApplePressAndHoldEnabled -bool false

Remplacez false par true dans la commande si vous voulez récupérer ce popup. Il peut être nécessaire de quitter / relancer les applications pour que le paramètre prenne effet (ou de redémarrer la machine).
Si vous voulez découvrir plus de paramètres, n’hésitez pas à fouiller dans les propriétés prédéfinies, c’est de cette façon que je suis tombé sur cette astuce (le -g permet de rechercher dans les paramètres globaux).

defaults read [-g]