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í.