Ingeniero en Informática *
Regístrate para votar
Subir el
contenido de una carpeta
por ftp
mediante un script de Ant
Si alguna vez os habeis planteado ejecutar un script en windows que por ftp suba el contenido de una carpeta (que puede contener ficheros y otras carpetas), vereis que no es tarea sencilla.
En Autentia tenemos que subir a producción los diferentes desarrollos que realizamos, y es muy costoso tener que abrir un cliente grafico, subir lo desarrollado (en ocasiones se suben todos los ficheros aunque no hayan cambiado), y hemos optado por esta opción para esta tarea.
La mayoria de clientes graficos de ftp para windows no nos permite realizar tareas que sean programables (mediante el programador de tareas), o necesitas un script para modo texto porque no tenemos acceso al entorno gráfico.
Windows provee una herramienta de consola llamada ftp que es un cliente de dicho protocolo, pero que es poco útil para la tarea que queremos realizar, dado que nuestra carpeta contiene otras carpetas, y la tarea de ftp tiene que realizar una subida recursiva.
Ftp tiene 2 comandos para enviar ficheros: put y mput. El primero permite subir un único fichero, y mput permite subir varios ficheros, pero no carpetas (con los ficheros que contengan).
Solucionaremos esta problemática de manera muy sencilla.
Realizaremos un pequeño script de Ant (http://ant.apache.org/), y para ello hay que descargarse dicho programa (para configurarlo y aprender un poco qué es Ant mirar aquí http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=ant).
Ant necesita para funcionar de una máquina virtual de java, asi que necesitaremos instalar tambien al menos la jre de java (http://java.sun.com).
Una vez instaladas y configuradas estas herramientas, vamos a proceder a terminar de configurar Ant, puesto que ant funciona mediante 'tareas' (tasks), y las tarea de ftp que utilizaremos aquí necesita unas librerias especiales.
Leyendo la documentación de Ant apreciamos que necesitamos las siguientes librerias:
- jakarta-oro-2.0.7.jar (http://jakarta.apache.org/oro/)
- commons-net.jar (http://jakarta.apache.org/commons/net/index.html)
Una vez descargados ambos jar los metemos dentro de la carpeta lib de Ant (situada en %ANT_HOME%\lib).
Comprobamos que tenemos ambos jar en nuestra carpeta lib de Ant:

Ahora generamos un archivo al que llamaremos ftp-upload.xml con el siguiente contenido:
<?xml
version="1.0" encoding="utf-8"?><project
name="ftp-upload" default="ftp-upload"
basedir="."> <property
file="ftp-upload.properties"/> <target
name="ftp-upload">
<ftp
server="${ftp.host}"
userid="${ftp.user}"
password="${ftp.passwd}"
depends="yes"
remotedir="${ftp.remote.folderPath}">
</ftp>
</target></project> |
No merece la pena explicar ninguna de las líneas del anterior script dada su sencillez, salvo esta opcion:
depends="yes"
depends nos indica si queremos realizar subidas al servidor sólo de nuevos ficheros o ficheros que han cambiado respecto a los que hay en el servidor ftp (poniendolo a yes), o que suba todos los ficheros, independientemente si han cambiado o no (poniendolo a no).
Creamos otro fichero (donde guardaremos las propiedades del script), llamado ftp-upload.properties como sigue:
#
fichero de configuracion para script de subida por ftp#
del contenido de una carpeta#
servidor de ftp ftp.host
= 192.168.1.1#
usuario para ftpftp.user
= autentiaUser#
contraseñaftp.passwd
= autentiaPassword#
carpeta local cuyo contenido se subira al ftp#
(las rutas deben llevar los separadores '/' en lugar de '\')#
(no se debe poner la ultima '/')ftp.local.folderPath
= C:/Documents and Settings/autentia/ftp#
carpeta remota del ftp donde se almacenara el contenido de la carpeta
local#
si el ftp ya apunta a la carpeta deseada puede dejarse en blanco#
(las rutas deben llevar los separadores '/' en lugar de '\')
ftp.remote.folderPath
= |
(También podeis descargaros ambos ficheros desde aquí).
Si ejecutamos en una consola el siguiente comando, ejecutaremos el script creado en los pasos anteriores:
ant -f ftp-upload.xml
Obtendremos el siguiente resultado, si todo va bien:

(El resultado nos indica que se han enviado 0 archivos puesto que tenemos a yes el campo depends anteriormente comentado, y en los ficheros no había ninguna cambio realizado).
Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.
Comentarios
-
victor2009-05-28 - 03:10:23 AMhola, primero que nada quiero darte las gracias por tu tutorial, me ha servido de mucho, ya lo corri el xml y si me ha copiado los archivos, solo que tengo una pregunta. Tenia mi carpeta local, he mandado los archivos al servidor remoto, y hasta ahi todo bien. Después agregué archivos nuevos en mi carpeta local, y al correr el script me vuelve a mandar todos, y no solo los que he agregado. Pensé que la opción "yes" servia para eso, pero creo que entendí mal. ¿alguna sugerencia para que solo envie los nuevos archivos?.
-
Farregomez2006-11-21 - 03:26:11 PMHola, primero felicidades por todos vuestros tutoriales, son muy buenos. Estoy intentando probar vuestro scropt para hacer ftp, pero no sabia nada de apache y menos de ant. He bajado ant, pero no encuentro ninguan archivo de install o setup Que duda tan tonta, ¿no? A ver si me podeis ayudar un poco a configurar lo necesario para probarlo Gracias de antemano
-
Carlos2006-11-15 - 10:08:43 AMMuchas gracías. Verdaderamente útil.








