我希望有人可以帮我为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
失败,并出现与上述相同的错误。
答案 0 :(得分:0)
实际上,如gitlab doc中所述,您使用dynamic storage
,因此在一个项目的同一并发作业的后续运行之间共享卷。我想在必须使用the host-bound storage
的项目之间共享数据。
对于警告,缓存仅用于工作目录,因此不支持诸如/.m2/repository
之类的绝对路径。就您而言,您不必为Maven存储库使用缓存,因为您使用的是卷。