我是测试自动化工程师,在大型产品公司工作。公司大型单体项目被分割,部分正在离开云端。作为此类重新设计的一部分,测试自动化项目也应该变得多云。我们基于 groovy、selenium、testng 和 maven 的典型 TA 项目。现在我想尝试将整个 TA maven 项目放入 Docker image\container 的选项。它运行良好,但在第一次运行时,它开始将依赖项下载到本地 .m2 存储库中。我想加快速度并在创建图像阶段完成这项任务。
这是我的 DOCKERFILE:
FROM maven:3.3-jdk-8
LABEL description="Embedded portal-web-testing"
MAINTAINER NNN
COPY ./settings.xml /root/.m2/
COPY ./acceptance-tests ./acceptance-tests
WORKDIR acceptance-tests
RUN mvn dependency:go-offline --debug >log
RUN ls /root/.m2/
#RUN mvn test
ENTRYPOINT ["bash"]
这是一个日志:
Step 1 : FROM maven:3.3-jdk-8
---> 7addddbdd730
Step 2 : LABEL description "Embedded portal-web-testing"
---> Running in 1d195ccb9c57
---> f5372b024ca0
Removing intermediate container 1d195ccb9c57
Step 3 : MAINTAINER NNN
---> Running in 03ebbffda680
---> cb12da3d8ec6
Removing intermediate container 03ebbffda680
Step 4 : COPY ./settings.xml /root/.m2/
---> 164999e1f63a
Removing intermediate container 1e1778d2533b
Step 5 : COPY ./acceptance-tests ./acceptance-tests
---> 7d93fff4193e
Removing intermediate container a5d04eb30591
Step 6 : WORKDIR acceptance-tests
---> Running in f15111475fc6
---> beb4d090362b
Removing intermediate container f15111475fc6
Step 7 : RUN mvn dependency:go-offline --debug >log
---> Running in 2c09f1869143
---> 62326c2bb073
Removing intermediate container 2c09f1869143
Step 8 : RUN ls /root/.m2/
---> Running in 91b602f529da
settings.xml
---> b7bc32199ab3
Removing intermediate container 91b602f529da
Step 9 : ENTRYPOINT bash
---> Running in 3167f5a6d923
---> 94b3e0b146da
Removing intermediate container 3167f5a6d923
Successfully built 94b3e0b146da
在第 7 步肯定文件正在下载,但看起来没有存储。以下控制台命令显示本地 .m2 文件夹中没有更新:
root@37f5a0d04232:/acceptance-tests# ls /root/.m2
settings.xml
如果我尝试从容器内的命令行再次运行相同的命令(创建映像并启动容器时):
root@37f5a0d04232:/acceptance-tests# mvn dependency:go-offline
大量下载开始,存储库文件夹终于出现在 .m2 下
root@37f5a0d04232:/acceptance-tests# ls /root/.m2
repository settings.xml
我很难理解为什么 Dockerbuild 文件中的 maven 命令引起的更改没有存储为 docker 层。
我正在使用 Docker 1.12 和 maven 3.3.3