Artifactory

RECU-0327 (Recurso Manual)

Descripción

Artifactory es un Repositorio de Maven. En el se pueden desplegar las dependencias que necesiten los proyectos en maven para su ciclo de vida. Otra de las principales funciones de artifactory es hacer de proxy cache de un repositorio propio con otros existentes. Esta basado en JCR (usando JackRabbit como implementación) para guardar los artefactos y administración de los metadatos (xml). Tiene una GUI basada en wicket y usa jetty para una implementación rápida (también se puede implementar sobre Tomcat).

Características

A continuación vamos a enumerar las principales característica de Artifactory.

  • Facilidad de instalación. Puede empezar a usarse en cuestión de minutos (con la configuración por defecto), simplemente desempaquetando el archivo descargado de la web y ejecutando el contenedor Jetty embebido, no siendo esta la configuración recomendada. También puede desplegarse en un contenedor web como Tomcat con diferentes configuraciones.
  • Facilidad de configuración. Su configuración depende de un único archivo XML. La configuración de la seguridad se puede realizar fácilmente desde la interfaz web.
  • Soporte para múltiples repositorios locales. Fácil separación de artefactos de terceras partes. Importación/ Exportación para cada repositorio local vía web. Backups programadas de los repositorios locales.

 

Prerrequisitos e incompatibilidades

Prerrequisitos

Según la documentación de Artifactory, los requisitos son los siguientes:

  • JDK 1.5 o superior instalado en el servidor.
  • Al menos unos 400 MB para la pila de Java, con el fin de garantizar un comportamiento correcto de la aplicación.

Para establecer el tamaño mínimo y máximo de memoria que Java utilizará, se ejecutará el siguiente comando:

java -XmsTamañoMinimo -XmxTamañoMáximo

Como ya hemos comentado en las características de Artifactory, este se puede ejecutar en modo standalone con una instancia dedicada de Tomcat o bien realizar un despliegue bajo Tomcat a partir del WAR. Recordemos que la opción de ejecutar Artifactory desde un servidor embebido por defecto no es la opción más recomendable para entornos productivos.

Tanto para la instalación en Tomcat dedicado como para la versión de despliegue desde WAR utilizaremos la versión 5.5 o superior.

En el apartado "Instalación y Modo de empleo" veremos como realizar ambas instalaciones

Incompatibilidades

En caso de que se desee emplear Maven3, es necesario modificar la configuración de metadatos de Artifactory para que no se publiquen “snapshots” no únicos. Para ello, en el fichero artifactory.config.xml, modificar el valor de <maxUniqueSnapshots> para que valga 1.

Interacción con otros subsistemas o componentes

  • Integración con MySQL: se requiere conectividad y usuario con privilegios sobre un esquema en una base de datos MySQL 5 o superior (versiones anteriores no funcionan en Artifactory).
  • Integración con LDAP Corporativo: se requiere conectividad con el LDAP corporativo
  • Integración con Hudson: se requiere conectividad con el Hudson utilizado para el despliegue de artefactos
    • Instalación del plugin “Artifactory Plugin” en Hudson

 

Modo de empleo

A continuación vamos a proceder a detallar los pasos que se han de seguir para instalar Artifactory.

Instalación

Para realizar este procedimiento de instalación, nos hemos basado en la versión de 2.2.5 y Tomcat 5.5.27, corriendo sobre S.O. Debian 5.0.2 Lenny. En este apartado se comentarán dos posible métodos para instalar la herramienta Artifactory. En ambos casos estos dos primeros pasos son comunes.

  • Descargar la última versión estable de Artifactory (versión 2.2.5 durante la elaboración de este manual)
  • Descargar Apache Tomcat 5.5.27
