2016-06-13 13 views
12

Wir benutzen gitlab ci mit geteilten Läufern, um unsere kontinuierliche Integration zu machen. Für jeden Build lädt der Runner Tonnen von Maven-Artefakten herunter.Wie kann Maven Artefakt Caching für Gitlab Ci Runner aktiviert werden?

Gibt es eine Möglichkeit, gitlab ci so zu konfigurieren, dass diese Artefakte zwischengespeichert werden, sodass wir den Erstellungsprozess beschleunigen können, indem wir verhindern, dass das gleiche Artefakt immer wieder heruntergeladen wird?

+1

Maven einen Cache hat in der Regel unter '$ HOME/.m2/repository "oder kann über' mvn -Dmaven.local.repo = Path' konfiguriert werden? – khmarbaise

Antwort

12

Mit Gitlab CI können Sie bestimmte Pfade definieren, die Daten enthalten, die zwischen Builds auf Job- oder Build-Basis zwischengespeichert werden sollen (weitere Details finden Sie unter here). In Kombination mit der Empfehlung von khmarbaise können damit Abhängigkeiten zwischen mehreren Builds zwischengespeichert werden.

Ein Beispiel, das alle Job-Abhängigkeiten in Ihrem Build-Caches:

cache: 
    paths: 
    - .m2/ 

variables: 
    MAVEN_OPTS: "-Dmaven.repo.local=.m2" 

maven_job: 
    script: 
    - mvn clean install 
+0

schön und minimal. Hat funktioniert. – helt

+1

Das hat nicht funktioniert, bis ich '-Dmaven.repo.local = .m2' in' -Dmaven.repo.local = .m2/repository' geändert habe. – drakyoko

+5

Es ist 2017 jetzt und für die Neuankömmlinge: 'GitLab' pflegt [ein schönes Projekt] [1] mit Beispielkonfigurationen ihres CI-Runner. Die [Beispielmaven-Projekt] [2] -Datei zeigt, wie die Maven-Artefakte zwischengespeichert werden. [1]: https://gitlab.com/gitlab-org/gitlab-ci-yml/tree/master [2]: https://gitlab.com/gitlab-org/gitlab-ci-yml /blob/master/Maven.gitlab-ci.yml – zloster

4

Nach dem Gespräch über auf GitLab's issue tracker konnte ich das Maven lokalen Repository-Pfad und es ändern in ./.m2/repository/ Verzeichnis setzen, das ist, werden wir dann besteht zwischen den Läufen von diesem globalen Block zu dem CI-Config und fügen hinzu:

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

Leider nach this StackOverflow answer der maven-Pfad lokalen Repository kann nur auf jedem Laufe gesetzt wird mit -Dmaven.repo.local oder durch Bearbeiten Ihrer settings.xml, die eine mühsame Aufgabe in einem gitlab-ci Konfigurationsskript ist. Eine Option wäre, eine Variable mit den Standard-Maven-Optionen zu setzen und sie an jeden Lauf zu übergeben.

Auch ist es wichtig, dass das lokale Maven-Repository ein Kind des aktuellen Verzeichnisses ist. Aus irgendeinem Grund funktionierte es nicht für mich, es in /cache oder /builds zu setzen, obwohl jemand von GitLab behauptete, dass es sollte.

Beispiel einer Arbeits gitlab-ci.yml Konfigurationsdatei für 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" 
+0

Ist es möglich, zwischengespeicherte Artefakte zwischen Projekten in Gitlab zu teilen? – zygimantus

1

Sie können Cache-Ordner in den Gitlab-ci Läufer Konfiguration und es Maven passieren.

/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