yml tag stages run files example cache maven gitlab-ci gitlab-ci-runner gitlab-8

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