2016-06-13 2 views
12

공유 러너와 함께 gitlab ci를 사용하여 지속적인 통합을 수행합니다. 각 빌드에 대해 주자는 수 많은 인공물을 다운로드합니다.gitlab ci runner에 대한 maven 이슈 캐싱을 활성화하는 방법은 무엇입니까?

gitlab ci가 이러한 아티팩트를 캐시하도록 구성하여 같은 아티팩트를 계속 다운로드하는 것을 방지함으로써 빌드 프로세스의 속도를 높일 수 있습니까?

+1

/또는'mvn -Dmaven.local.repo = Path'를 통해 설정 될 수 있습니까? – khmarbaise

답변

12

Gitlab CI를 사용하면 빌드간에 캐시해야하는 데이터가 포함 된 특정 경로를 작업 또는 빌드별로 정의 할 수 있습니다 (자세한 내용은 here 참조). khmarbaise의 권고와 함께, 이것은 여러 빌드 간의 종속성을 캐시하는 데 사용될 수 있습니다.

빌드의 모든 작업 종속성 캐시 예 : GitLab's issue tracker에 걸쳐 대화에 따르면

cache: 
    paths: 
    - .m2/ 

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

maven_job: 
    script: 
    - mvn clean install 
+0

좋은 미니멀. 일했다. – helt

+1

'-Dmaven.repo.local = .m2/repository'에서'-Dmaven.repo.local = .m2'을 바꿀 때까지 이것은 작동하지 않았습니다 – drakyoko

+5

지금은 2017이고 새로 온 사람들에게는 'GitLab' CI 러너의 샘플 구성으로 [멋진 프로젝트] [1]를 유지합니다. [샘플 Maven 프로젝트] [2] 파일은 Maven 아티팩트를 캐시하는 방법을 보여줍니다. [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

을, 나는, Maven의 로컬 저장소 경로를 변경하고 ./.m2/repository/ 디렉토리에 넣어 관리 우리는 것 인 받는다는 로컬 저장소 경로 만에 모든 실행에 설정할 수 있습니다 this StackOverflow answer에 따라, 불행하게도

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

: 다음 CI의 설정이 글로벌 블록을 추가하여 실행간에 유지 -Dmaven.repo.local 또는 settings.xml을 편집하여 gitlab-ci 구성 스크립트에서 지루한 작업을 수행 할 수 있습니다. 옵션은 기본 Maven 옵션으로 변수를 설정하고 모든 실행에 전달하는 것입니다.

또한 로컬 Maven 저장소가 현재 디렉토리의 하위 항목 인 것이 중요합니다. 웬일인지, GitLab의 누군가가해야한다고 주장하더라도, /cache 또는 /builds에 넣는 것은 나에게 효과가 없었습니다. 메이븐 + 자바에 대한 작업 gitlab-ci.yml 구성 파일의

예 :

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

Gitlab에서 프로젝트간에 캐시 아티팩트를 공유 할 수 있습니까? – zygimantus

1

당신은 주자의 구성을-CI를 gitlab과 받는다는에 전달하는 캐시 폴더를 추가 할 수 있습니다.

/etc/gitlab-runner/config.toml

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

.gitlab-ci.yml 메이븐은 보통`의 $ HOME/.m2에서 캐시를 가지고

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

build: 
    script: 
    - mvn package 
관련 문제