GitLab CI的通用Maven存储库

时间:2019-05-23 09:19:41

标签: java git maven gitlab

我希望有人可以帮我为GitLab设置一个简单的Maven CI脚本。

我试图搜索stackoverflow和google,这会导致几个问题和答案,但是它们似乎完全不同还是我不理解它们。

我有两个项目的简单设置。 project B取决于project A(= pom包装)。

我在运行程序配置/etc/gitlab-runner/config.toml中添加了卷的行

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

我的两个项目的.gitlab-ci.yml如下

image: maven:3.6.1-jdk-12

cache:
  paths:
    - /.m2/repository
    - target/

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

maven_job:
  script:
    - mvn clean install

有了这个-第一个项目正确构建,并且一次又一次执行时,它不会下载所有与maven相关的插件来构建项目,因此缓存可以正常工作。

它也指出

[INFO] Installing /builds/end2end/projectA/pom.xml to /.m2/repository/de/end2end/projectA/0.4.4-SNAPSHOT/projectA-0.4.4-SNAPSHOT.pom

虽然报告在最后

WARNING: /.m2/repository: not supported: outside build directory 
WARNING: /.m2/repository/classworlds: not supported: outside build directory 
WARNING: /.m2/repository/classworlds/classworlds: not supported: outside build directory 
WARNING: /.m2/repository/classworlds/classworlds/1.1-alpha-2: not supported: outside build directory 
WARNING: /.m2/repository/classworlds/classworlds/1.1-alpha-2/_remote.repositories: not supported: outside build directory 
[...]

执行projectB时,作业失败并显示信息,表明找不到projectA

那么-Runner / .gitlab-ci.yml文件的配置有什么问题?

我尝试了

cache:
  paths:
    - .m2/repository

它删除了警告,但是projectA进入了本地安装的.m2

[INFO] Installing /builds/end2end/projectA/pom.xml to /builds/end2end/projectAt/.m2/repository/de/end2end/projectA/0.4.4-SNAPSHOT/projectA-0.4.4-SNAPSHOT.pom

projectB失败,并出现与上述相同的错误。

1 个答案:

答案 0 :(得分:0)

实际上,如gitlab doc中所述,您使用dynamic storage,因此在一个项目的同一并发作业的后续运行之间共享卷。我想在必须使用the host-bound storage的项目之间共享数据。

对于警告,缓存仅用于工作目录,因此不支持诸如/.m2/repository之类的绝对路径。就您而言,您不必为Maven存储库使用缓存,因为您使用的是卷。