Repetição de tarefa - ANT

3 respostas
M

Amigos,
Sou iniciante no ANT e estou tentando criar um script ANT que repita quatro rotinas para várias aplicações (clientes):
I- Criar o war para cada “cliente”, inserindo os arquivos de customização;
II- Alterar o skin (imagens e outros arquivos de interface) de acordo com o cliente
III- Fazer o deploy do CLIENTE.war gerado
IV- Atualizar banco do cliente e pastas de scripts versionados no repositório SVN

Gostaria de saber como proceder para resumir as targets secundárias repetidas por cliente para apenas a uma de cada que recebesse o cliente como variável.
Tais informações são apenas ilustrativas:
Aqui vai a estrutura dos arquivos usados nesse projeto:

3 Respostas

M
ESTRUTURA DO ANT:
<?xml version="1.0" encoding="iso-8859-1"?>
<project name="MyProject" default="default" >
	
	<!-- Property de url das aplicações no servidor de Aplicações Linux (Apache tomcat) -->
	<property file="url.properties"/>
	
	<!-- Property de configurações do banco do cliente -->
	<property file="client.properties"/>
	
	<!-- Diretório de principal -->
	<property name="ver.dir" value="c:\opt\apps"/>
	
	<!-- Diretório dos fontes do projeto -->
	<property name="projt.dir" value="${ver.dir}\projeto\src"/>
	
	<!-- Diretório temporário de compilação -->
	<property name="tmp.dir" value="${ver.dir}\tmp"/>
	
	<!-- Diretório de arquivos de customização das aplicações -->
	<property name="custom.dir" value="${ver.dir}\custommers"/>

	<!-- Diretório das Skin dos sistemas -->
	<!-- Essas skin podem ser: RYW, RY e BLU -->
	<property name="skin.dir" value="${ver.dir}\skins"/>
	
	<!-- Diretório de destino das aplicações (bkp) -->
	<property name="origin.dir" value="${ver.dir}\origin"/>
	
	<!-- Diretório de scripts que devem ser enviados para o cliente atualizar a base de produção -->
	<property name="script.dir" value="${ver.dir}\scripts"/>

<!-- ///////////////////////////////////////////////////////////////////////////////////////////// -->
<!-- ////////////////////////////////// Principais Targets /////////////////////////////////////// -->
<!-- ///////////////////////////////////////////////////////////////////////////////////////////// -->
	<!-- Essas targets serão repetidas para cada um dos clientes -->

	<!-- Gera o arquivo ${name.client}.WAR -->
	<target name="generateFiles">
		<!-- Início da tarefa -->
		<tstamp>
			<format property="begin.time" pattern="MM/dd/yyyy hh:mm:ss:SS aa"/>
		</tstamp>
		<echo message="Tarefa iniciada em ${begin.time}"/>
		  <echo message="Criando o arquivo ${name.client}.WAR"/>
		
		<!-- Cria o diretório de destino do ${name.client}.WAR -->
		<mkdir dir="${origin.dir}"/>
		
		<!-- Insere os arquivos de customização no diretório TEMP -->
		  <copy todir="${tmp.dir}\web" overwrite="yes">
			  <fileset dir="${custom.dir}\${name.client}"/>
		  </copy>
		
		<!-- Cria o arquivos ${name.client}.war -->
		  <jar destfile="${origin.dir}\${name.client}.war">
			  <fileset dir="${tmp.dir}\web"/>
		  </jar>
		
		<!-- fim da tarefa -->
		 <tstamp>
			<format property="end.time" pattern="MM/dd/yyyy hh:mm:ss:SS aa"/>
		</tstamp>
		<echo message="Tarefa finalizada em ${end.time}"/>
	 </target>

<!-- ========================================================================================= -->

	<!-- Insere no ${name.client}.WAR a Skin solicitada -->
	<target name="changeSkin">
		<!-- Início da tarefa -->
		<tstamp>
			<format property="begin.time" pattern="MM/dd/yyyy hh:mm:ss:SS aa"/>
		</tstamp>
		<echo message="Tarefa iniciada em ${begin.time}"/>
		<echo message="Customizing generated ${name.client}.WAR to Selected Skin"/>
	
		<!-- Atualiza o ${name.client}.WAR com a skin que foi selecionada -->
		<jar destfile="${origin.dir}\${name.client}.war" update="true">
			<fileset dir="${skin.dir}\${skin.type}"/>
		</jar>
	
		<!-- fim da tarefa -->
		<tstamp>
			<format property="end.time" pattern="MM/dd/yyyy hh:mm:ss:SS aa"/>
		</tstamp>
		<echo message="Tarefa finalizada em ${end.time}"/>
		
	 </target>