Instancia dedicada de Tomcat
  1. Descomprimir Apache Tomcat en /opt/tomcat/artifactory
  2. Descomprimir Artifactory Standalone en /opt/artifactory/current. Este directorio será el que se configure en la variable $ARTIFACTORY_HOME
  3. Ejecutar el script ubicado en /opt/artifactory/current/bin/tomcat-install.sh.
    Las rutas propuestas en el punto 1 y 2 son orientativas y pueden ser modificadas. En caso que sean modificadas, habrá modificar el script tomcat-install.sh del punto 3 para adaptarlo a las nuevas rutas. A título informativo, se describe las acciones que ejecutará el script anterior
    • Ejecuta el script ubicado en $ARTIFACTORY_HOME/bin/install.sh
    • Reemplaza el directorio /etc/init.d/artifactory por $ARTIFACTORY_HOME/misc/Tomcat/artifactory.
    • Reemplazar el fichero del Tomcat conf/server.xml por $ARTIFACTORY_HOME/misc/Tomcat/server.xml (cambiar el puerto si se desea)
    • Copia en el directorio de Tomcat conf/Catalina/localhost el fichero $ARTIFACTORY_HOME/misc/Tomcat/artifactory.xml
    • Reemplaza el fichero de tomcat bin/setenv.sh por $ARTIFACTORY_HOME/misc/Tomcat/setenv.sh
    • Cambia el propietario del directorio home de Tomcat:
      chown -R artifactory /opt/tomcat/artifactory
  4. Arrancar el Tomcat mediante el comando service artifactory start, o bien /etc/init.d/artifactory start para probar el correcto funcionamiento

Si no se ha cambiado la configuración por defecto, Artifactory estará disponible en el puerto 8081 de la instancia de Tomcat.

Instalación a partir de WAR
  1. Descomprimir Artifactory Standalone en el directorio que deseemos. Si se ejecuta Artifactory por primera vez con la configuración por defecto sin definir la variable $ARTIFACTORY_HOME, toda la información se generará sobre la carpeta ${user.home}/.artifactory.
    Si se deseará tener el control sobre la ubicación en la se guardará toda la información relativa a Artifactory tenemos dos opciones:
    1. Arrancar el Tomcat con la variable -Dartifactory.home=$ARTIFACTORY_HOME, donde $ARTIFACTORY_HOME apuntaría a la ubicación donde estuviera instalado Arfifactory.
    2. Crear la variable de entorno $ARTIFACTORY_HOME apuntando al directorio de instalación de Artifactory. Habrá que asegurar que el usuario que ejecuta el Tomcat, tiene permisos de escritura sobre el directorio $ARTIFACTORY_HOME
  2. Copiar el archivo $ARTIFACTORY_HOME/webapps/artifactory.war en el directorio $TOMCAT_HOME/webapps/
  3. Arrancar el Tomcat para probar el correcto funcionamiento
Configuración en Artifactory para usar MySQL
  1. Incluir en el fichero $ARTIFACTORY_HOME/etc/artifactory.system.properties la siguiente propiedad:

    artifactory.jcr.configDir=repo/filesystem-mysql
  2. Configurar el fichero $ARTIFACTORY_HOME/etc/repo/filesystem-mysql/repo.xml con los valores de la base de datos MySQL (usuario, contraseña, url, etc...)
  3. Descargar el driver MySQL, y copiarlo en el directorio $ARTIFACTORY_HOME/lib en el caso de instalación standalone, o en TOMCAT_HOME/lib en caso de haber instalado Artifactory desde el war
  4. Iniciar/Reiniciar el Tomcat correspondiente para que cargue la nueva configuración.
Configuración de Cluster en Artifactory

Artifactory reconoce limitaciones a la hora de configurar la aplicación en alta disponibilidad. La solución que proponen en este sentido es una configuración en modo activo/pasivo. Esta configuración dispone de dos instancias de Artifactory compartirán una misma base de datos al mismo tiempo. Según la documentación oficial, en la versión actual no es posible otro tipo de configuración.

Proceso de configuración básica

Una vez instalada la aplicación, podremos acceder a la aplicación web vía http://server:8081/artifactory. La primera vez que iniciamos sesión con Artifactory, utilizaremos como nombre de usuario “admin” y contraseña “password”.

Es recomendable cambiar la contraseña en la primera entrada. En el menú de la izquierda, Security / Users, editamos el usuario admin y le cambiamos la contraseña.

También es recomendable la creación de otros usuarios, por ejemplo se podría crear el usuario "hudson" sin permisos de administración pero que pueda desplegar dependencias.

Eliminación de los repositorios por defecto

La estructura del repositorio tiene un enfoque orientado al proceso de entregas software y no orientado al desarrollo software basado en SNAPSHOTS. De esta manera, la propuesta de repositorios por defecto que nos presenta Artifactory no satisface nuestras necesidades. Por este motivo, se procederá a eliminar los siguientes repositorios que vienen preconfigurados en Artifactory:

