今天在使用GitLab的CICD功能配SpringBoot项目时,由于项目需要从nexus私服下载依赖,所以需要配置maven的私服文件,其中.gitlab-ci.yml文件如下:
image: docker:latest #1
variables: #2
DOCKER_DRIVER: overlay2
#DOCKER_HOST: tcp://172.17.193.109:2375 # docker host,本地可不写
TAG: root/hello-spring:v0.1 # 镜像名称
MAVEN_CLI_OPTS: "-s .m2/settings-nexus.xml --batch-mode"
cache: #3
paths:
- .m2/repository
services: #4
- docker:dind
stages: #5
- package
- deploy
maven-package: #6
image: maven:3.5-jdk-8-alpine
tags:
- maven
stage: package
script:
- mvn $MAVEN_CLI_OPTS -Dmaven.test.skip=true clean package
artifacts:
paths:
- target/*.jar
build-master: #7
tags:
- docker
stage: deploy
script:
- docker build -t $TAG .
- docker rm -f test || true
- docker run -d --name test -p 5000:5000 $TAG
only:
- master
项目目录如下:
启动时发现可以从私服拉取依赖
但是在gitlab 编译时中一直报:
类 does not exist cannot find symbol 错误
经过排查发现是由于在.gitlab-ci.yml 文件中没指定mvn 本地仓库的地址,而且由于我们单独指定的setting.xml中指定了本地仓库地址:D:/mavenRepository,不会影响镜像的拉取(猜测直接拉取到了一个本地的虚拟文件夹中)但是mvn 在package时就会按照我们指定的setting.xml 文件中的 D:/mavenRepository去寻找依赖包,就会找不到,会报错。 解决方法:在.gitlab-ci.yml文件中指定项目的本地仓库地址修改为:
或者将setting.xml中指定仓库的标签注释掉使用默认的.m2/repository