Docker多阶段构建中无法挂载Maven本地配置的问题求助
问题
使用Jenkins配合Kubernetes代理(Kubernetes插件)进行Docker多阶段构建,希望在Maven构建阶段通过settings.xml配置本地仓库。已在K8S中创建ConfigMap并挂载到Jenkins代理Pod,配置如下:
agent { kubernetes { yaml ''' apiVersion: v1 kind: Pod spec: volumes: - name: docker-socket emptyDir: {} - configMap: defaultMode: 420 name: nexus-xml-test name: config-vol containers: - name: docker-pod image: docker:19.03.1 command: - cat tty: true volumeMounts: - name: docker-socket mountPath: /var/run - mountPath: /root/.m2 name: config-vol - name: docker-daemon image: docker:19.03.1-dind securityContext: privileged: true volumeMounts: - name: docker-socket mountPath: /var/run ''' } }
已验证settings.xml成功挂载到Jenkins代理Pod的/root/.m2目录:
2022-09-13 17:27:54 + cd /root/.m2 2022-09-13 17:27:54 + ls 2022-09-13 17:27:54 settings.xml
但在Dockerfile中执行RUN mvn -s /root/.m2/settings.xml时,构建报错:
2022-09-13 17:45:48 Step 2/10 : RUN mvn -s /root/.m2/settings.xml 2022-09-13 17:45:51 ---> Running in e779f9fcf9b6 2022-09-13 17:45:52 [ERROR] Error executing Maven. 2022-09-13 17:45:52 [ERROR] The specified user settings file does not exist: /root/.m2/settings.xml 2022-09-13 17:45:52 The command '/bin/sh -c mvn -s /root/.m2/settings.xml' returned a non-zero code: 1
解决建议
- 明确挂载范围差异:你挂载的
settings.xml是在Jenkins的Kubernetes代理Pod(docker-pod容器)内,而Docker构建过程是在代理Pod内部Docker daemon创建的新构建容器中执行的,新容器无法直接访问代理Pod的文件系统。 - 将settings.xml传入构建上下文:
- 在Jenkins构建步骤中,先把代理Pod里的
/root/.m2/settings.xml复制到当前构建工作目录(即Docker构建上下文)。 - 修改Dockerfile,将上下文里的
settings.xml复制到构建容器内的对应路径:
或者直接在COPY settings.xml /root/.m2/settings.xml RUN mvn clean installmvn命令中引用上下文内的文件:RUN mvn -s ./settings.xml
- 在Jenkins构建步骤中,先把代理Pod里的
- 使用Docker build的--mount参数(Docker 18.09+):
如果你的Docker版本支持,可在docker build命令中直接将代理Pod的settings.xml挂载到构建容器:docker build --mount type=bind,source=/root/.m2/settings.xml,target=/root/.m2/settings.xml . - 优化ConfigMap挂载方式:当前是将ConfigMap挂载为整个
/root/.m2目录,会覆盖目录原有内容且文件只读。若需保留目录其他内容,应挂载单个文件:
修改Pod的volumeMounts配置:volumeMounts: - name: config-vol mountPath: /root/.m2/settings.xml subPath: settings.xml
内容的提问来源于stack exchange,提问作者Palmmypoko
相关产品推荐
相关产品推荐

