Recomendaciones a la administración del repositorio

LIBP-0149 (Libro de pautas)

Para el correcto funcionamiento y gestión del repositorio de librerías es conveniente seguir una serie de recomendaciones y/o buenas prácticas en la administración del mismo.

Existen un conjunto de recomendaciones que es conveniente seguir para dar solución a las diferentes problemáticas que se pueden dar durante el día a día en la administración de un repositorio de librerías. Aunque este libro de pautas se ha redactado para la administración interna del repositorio de librerías de MADEJA, puede ser de ayuda para cualquier repositorio de librerías existente en la Junta de Andalucía.

Pautas

TítuloCarácter
Artefactos free y non-freeRecomendada
Artefactos de la Junta de AndalucíaRecomendada
Localización de artefactosRecomendada
Redirección de artefactosRecomendada
Inclusión de un repositorio remoto de otra ConsejeríaRecomendada
Repositorio virtual por defecto "repo" en ArtifactoryRecomendada

Artefactos free y non-free

Se debe examinar la licencia del artefacto a desplegar, de forma que los artefactos free (libre distribución) se desplieguen en un repositorio distinto a los non-free (no permite distribución)

Dentro del conjunto de artefactos que hay que desplegar manualmente en el repositorio Artifactory, se distingue entre aquello cuya licencia permite su libre distribución y aquellos que no la permiten.

Dado el caso de tener que desplegar un artefacto, habrá que mirar en su licencia si permite la libre distribución. Si permite la libre distribución el artefacto se desplegará en el repositorio ja-free-repo, en otro caso el artefacto se desplegará en ja-non-free-repo.

De esta manera, a la hora de publicar el repositorio en Internet, bastará con excluir el repositorio ja-non-free-repo; y de esta manera no se incurrirá en una violación de licencia.

Artefactos de la Junta de Andalucía

Aquellos artefactos que son desarrollados bajo el paraguas de la Junta de Andalucia, se desplegarán en el repositorio ja-artifacts-deploy. Este repositorio obliga a todo artefacto a contener el groupId es.juntadeandalucia.

Localización de artefactos

Para localizar un artefacto, se recomienda utilizar las herramientas y mecanismos que a continuación se describen

El proceso de localizar un artefacto definido en un fichero pom no es exacto al 100%, sin embargo se puede hacer uso de algunas herramientas que nos ayuden en nuestro propósito:

En caso de no encontrar nuestro artefacto haciendo uso de las herramientas anteriores, posiblemente dicho artefacto se distribuirá como una descarga desde la página web del fabricante. Se descargará el artefacto desde la página web del fabricante, y se desplegará el artefacto según lo definido en el apartado Artefactos free y non-free.

Redirección de artefactos

En caso de detectar un defecto en las coordenadas de una dependencia, se utilizará el concepto de relocalización de artefactos que tiene Maven para redirigir las coordenadas incorrectas de una dependencia a las coordenadas correctas.

En caso de detectar un defecto en las coordenadas de una dependencia, hay ocasiones en las que no es factible solicitar al proveedor modificar las coordenadas que están mal. Lo primero que hay que hacer en este caso es localizar la dependencia con las coordenadas correctas. Una vez localizada se utilizará el concepto de relocalización de artefactos que tiene Maven, de esta manera se podrán redirigir las coordenadas incorrectas de una dependencia a las coordenadas correctas.

El proceso sería el siguiente:

  1. Se parte de la base que la dependencia con las coordenadas correctas ya está subida en el repositorio. Caso que no estuviese bien ubicada es lo primero que tendríamos que hacer. En este caso la dependencia con las coordenadas correctas, no habría que desplegarlo puesto que ya está en el repositorio oficial de Maven

    <dependency>
        <groupId>org.apache.santuario</groupId>
        <artifactId>xmlsec</artifactId>
        <version>1.4.1</version>
    </dependency>
  2. Cada vez que se encuentre algún pom que incluya la dependencia xmlsec-1.4.1 de manera incorrecta se actuará de la siguiente manera. Por ejemplo, en un proyecto se definela dependencia de la siguiente manera:

    <dependency>
        <groupId>apache</groupId>
        <artifactId>xmlsec</artifactId>
        <version>1.4.1</version>
    </dependency>
    1. Se creará un fichero pom.xml con la siguiente estructura:

      <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>apache</groupId>
          <artifactId>xmlsec</artifactId>
          <version>1.4.1</version>
          <distributionManagement>
              <relocation>
                  <groupId>org.apache.santuario</groupId>
              </relocation>
          </distributionManagement>
      </project>

      En este caso sólo se redefine la coordenada groupId, aunque podrían redefinirse cualquier otra.

    2. Se desplegará este pom.xml en el repositorio oportuno de Artifactory(en función de la licencia). De esta manera cuando se solicite la dependencia en apache:xmlsec:1.4.1 se redirigirá a la coordenada correcta org.apache.santuario:xmlsec:1.4.1

Inclusión de un repositorio remoto de otra Consejería

En caso que haya que incluir un nuevo repositorio remoto de una Consejería

En caso que haya que incluir un nuevo repositorio remoto de una Consejería, habrá que realizar lo siguiente desde las pantallas de administración de la interfaz web:

  • Dar de alta el nuevo repositorio remoto, incluyendo el patrón de inclusión es/juntadeandalucia/**; de manera que sólo se acepten artefactos con groupId es.juntadeandalucia.
  • Añadir un patrón de exclusión en el nuevo repositorio, para no tomar aquellos artefactos que ya son proporcionados por otras Consejerías.
  • Editar la configuración del repositorio virtual ja-artifacts, y añadir el nuevo repositorio remoto como parte de los repositorios que forman parte de ja-artifacts.

Con estos dos pasos, cualquier artefacto desplegado en el repositorio remoto de la Consejería, será accesible desde nuestro repositorio de librerías.

Repositorio virtual por defecto "repo" en Artifactory

Se recomienda deshabilitar el repositorio virtual por defecto "repo" en Artifactory

Por defecto Artifactory publica un repositorio virtual denominado "repo", que agrupa el conjunto de todos los repositorios configurados. En algunas ocasiones este comportamiento no es el deseado, ya que podría interesar no publicar algún repositorio.

Para subsanar este problema, se recomienda realizar los siguientes pasos en la interfaz de administración de Artifactory:

  • Realizar un System Export, marcando la opción Exclude Content
  • Sobre el System Export que se acaba de realizar, modificar el archivo artifactory-config.xml incluyendo un nuevo repositorio virtual:

    ...
    <virtualRepository>
      <key>repo</key>
      <description></description>
      <type>maven2</type>
      <includesPattern>**/*</includesPattern>
      <artifactoryRequestsCanRetrieveRemoteArtifacts>false</artifactoryRequestsCanRetrieveRemoteArtifacts>
      <repositories/>
      <pomRepositoryReferencesCleanupPolicy>discard_active_reference</pomRepositoryReferencesCleanupPolicy>
    </virtualRepository>
    ...
  • Realizar un System Import, con el System Export que se ha modificado en el paso anterior