<!-- ========================================================================================= -->

	<!-- Deploy da aplicação no Cliente -->
	<target name="deployWar">
		<!-- Início da tarefa -->
		<tstamp>
			<format property="begin.time" pattern="MM/dd/yyyy hh:mm:ss:SS aa"/>
		</tstamp>
		<echo message="Tarefa iniciada em ${begin.time}"/>
		
		<!-- Criação do diretório de destino no servidor de aplicação -->
		<!-- Essa informação está definida no arquivo url.properties -->
		<mkdir dir="${deploy.path}"/>
        <echo message="Fazendo deploy da aplicação do cliente ${name.client} no diretório ${deploy.path}"/>
        
		<!-- Target de exclusão dos arquivos antigos no servidor de aplicação -->
		<delete includeEmptyDirs="true">
           <fileset dir="${deploy.path}">
               <include name="**/*"/>
           </fileset>
        </delete>
        
		<!-- Descompactação do ${name.client}.war no diretório do servidor de aplicação -->
		<unwar src="${origin.dir}\${name.client}.war" dest="${deploy.path}"/>
	    
		<!-- fim da tarefa -->
		<tstamp>
			<format property="end.time" pattern="MM/dd/yyyy hh:mm:ss:SS aa"/>
		</tstamp>
		<echo message="Tarefa finalizada em ${end.time}"/>
	</target>

<!-- ========================================================================================= -->
	<!-- Atualiza banco e cria script para ser enviado -->
	<target name="update.versao">
		<!-- Início da tarefa -->
		<tstamp>
			<format property="begin.time" pattern="MM/dd/yyyy hh:mm:ss:SS aa"/>
		</tstamp>
		<echo message="Tarefa iniciada em ${begin.time}"/>
		
		<!-- Atualiza a base do cliente com a versao da aplicação -->
		<!-- essa informações estão definidas no client.properties -->
		<sql driver="${driver}" url="${url}" userid="${user}" password="${pwd}">			
			update CR_VERSAO set CD_VERSAO_BASE = '${timestamp}';
		</sql>
		
		<!--  Atualiza o arquivo .properties com a versão do cliente-->
		<propertyfile file="${ver.dir}/clientes.properties">
			<entry key="${version}" value="${timestamp}" />
		</propertyfile>
		
		<echo message="Gerando o arquivo de Atualização da versão no diretório: ${script.dir}/${name.client}/Atual/${pasta}/versao.sql"/>
		
		<!-- Cria o script de versão que deve ser executado no cliente -->
		<echo file="${script.dir}/${name.client}/Atual/${pasta}/versao.sql" message="update CR_VERSAO set CD_VERSAO_BASE = '${timestamp}'; commit;"/>
		
		<!-- Atualiza a pasta de scripts -->
		<exec executable="svn" dir="${script.dir}/${name.client}/Atual/${pasta}" failonerror="true">
			<arg line="update"/>
		</exec>
		
		<!-- Adiciona  arquivo criado -->
		<exec executable="svn" dir="${script.dir}/${name.client}/Atual/${pasta}" failonerror="true">
			<arg line="add versao.sql"/>
		</exec>
		
		<!-- comita todas as alterações -->
		<exec executable="svn" dir="${script.dir}/${name.client}/Atual/${pasta}" failonerror="true">
			<arg line="commit -m 'Alteração'"/>
		</exec>
	    
		<!-- fim da tarefa -->
		<tstamp>
			<format property="end.time" pattern="MM/dd/yyyy hh:mm:ss:SS aa"/>
		</tstamp>
		<echo message="Tarefa finalizada em ${end.time}"/>
	</target>
	
<!-- ///////////////////////////////////////////////////////////////////////////////////////////// -->
<!-- ////////////////////////////////Targets secundárias ///////////////////////////////////////// -->
<!-- ///////////////////////////////////////////////////////////////////////////////////////////// -->

<!-- Criação e Customização do ${name.client}.war do McDonalds -->
<target name="McDonads" description="--> Tarefa de criação e customização do arquivo war do cliente McDonad's ">
	<!-- Antcall passando o Nome do cliente -->
	<antcall target="generateFiles">
		<param name="name.client" value="McDonads"/>
	</antcall>
	
	<!-- Antcall passando a skin do cliente -->
	<antcall target="changeSkin">
		<param name="skin.type" value="RYD"/>
	</antcall>
</target>

<!-- Criação e Customização do ${name.client}.war do Giraffas -->
<target name="Giraffas" description="--> Tarefa de criação e customização do arquivo war do cliente Giraffa's ">
	<!-- Antcall passando o Nome do cliente -->
	<antcall target="generateFiles">
		<param name="name.client" value="Giraffas"/>
	</antcall>
	<!-- Antcall passando o skin do cliente -->
	<antcall target="changeSkin">
		<param name="skin.type" value="RY"/>
	</antcall>
</target>

