2016-06-13 15 views
12

Chúng tôi sử dụng gitlab ci với người chạy chung để thực hiện tích hợp liên tục. Đối với mỗi công trình xây dựng, nhân vật tải xuống hàng tấn đồ tạo tác maven.Làm thế nào để kích hoạt bộ nhớ đệm tạo tác maven cho gitlab ci runner?

Có cách nào để cấu hình gitlab ci để lưu trữ các tạo tác đó để chúng tôi có thể tăng tốc quá trình xây dựng bằng cách ngăn không cho tải xuống cùng một lần tạo tác không?

+1

Maven có một bộ nhớ cache thường dưới '$ HOME/.m2/repository' hoặc có thể được cấu hình thông qua 'mvn -Dmaven.local.repo = Path'? – khmarbaise

Trả lời

12

Gitlab CI cho phép bạn xác định đường dẫn nhất định, chứa dữ liệu được lưu trữ giữa các bản dựng, trên cơ sở mỗi công việc hoặc cơ sở xây dựng (xem here để biết thêm chi tiết). Kết hợp với khuyến cáo của khmarbaise, điều này có thể được sử dụng để cache phụ thuộc giữa nhiều bản dựng.

Một ví dụ đó lưu trữ tất cả phụ thuộc công việc trong xây dựng của bạn:

cache: 
    paths: 
    - .m2/ 

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

maven_job: 
    script: 
    - mvn clean install 
+0

đẹp và tối thiểu. Đã làm việc. – helt

+1

Điều này không hiệu quả đối với tôi cho đến khi tôi thay đổi '-Dmaven.repo.local = .m2' trong' -Dmaven.repo.local = .m2/repository' – drakyoko

+5

Đó là năm 2017 và cho những người mới đến: 'GitLab' duy trì [một dự án đẹp] [1] với các cấu hình mẫu của nhân viên CI của họ. Tệp [project Maven project] [2] thể hiện cách cache các tạo tác 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

Theo cuộc nói chuyện qua trên GitLab's issue tracker, tôi quản lý để thay đổi đường dẫn kho lưu trữ địa phương Maven và đặt nó vào ./.m2/repository/ thư mục, đó là chúng ta sẽ sau đó vẫn tồn tại giữa chạy bằng cách thêm khối toàn cầu này cho CI config:

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

Thật không may, theo this StackOverflow answer con đường kho địa phương maven chỉ có thể được đặt trên mỗi chạy với -Dmaven.repo.local hoặc bằng cách chỉnh sửa settings.xml, một tác vụ tẻ nhạt của bạn trong tập lệnh cấu hình gitlab-ci. Một tùy chọn sẽ là đặt một biến với các tùy chọn Maven mặc định và chuyển nó cho mọi lần chạy.

Ngoài ra, điều quan trọng là kho lưu trữ Maven cục bộ là con của thư mục hiện tại. Vì một lý do nào đó, hãy đặt nó trong /cache hoặc /builds không hoạt động đối với tôi, mặc dù một người nào đó từ GitLab đã xác nhận quyền sở hữu.

Ví dụ về một tập tin cấu hình gitlab-ci.yml làm việc cho 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

Có thể chia sẻ các tạo phẩm được lưu trong bộ nhớ cache giữa các dự án trong Gitlab không? – zygimantus

1

Bạn có thể thêm thư mục bộ nhớ cache để gitlab-ci cấu hình Á hậu và vượt qua nó để 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 
Các vấn đề liên quan