mardi 2 novembre 2010

ant : rappels (ant-contrib sshexec ftp)

Ant est un outil très pratique qui permet d'automatiser pas mal de tache, et qui est portable et peut être appelé de maven.

Il permet notamment des connexion ftp et ssh à condition d'ajouter dans le classpath ou dans le $ANT_HOME/lib, les librairies adéquates.

Exemple pour ant 1.8.1 :
- jsch-0.1.42.jar pour ssh
- commons-net-1.4.1.jar et oro-2.0.7.jar pour FTP.


Des extensions sont possible comme la possibilité de faire des boucles for et des if simplement avec ant-contrib

Voici un exemple sur ant-contrib:

Tout d'abord ajouter le jar dans le classpath

<path id="project.class.path">
<pathelement location="${basedir}/cmd/lib/ant-contrib-1.0b3.jar" />
<pathelement location="${basedir}/cmd/lib/ojdbc14.jar" />
</path>
<!-- Déclaration des tâches définies dans la lib ant-contrib.
>
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath refid="project.class.path" />
</taskdef>


Ou avec un chemin en dur comme suit:

<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="D:/apache-ant-1.8.1-bin/apache-ant-1.8.1/lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>


Puis, il est possible de faire des boucles sur l'ensembles des environnements :

<target name="stopAll">
<echo message="The first five letters of the alphabet are:"/>
<for list="bod2,bod3,bod4,bod5,bod6" param="environnement">
<sequential>
<property file="@{environnement}" id="specific"/>
<echo>Arret de @{environnement}</echo>
<antcall target="stopServeur" />
</sequential>
</for>
</target>



Pour rappel :

Chargement des fichiers de propriétés (un spécifique possitionné par une variable d'environnement et un autre général):


<property file="${config.file}" id="specific"/>
<property file="global.properties" id="global"/>


ant -d -Dconfig.file=maCibleValidation.properties -f build.xml startServeur

Et voici, le fichier de confiruration spécifique (nommé maCibleValidation.properties)


#propriete SSH
serveur.ssh.url=maCible.fr
serveur.ssh.port=22
serveur.ssh.user=monUser
serveur.ssh.password=monPassword

#propriete FTP
serveur.ftp.url=maCible.fr
serveur.ftp.port=21
serveur.ftp.user=monUserSSH
serveur.ftp.password=monPasswordSSH
serveur.ftp.remoteDir=/devel/bo/monUser/exe/earHudson

#propriete lie a la construction du ZIP
project.home=D:/program/Industrialisation/MigJava6
project.home.dist=${project.home}/dist

# port admin weblogic
weblogic.admin.port=11141



et le fichier global:

#propriete SSH
remote.java.home=/produits/dev/bea/jrockit81sp5_142_08
weblogic.home=/produits/dev/wls81sp4
weblogic.username=weblogic
weblogic.password=weblogic
weblogic.server.valo=serverCalcul
weblogic.server.orchestre=serverJSP


Voici, la construction d'une commande d'arret du serveur serverCalcul qui sera lancé en SSH :

Tout d'abord la connexion SSH avec l'option TRUST qui permet de faire conficance quand on pas de clé privée installé :


<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${stopOrchestre}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />



<property name="stopValo" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} FORCESHUTDOWN ${weblogic.server.valo}" />


Voici, un exemple complet de taches qui permet de d'automatiser le deplacement d'EAR sur un serveur maCible, par un transfert de zip, puis, permet l'arrêt et la relance des 2 serveurs nommés respectivement serveurCalcul et serveurJSP

Un exemple de lancement en ligne de commande (je le lance via DOS car avec eclipse y'a des soucis bizarre ...)

ant -d -Dconfig.file=maCibleValidation.properties -f build.xml startServeur


<?xml version="1.0" encoding="UTF-8"?>
<!-- ======================================================================
27 oct. 2010 13:53:59
ic CIBLE
permet le deploiement des EAR CIBLEs

lducamp
====================================================================== -->
<project name="ic CIBLE" default="deployEAR">
<description>
permet le deploiement des EAR CIBLEs
</description>

<property file="${config.file}" id="specific"/>
<property file="global.properties" id="global"/>
<property name="startValo" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} START ${weblogic.server.valo}" />
<property name="startOrchestre" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} START ${weblogic.server.orchestre}" />

<property name="stopValo" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} FORCESHUTDOWN ${weblogic.server.valo}" />
<property name="stopOrchestre" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} FORCESHUTDOWN ${weblogic.server.orchestre}" />

<!-- - - - - - - - - - - - - - - - - -
target: init
- - - - - - - - - - - - - - - - - -->
<target name="init">
<echo>${startValo}</echo>
<echo>${startOrchestre}</echo>
</target>


<!-- =================================
target: deployEAR
================================= -->
<target name="deployEAR" description="permet le deploiement des EAR CIBLEs">
<!-- tar.gz des EARs -->
<echo>tar.gz des EARs ${}</echo>
<antcall target="zipEAR" />
<!-- transfert des ears par FTP -->
<echo>transfert des EARs</echo>
<antcall target="ftp" />
<!-- arret des serveurs Weblogic -->
<echo>arret des serveurs </echo>
<antcall target="stopServeur"/>
<!-- demarrage des serveurs Weblogic -->
<echo>arret des serveurs </echo>
<antcall target="startServeur"/>
</target>

<!-- =================================
target: ftp
================================= -->
<target name="ftp" description="execution distante">

<ftp password="${serveur.ftp.password}" server="${serveur.ftp.url}" userid="${serveur.ftp.user}" port="${serveur.ftp.port}" binary="true" action="put" remotedir="${serveur.ftp.remoteDir}" newer="yes" verbose="true">
<fileset dir="${project.home.dist}">
<include name="*.tar.gz" />
</fileset>
</ftp>
</target>

<!--
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" commandResource="stop.sh" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
-->
<target name="stopServeur">
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${stopOrchestre}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${stopValo}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
</target>

<target name="startServeur">
<!--
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
-->
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${startValo}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${startOrchestre}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
</target>


<!-- - - - - - - - - - - - - - - - - -
target: zipEAR
- - - - - - - - - - - - - - - - - -->
<target name="zipEAR" >
<mkdir dir="${project.home.dist}" />
<copy todir="${project.home.dist}" failonerror="yes">
<fileset dir="${project.home}/generation/generation-ear/target">
<filename name="generation-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/orchestre/orchestre-ear/target">
<filename name="orchestre-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/orchestre/orchestre-ear/target">
<filename name="orchestre-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/orchestre-mq/orchestre-mq-ear/target">
<filename name="orchestre-mq-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/referentiel/referentiel-ear/target">
<filename name="referentiel-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/tarification/tarification-ear/target">
<filename name="tarification-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/valorisation/valorisation-ear/target">
<filename name="valorisation-ear-1.0-SNAPSHOT.ear" />
</fileset>
</copy>

<tar destfile="${project.home.dist}/ear.tar">
<fileset dir="${project.home.dist}" id="id">
<include name="**/*.ear" />
</fileset>
</tar>
<gzip destfile="${project.home.dist}/ear.tar.gz" src="${project.home.dist}/ear.tar" />
</target>

</project>

Aucun commentaire:

Enregistrer un commentaire