<!-- Criação e Customização do ${name.client}.war do Bobs -->
<target name="Bobs" description="--> Tarefa de criação e customização do arquivo war do cliente Bob's ">
	<!-- Antcall passando o Nome do cliente -->
	<antcall target="generateFiles">
		<param name="name.client" value="Bobs"/>
	</antcall>
	<!-- Antcall passando o skin do cliente -->
	<antcall target="changeSkin">
		<param name="skin.type" value="BLU"/>
	</antcall>
</target>


<target name="McDonaldsDeploy" description="--> Tarefas de deploy do McDonaldse ">
	<antcall target="deployWar">
		<param name="name.client" value="McDonalds"/>
		<!-- URL definida no arquivo url.properties -->
		<param name="deploy.path" value="${McDonalds.deploy.path}"/>
	</antcall>
</target>
<target name="GiraffasDeploy" description="--> Tarefas de deploy do Giraffa">
	<antcall target="deployWar">
		<param name="name.client" value="Giraffas"/>
		<!-- URL definida no arquivo url.properties -->
		<param name="deploy.path" value="${Giraffas.deploy.path}"/>
	</antcall>
</target>
<target name="BobsDeploy" description="--> Tarefas de deploy do Bob">
	<antcall target="deployWar">
		<param name="name.client" value="Bobs"/>
		<!-- URL definida no arquivo url.properties -->
		<param name="deploy.path" value="${Bobs.deploy.path}"/>
	</antcall>
</target>

<!-- Definições dos bancos para serem alterados pelo ANT -->
<target name="McDonalds.updt">
	<antcall target="update.versao">
		<param name="name.client" value="McDonalds"/>
		<param name="pasta" value="${McDonalds}"/>
		<param name="version" value="McDonalds.version"/>
		<param name="driver" value="${McDonalds.driver}"/>
		<param name="url" value="${McDonalds.url}"/>
		<param name="user" value="${McDonalds.user}"/>
		<param name="pwd" value="${McDonalds.pwd}"/>
	</antcall>	
</target>
<target name="Giraffas.updt">
	<antcall target="update.versao">
		<param name="name.client" value="Giraffas"/>
		<param name="pasta" value="${Giraffas}"/>
		<param name="version" value="Giraffas.version"/>
		<param name="driver" value="${Giraffas.driver}"/>
		<param name="url" value="${Giraffas.url}"/>
		<param name="user" value="${Giraffas.user}"/>
		<param name="pwd" value="${Giraffas.pwd}"/>
	</antcall>	
</target>
<target name="Bobs.updt">
	<antcall target="update.versao">
		<param name="name.client" value="Bobs"/>
		<param name="pasta" value="${Bobs}"/>
		<param name="version" value="Bobs.version"/>
		<param name="driver" value="${Bobs.driver}"/>
		<param name="url" value="${Bobs.url}"/>
		<param name="user" value="${Bobs.user}"/>
		<param name="pwd" value="${Bobs.pwd}"/>
	</antcall>	
</target>

</project>
M
ESTRUTURA DO url.properties:
# Definições de onde serão feitos os deploy's das aplicações
# SO: Linux
# Application Server: Apache Tomcat
McDonalds.deploy.path=/ServidorLinux1/opt/AS/tomcat1/webapps/mcdonalds/
Giraffas.deploy.path=/ServidorLinux2/opt/AS/tomcat2/webapps/giraffas/
Bobs.deploy.path=/ServidorLinux3/opt/AS/tomcat3/webapps/bobs/
M

ESTRUTURA DO client.properties:

# Configurações do bando e das pastas de scripts dos clientes
# Essas informações são atualizadas pelo ANT
# Driver que o ant utiliza para atualizar o banco
McDonalds.driver=oracle.jdbc.driver.OracleDriver
# Última pasta enviada para o cliente no empacotamento
McDonalds.fld=200810101702
# URL do banco de test do cliente
McDonalds.url=jdbc\:oracle\:thin\:@ServidorBanco\:Porta\:mcdonalds
# Usuário do banco
McDonalds.pwd=McDonalds_test
# Senha do banco
McDonalds.user=McDonalds_test
# Última versão gerada da aplicação
McDonalds.version=20091029
# Última pasta criada
McDonalds=200907211116

Giraffas.driver=oracle.jdbc.driver.OracleDriver
Giraffas.fld=200810101702
Giraffas.pwd=Giraffas_test
Giraffas.url=jdbc\:oracle\:thin\:@ServidorBanco\:Porta\:giraffas
Giraffas.user=Giraffas_test
Giraffas.version=20091029
Giraffas=200907211116

Bobs.driver=oracle.jdbc.driver.OracleDriver
Bobs.fld=200810101702
Bobs.pwd=Bobs_test
Bobs.url=jdbc\:oracle\:thin\:@ServidorBanco\:Porta\:bobs
Bobs.user=Bobs_test
Bobs.version=20091029
Bobs=200907211116
Criado 3 de novembro de 2009
Ultima resposta 3 de nov. de 2009
Respostas 3
Participantes 1