2016-06-13 34 views
12

Sürekli entegrasyonu sağlamak için gitlab ci'yi ortak koşucularla birlikte kullanıyoruz. Her yapı için, koşucu tonlarca maven eseri indirir.Gitlab ci koşucusu için maven artefakt önbelleği nasıl etkinleştirilir?

Bu artefaktları önbelleğe almak için gitlab ci'yi yapılandırmanın bir yolu var mı? Böylece, aynı artefaktı tekrar tekrar indirmeyi engelleyerek yapı işlemini hızlandırabilir miyiz?

+1

/depo 'veya mvn -Dmaven.local.repo = Yol 'üzerinden yapılandırılabilir? – khmarbaise

cevap

12

Gitlab Cl bu iş başına oluşturur arasında önbelleğe gereken verileri içeren belirli yolları, tanımlama, veya (daha fazla ayrıntı için here bakınız) temel oluşturmak için olanak sağlar. Khmarbaise'nin önerisiyle birlikte, bu çoklu yapılar arasındaki bağımlılıkları önbelleğe almak için kullanılabilir.

Yapınızda tüm iş bağımlılıkları önbelleğe Bir örnek: GitLab's issue tracker üzerine aşırı konuşma göre

cache: 
    paths: 
    - .m2/ 

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

maven_job: 
    script: 
    - mvn clean install 
+0

güzel ve minimal. Çalışmış. – helt

+1

Bu, -Dmaven.repo.local = .m2'nin '-Dmaven.repo.local = .m2/repository'de değiştirilinceye kadar benim için çalışmadı – drakyoko

+5

Şimdi ve yeni gelenler için: ' GitLab' CI koşucularının örnek yapılandırmaları ile [güzel bir proje] [1] sürdürmektedir. [Örnek Maven projesi] [2] dosyası, maven eserlerinin nasıl önleneceğini gösterir. [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

, ben, Maven yerel depo yolunu değiştirip ./.m2/repository/ dizine koydu başardı biz olacak olan maven yerel depo yolu sadece her kaçak ayarlanabilir this StackOverflow answer göre, maalesef

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

: o zaman CI config bu küresel blok ekleyerek koşular arasında devam -Dmaven.repo.local veyadüzenleyerek, bir gitlab-ci yapılandırma komut dosyasında yapmak için can sıkıcı bir görevdir. Bir seçenek varsayılan Maven seçenekleri ile bir değişken ayarlamak ve her koşuya geçmek olabilir. Ayrıca, Yerel Maven deposunun mevcut dizinin bir çocuğu olması da çok önemlidir. Bazı nedenlerden dolayı, GitLab’ın birisinin iddia etmesine rağmen, /cache veya /builds’a koyma benim için çalışmadı. Maven + Java için bir çalışma gitlab-ci.yml yapılandırma dosyasının

Örnek:

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

Önbelleğe alınmış yapay objeleri Gitlab'deki projeler arasında paylaşmak mümkün mü? – zygimantus

1

Sen koşucu yapılandırmasını-ci gitlab ve maven onu geçmek önbellek klasörü ekleyebilir.

/etc/gitlab-runner/config.toml

[[runners]] 
... 
    [runners.docker] 
    ... 
    volumes = ["/cache", "/.m2"] 
    ... 

.gitlab-ci.yml Maven'in genellikle `$ HOME/.m2 altında bir önbellek vardır

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

build: 
    script: 
    - mvn package