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"/>
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 ...)
<?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