Repositorios localesRepositorios virtuales
libs-releases-localremote-repos
libs-snapshots-locallib-releases
plugin-releases-localplugin-releases
plugin-snaphots-locallibs-snapshots
ext-releases-localext-snapshots-local

Una vez "logados" como administrador pulsar en la pestaña de “Admin” y seleccionar en el menú de la izquierda “Repositories”. Eliminar todos los repositorios definidos como Local Repositories y Virtual Repositories.

Creación de los nuevos repositorios

Será necesario crear los repositorios propuestos en la arquitectura lógica del sistema. Por este motivo, se procederá a crear los siguientes repositorios en Artifactory:

Repositorios localesRepositorios virtuales
ja-free-repoja-proxy-repo
ja-non-free-repoja-artifacts
ja-artifacts-deployja-internal
 ja-legacy
Repositorio local "ja-free-repo"

Este repositorio será el encargado de recoger el conjunto de artefactos de libre uso que no estén disponibles en ningún repositorio maven, si y solo si esté permitida su libre distribución. Se da la posibilidad de manejar tanto “releases” como “snapshots”. En un principio no se configuran patrones de inclusión/exclusión ya que no se ha detectado la necesidad de usarlo en este caso, aunque esto no exime de la posibilidad de usarlos en caso que fuera necesario.

Repositorio local "ja-non-free-repo"

Este repositorio será el encargado de recoger el conjunto de artefactos de libre uso que no estén disponibles en ningún repositorio maven, pero que sin embargo no esté permitida su libre distribución. Se da la posibilidad de manejar tanto “releases” como “snapshots”. En un principio no se configuran patrones de inclusión/exclusión ya que no se ha detectado la necesidad de usarlo en este caso, aunque esto no exime de la posibilidad de usarlos en caso que fuera necesario.

Repositorio local "ja-artifacts-deploy"

