Saltar al contenido

¿Cómo habilitar el almacenamiento en caché de artefactos de maven para gitlab ci runner?

Solución:

Gitlab CI le permite definir ciertas rutas, que contienen datos que deben almacenarse en caché entre compilaciones, por trabajo o compilación (consulte aquí para obtener más detalles). En combinación con la recomendación de khmarbaise, esto se puede usar para almacenar en caché las dependencias entre múltiples compilaciones.

Un ejemplo que almacena en caché todas las dependencias de trabajo en su compilación:

cache:
  paths:
    - .m2/repository

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository"

maven_job:
  script:
    - mvn clean install

De acuerdo con la conversación sobre el rastreador de problemas de GitLab, logré cambiar la ruta del repositorio local de Maven y ponerlo en ./.m2/repository/ directorio, que luego persistiremos entre ejecuciones agregando este bloque global a la configuración de CI:

cache:
  paths:
    - ./.m2/repository
  # keep cache across branch
  key: "$CI_BUILD_REF_NAME"

Desafortunadamente, de acuerdo con esta respuesta de StackOverflow, la ruta del repositorio local maven solo se puede configurar en cada ejecución con -Dmaven.repo.local o editando tu settings.xml, que es una tarea tediosa de realizar en un script de configuración de gitlab-ci. Una opción sería establecer una variable con las opciones predeterminadas de Maven y pasarla a cada ejecución.

Además, es crucial que el repositorio local de Maven sea un elemento secundario del directorio actual. Por alguna razón, ponerlo en /cache o /builds no funcionó para mí, a pesar de que alguien de GitLab afirmó que debería.

Ejemplo de trabajo gitlab-ci.yml archivo de configuración para Maven + Java:

image: maven:3-jdk-8

variables:
  MAVEN_OPTS: "-Djava.awt.headless=true -Dmaven.repo.local=./.m2/repository"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version"

cache:
  paths:
    - ./.m2/repository
  # keep cache across branch
  key: "$CI_BUILD_REF_NAME"

stages:
  - build
  - test
  - deploy

build-job:
  stage: build
  script:
    - "mvn clean compile $MAVEN_CLI_OPTS"
  artifacts:
    paths:
      - target/

unittest-job:
  stage: test
  dependencies:
    - build-job
  script:
    - "mvn package $MAVEN_CLI_OPTS"
  artifacts:
    paths:
      - target/

integrationtest-job:
  stage: test
  dependencies:
    - build-job
  script:
    - "mvn verify $MAVEN_CLI_OPTS"
  artifacts:
    paths:
      - target/

deploy-job:
  stage: deploy
  artifacts:
    paths:
      - "target/*.jar"

La respuesta aceptada no lo hizo por mí.

Como langosta mencionado, los chicos de GitLab tienen este increíble repositorio donde puedes encontrar un ejemplo adecuado del .gitlab-ci.yml archivo utilizado para proyectos de Maven.

Básicamente, lo que necesitas son estas líneas:

cache:
  paths:
    - .m2/repository

Tenga en cuenta que si decide agregar una caché local para un determinado trabajo, se reemplazará la global agregada anteriormente. Más sobre esto aquí.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *