maven - tag - gitlab ci yml environment
¿Cómo habilitar el almacenamiento en caché de artefactos de maven para gitlab ci runner? (5)
De acuerdo con la conversación sobre el rastreador de problemas de GitLab , logré cambiar la ruta del repositorio local de Maven y ponerla en el directorio ./.m2/repository/
, 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 de -Dmaven.repo.local
solo se puede configurar en cada ejecución con -Dmaven.repo.local
o editando settings.xml
, que es una tarea tediosa en un script de configuración 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 me funcionó, aunque alguien de GitLab afirmó que debería.
Ejemplo de un archivo de configuración gitlab-ci.yml
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"
Utilizamos gitlab ci con corredores compartidos para realizar nuestra integración continua. Para cada compilación, el corredor descarga toneladas de artefactos de Maven.
¿Hay alguna forma de configurar gitlab ci para que almacene en caché esos artefactos y así podamos acelerar el proceso de construcción al evitar que se descargue el mismo artefacto una y otra vez?
Gitlab CI le permite definir ciertas rutas, que contienen datos que se deben almacenar en caché entre compilaciones, por trabajo o por compilación (consulte here 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 varias compilaciones.
Un ejemplo que almacena en caché todas las dependencias de trabajo en su compilación:
cache:
paths:
- .m2/
variables:
MAVEN_OPTS: "-Dmaven.repo.local=.m2"
maven_job:
script:
- mvn clean install
La respuesta aceptada no lo hizo por mí.
Como mencionó zlobster , los chicos de GitLab tienen este increíble repository donde puedes encontrar un ejemplo adecuado del archivo .gitlab-ci.yml
utilizado para los proyectos de Maven.
Básicamente, lo que necesitas son estas líneas:
cache:
paths:
- .m2/repository
Tenga en cuenta que si decide agregar un caché local para un determinado trabajo, se reemplazará el global agregado que se agregó anteriormente. Más sobre esto here .
Puede agregar la carpeta de caché a la configuración del corredor gitlab-ci y pasarla a maven.
/etc/gitlab-runner/config.toml
[[runners]]
...
[runners.docker]
...
volumes = ["/cache", "/.m2"]
...
.gitlab-ci.yml
variables:
MAVEN_OPTS: "-Dmaven.repo.local=/.m2"
build:
script:
- mvn package
Si está utilizando kubernetes como ejecutor para gitlab-runner, también puede usar el caché de Maven. Elegí tener un caché persistente en NFS con k8s PV (pero gitlab-runner admite otros tipos de volumen). La siguiente configuración no utiliza la función gitlab de cache debido a la persistencia ofrecida por NFS.
1) cree un PersistentVolume en su grupo, ej. Aquí con NFS (adapte a su capa de persistencia y sus opciones):
apiVersion: v1
kind: PersistentVolume
metadata:
name: gitlabrunner-nfs-volume
spec:
capacity:
storage: 10Gi
mountOptions:
- nolock
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /gitlabrunner
server: 1.2.3.4
2) Consulte el PV para obtener un reclamo como un volumen en el pod de corredor:
[[runners.kubernetes.volumes.pvc]]
name = "pvc-1"
mount_path = "/path/to/mount/point1"
Nota (03/09/18): Todavía no existe una opción de línea de comando para estos parámetros. Hay un issue abierto.
3) Especifique la misma ruta para el caché de gitlab-runner:
[[runners]]
executor = "kubernetes"
# ...
cache_dir = "/path/to/mount/point1"
o
--cache-dir "/path/to/mount/point1"
en modo interactivo
4) use el directorio "/ path / to / mount / point1" en la opción -Dmaven.repo.local