java如何在docker容器中高效地构建maven项目?
我试图通过缩短构建过程的持续时间来改进构建过程。构建是在基于official maven docker image的docker容器中完成的
我现在这样做的效果很好,但是没有为后续构建保留本地maven存储库,这意味着每次构建都需要再次进行所有下载
让我们关注一下我到底想改进什么。 我尝试了以下步骤: 1.为maven创建docker卷。m2目录 2.构建自定义maven映像(包含自定义maven设置) 3.基于该映像运行docker容器,从步骤1装载卷并绑定装载maven项目(包含顶级pom文件的目录)
以下是自定义maven docker映像的dockerfile:
FROM maven:3.6.1-jdk-11
# Use custom settings file for maven
COPY my-settings.xml /usr/share/maven/conf/settings.xml
CMD ["/bin/bash"]
下面是完成其余工作的bash脚本
# Provide basis for Maven local repository reuse
docker volume create --name maven-repo
# Build maven docker image with custom settings.xml
docker build --file "${WORKSPACE}"/tools/maven/Dockerfile \
--tag my-maven-image:latest \
"${WORKSPACE}"/tools/maven/
# Build using maven in the container
# The options -it are just there for debug purposes
docker run -it \
--mount source=maven-repo,destination=/root/.m2 \
--mount type=bind,source="${WORKSPACE}"/my-maven-project,destination=/usr/src/my-maven-project \
--name maven-container my-maven-image:latest \
--workdir /usr/src/my-maven-project
mvn clean install
我希望mvn clean install
在容器的/usr/src/my-maven-project
目录中运行。相反,找不到此目录
我还计划在docker run
命令开始工作后立即取消它的交互模式,我假设maven命令的日志可以在docker容器的日志中找到
成功构建之后,我假设工件将位于相同的目录中,就像我从docker主机运行maven命令一样
共 (0) 个答案