Este repositorio contendrá aquellos artefactos que se generan a partir de los proyectos del repositorio MADEJA. En este caso sólo se permite incluir “releases”, y sólo se admitirán artefactos generados en la juntadeandalucia mediante el patrón “es/juntadeandalucia/**. En caso de existir más patrones que apliquen sobre proyectos generados desde la Junta de Andalucía se indicarán en este repositorio.

Repositorio virtual "ja-proxy-repo"

Este repositorio representa al grupo de repositorios proxy-caché a los repositorios publicados por terceras partes(Maven Central, etc). En caso que un determinado proyecto necesite de un artefacto publicado en un repositorio (por ejemplo las librerías de Jboss), habrá que dar de alta dicho repositorio como proxy Al crearlo se incluirán todos los repositorios remotos que trae pre-configurados Artifactory.

Repositorio virtual "ja-artifacts"

Una de las buenas prácticas definidas para el nuevo repositorio es la publicación de un repositorio por cada Consejería que desee publicar sus artefactos en el nuevo repositorio MADEJA. De esta manera el nuevo repositorio MADEJA creará un nuevo repositorio remoto que enlace con el repositorio de cada Consejería. De esta manera se consigue el nuevo repositorio MADEJA dispondrá en todo momento, del conjunto de artefactos publicados en las distintas Consejerías. El repositorio virtual “ja-artifacts” agrupará a todos los repositorios remotos que se han dado de alta enlazando con las distintas Consejerías. Además “ja-artifacts” incluirá el conjunto de artefactos generados a partir de los proyectos desplegados en el repositorio MADEJA (estos artefactos serían los que están almacenados en “ja-artifacts-deploy”) . El resultado final esperado sería que el repositorio “ja-artifact” contuviera todos los artefactos cuyo groupId fuera del tipo “es,juntadeandalucia”.

Repositorio virtual "ja-internal"

Este repositorio agrupará al conjunto de repositorios creados según la arquitectura lógica propuesta. De esta manera, este repositorio será el que haya que configurar en fichero de configuración Maven “settings.xml”. Este repositorio será la fachada principal del nuevo repositorio MADEJA interno. De esta manera este repositorio agrupará los repositorios “ja-free-repo”, “ja-non-free-repo”, “ja-artifacts” y “ja-proxy-repo” anteriormente definidos. No se configuran patrones de inclusión/exclusión ya que al actuar como fachada tiene como objetivo servir todos los artefactos que se desean publicar independientemente de su procedencia.

Repositorio "ja-legacy"

Este repositorio tiene como objetivo extender la vida de los proyectos que estaban utilizando el repositorio anterior. De esta manera este repositorio LEGACY, se configurará como proxy a MADEJA Artifactory. En función de la estructura de MADEJA Artifactory, “ja-legacy” se configurará como repositorio remoto o como repositorio virtual.

Creación de repositorios remotos

El conjunto de repositorios remotos puede variar a lo largo del tiempo. Este tipo de repositorios proporciona una de las principales ventajas de Artifactory, que es su capacidad de hacer de proxy-cache con otros repositorios. De esta forma cuando maven pida una dependencia a nuestra instalación de Artifactory y no la tenga, irá a buscarla en los repositorios remotos que tenga en su configuración, y si la encuentra se la traerá y la cacheará para el futuro.

Configuración de LDAP

Artifactory permite autenticarse a sus usuarios vía LDAP. Para ello, es necesario configurar convenientemente Artifactory proporcionándole los datos relativos a la ubicación del directorio LDAP, así como la estructura interna de la ramas.

En la aplicación web (autenticado como administrador) iremos a la sección Security > LDAP Settings e indicaremos que se desea configurar un directorio LDAP pulsando sobre el botón "New". Una vez en el formulario habrá que rellenarlos con los siguientes datos:

  • Settings Name: cadena identificativa del LDAP, por ejemplo “LDAP Corporativo”
  • LDAP URL: ldap://servidor:389/o=empleados,o=juntadeandalucia,c=es
  • Auto Create Artifactory Users: marcar como activa esta opción si se desea asignar permisos especiales (fuera aparte del permiso de lectura) a usuarios del LDAP.
  • Search Filter: uid={0}
  • Sub-tree search: marcar activa

Despliegue manual de artefactos

Para subir los artefactos propios, utilizaremos la interfaz web para subir el artefacto o el conjunto de artefactos (empaquetados convenientemente en zip), seleccionando en el menú de la izquierda "Deploy an artifact"

Versiones

La última versión final disponible de Artifactory durante la redacción de esta página es la 2.2.5.

Entre las características principales disponibles en esta versión son:

  • Repositorios Virtuales: Permite la creación de repositorios virtuales para combinar varios repositorios locales y remotos, proveyendo así de una mayor flexibilidad en el control de la resolución de artifacts. Por defento vienen dos repositorios virtuales "repo" y "snapshots-only"
  • Posibilidad de almacenar el repositorio tanto en sistema de ficheros como en base de datos.
  • Repositorios Maven1 Remotos: Ahora soporta proxing con repositorios remotos de Maven1.
  • Repositorios Offline: Soporta el estado "offline" para repositorios remotos.
  • Herramienta desde la interfaz de usuario para realizar el despliegue de artefactos
  • Import y Export del Sistema Entero: Permite exportar a zip todo el contenido del sistema incluida la información de seguridad y metadata.
  • Búsqueda Avanzada: Posibilidad de realizar búsquedas sobre artefactos, el fichero pom o sobre las clases.
  • Integración con LDAP
  • Integración con Hudson
  • Soporte WebDav: Artifactory ahora puede ser usado por cualquier cliente WebDav. Actualmente se soportan los siguientes comandos DAV: options, get, propfind, put, mckol y delete.
  • Clustering en modo activo/pasivo
  • Borrado de Backups y Filtros: Borrado automático de backups antiguos de a cuerdo a un cierto peridodo de retención y filtrado de ciertos repositorios (como caches) al hacer e backup.
  • Borrado de Snapshots Únicas: Control sobre el número máximo de snapshots unicas que pueden estar desplegads en cada repositorio y borrado automático de las antiguas snapshot únicas.
  • Mejor gestión de los logs: Separación de log para auditoría para los eventos de acceso a cada repositorio y separado del log general de artifactory en Tomcat.

Contenidos relacionados

Pautas
Recursos
Área: Entorno » Área Gestión de la Entrega
Código Título Tipo Carácter
RECU-0681 Características de Maven3 respecto a Maven2 Referencia Recomendado