Mini guide pour déployer des binaires SNAPSHOT sur le repository OSS sonatype avec Travis CI.
Configuration de Maven
Il faut configurer Maven pour utiliser votre compte pour uploader des artifacts sur OSSRH.
Créer un fichier etc/deploy-settings.xml
et utiliser des variables pour référencer vos identifiants :
<settings>
<servers>
<server>
<id>ossrh</id>
<username>${env.OSSRH_USER}</username>
<password>${env.OSSRH_PASS}</password>
</server>
</servers>
</settings>
Ce fichier sera par la suite utilisé par mvn
grâce à l’option --settings
.
Identification
On a deux solutions pour stocker ses identifiants et les utiliser avec Travis CI.
Stockage dans les paramètres du repository
Dans les options de Travis CI https://travis-ci.org/user/repository/settings
, on peut définir les variables d’environnements OSSRH_USER
et OSSRH_PASS
. Par défaut celles-ci seront masquées dans les logs.
Chiffrer ses identifiants
Il semble évident qu’on ne va pas sauvegarder ses identifiants en clair, Travis CI permet de chiffrer des données sensibles.
gem install travis
Et là on doit faire face à Ruby… Si vous ne développez pas dans cet eco-système, il y a des chances que celà se passe mal à partir de maintenant :( (en tout cas avec OS X)
Dans mon cas j’ai eu le droit à l’erreur suivante :
> gem install travis
Fetching: multipart-post-2.0.0.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
Le problème vient de la version installée par Apple, les utilisateurs de ruby utiliseront surement rvm
, rbenv
ou je ne sais quelle autre joyeuseté. Pour le commun des mortels qui ne veulent pas y passer une demi heure et qui n’ont pas envie de tout casser :
brew install ruby
Relancer un shell et l’installation du gem travis
devrait mieux se passer…
On peut maintenant envoyer nos données importantes à travis :
travis encrypt --add -r jcgay/send-notification "OSSRH_USER='toto'"
travis encrypt --add -r jcgay/send-notification "OSSRH_PASS='s3cret&'"
Si les commandes sont lancées depuis le dossier qui contient le projet l’option -r
n’est pas nécessaire et l’option --add
ajoutera automatiquement les clefs cryptées dans le fichier .travis.yml
.
jcgay/send-notification
correspond bien entendu au projet pour lequel ont veut chiffrer des données.
Configuration de Travis CI
On veut déployer les SNAPSHOT sauf si Travis est en train de builder une pull-request. On peut pour cela utiliser la variable ${TRAVIS_PULL_REQUEST}
.
La variable ${TRAVIS_TAG}
permet de ne pas non plus déployer les releases (qui ne sont pas faites avec Travis dans mon cas).
On se retrouve donc avec les variables d’environnement cryptées au sein de .travis.yml
:
env:
global:
- secure: GT8Hi5kgx2cLAGzh2ggZNTgiLm8J5fd64SYG3bkhgwZGbV/HRD8r8a1SYv1iQ72JqrDhlHQ7q8h17nDBFLjy99h/XKN4MacBu9CZhnPO7lXpuRefD3W/db6zWSk17a5DAKAt+1UOeyfohEkzx+JHcTfbvMg6hy+3DEPaVMUtV04=
- secure: fQ4bSOcHWEURfsDQVhWA152GCiezQfh9YC45a2zae8oOk+6bIrHmrkJSyVYpUCLGdqO3Df+JTy6bfoqyJEsX7PkzGPZ10odSHw5qDqfTIolt7UympKtUvUNi6h5G6virGhBWjjs5REGjrgWdTlqKjNT2Ax/VlzNRskqaVAhEhl0=
et une étape de plus dans la section after_success:
after_success:
- "[[ ${TRAVIS_PULL_REQUEST} == 'false' ]] && [[ ${TRAVIS_TAG} == '' ]] && mvn deploy -DskipTests --settings etc/deploy-settings.xml"
Et voilà tout roule !