Créer une archive livrable avec Ant

Dans le processus de livraison d'un projet, la première étape consiste toujours à générer une archive livrable à partir d'une révision ou tag du dit projet.

L'idée ici est de créer un job Jenkins qui s'occupera de la livraison complète après avoir préalablement tester l'applicatif. L'objectif étant en un clic de tester, packager, livrer puis déployer l'applicatif.
Seules les deux premières étapes seront traitées dans ce post, et ce par la création d'une tâche Ant.

Création du fichier build.xml

Comme nous supposerons que l'applicatif est déjà testé à l'aide d'une intégration continue (Jenkins), un fichier nommé 'build.xml' devrait déjà être présent à la racine du site.
Nous appellerons donc le notre: 'build-archive.xml'.
Ici deux exemples de ce fichier adaptés pour des projets sous Git et SVN : build-archive.sample.zip

Voici la description des différentes <target> du fichier :

Le clean up

<target name="clean">
    <delete dir="${basedir}/build"/>
    <mkdir dir="${basedir}/build"/>
</target>

Ici nous préparons le répertoire 'build/' à la racine du site qui contiendra les fichiers générés.

Les tests unitaires

<target name="phpunit">
    <exec dir="${basedir}/tests/unit" executable="phpunit" failonerror="true" />
</target>

Nous exécutons les tests afin de garantir que l'applicatif est fonctionnel.
Important ici, le paramètre failonerror est à 'true' : si les tests ne passent pas, le build passera en erreur et Jenkins stopera son job.

Génération de l'archive depuis Git

<target name="archive">
    <condition property="version" value="${version}" else="x.x.x">
        <isset property="version"/>
    </condition>
    <condition property="commit" value="${commit}" else="HEAD">
        <and>
            <isset property="commit"/>
            <length string="${commit}" trim="yes" length="0" when="greater"/>
        </and>
    </condition>
    <exec dir="${basedir}" executable="git">
        <arg value="archive"/> 
        <arg value="--format=tar.gz"/>
        <arg value="-o"/>
        <arg value="${basedir}/${version}.tar.gz"/>
        <arg value="${commit}"/>
    </exec>
 </target>

Afin de réaliser l'archive, le build prendra 2 paramètres:  version qui sera la version de l'applicatif déployé, et commit qui sera à l'ID du commit Git ou la révision SVN.
Le premier sera remplacé par 'x.x.x' s'il n'est pas renseigné, le second par 'HEAD' s'il n'est pas renseigné ou s'il est vide.

Nous générons ensuite l'archive grâce à la commande `git archive`. Chaque espace de la commande fera l'objet d'un noeud <arg>.
Ainsi le noeud <exec> ci-dessus lancera la commande:
`git archive --format=tar.gz -o ./${version}.tar.gz ${commit}`.

Génération de l'archive depuis SVN

Ici nous avons plusieurs commandes à exécuter afin d'arriver au même résultat que la commande `git archive`.

<exec dir="${basedir}" executable="svn">
    <arg value="--revision"/> 
    <arg value="${commit}"/>
    <arg value="export"/>
    <arg value="."/>
    <arg value="${basedir}/build/${version}"/>
 </exec>

Nous lançons la commande `svn --revision ${commit} export . ./build/${version}` qui déposera tous les fichiers du repository dans le répertoire 'build/${version}/'

<exec dir="${basedir}/build" executable="tar">
    <arg value="-czvf"/>
    <arg value="${basedir}/${version}.tar.gz"/>
    <arg value="${version}"/>
 </exec>

Nous créons une archive de ce répertoire avec la commande `tar -czvf ./${version}.tar.gz ${version}` (depuis le répertoire 'build/').

 <delete dir="${basedir}/build/${version}"/>

Nous supprimons le répertoire 'build/'.

Création du job Jenkins

Une fois que le repository est paramétré, il suffira d'ajouter une étape au build "Appeler Ant".
Dans les paramètres avancés de l'étape, vous pouvez sélectionner le fichier de build à exécuter, ainsi que les différentes propriétés du build.

Jenkins Appeler Ant

Paramétrage de l'étape de build "Appeler Ant"

Résultat

Une fois le job configuré puis exécuté, vous obtiendrez votre applicatif archivé à la racine de l'espace de travail, qui aura été préalablement testé.

Il ne vous restera plus qu'à envoyer cette archive sur le serveur cible grâce notamment aux plugins Publish Over SSH ou Publish Over FTP.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.