Déployer ses SNAPSHOT avec Travis CI


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 !


Voir également

comments powered by Disqus