2017-04-25 78 views
1

在我的CI管道(gitlab)中,有一个构建和一个end-end-testing阶段。在构建阶段,应用程序的文件将被创建。然后我想将生成的文件复制到e2e_testing容器中,以使用此应用程序进行一些测试。Docker/CI:访问在另一个阶段创建的nodeJS应用程序

如何将生成的文件(/ opt/project/build/core/bundle)复制到映像中?

对于e2e测试,我想使用nightwatchJS - 请参阅下面的e2e docker镜像。也许有可能在e2e图像中使用构建图像?

我需要做的是对生成的应用程序的NodeJS


我尝试

复制生成的文件e2e_testing容器docker cp命令nightwatchJS端对端测试。

build: 
    stage: build 
    before_script: 
    - meteor build /opt/project/build/core --directory 
    script: 
    - cd /opt/jaqua/build/core/bundle 
    - docker build -t $CI_REGISTRY_IMAGE:latest . 
    after_script: 
    - docker cp /opt/project/build/core/bundle e2e_testing:/opt/project/build/core/ 

但是这是行不通的,因为下一阶段(E2E)将创建从e2e:latest图像的容器。所以在这个容器中没有bundle文件夹存在,所以这个示例脚本失败了。

e2e: 
    image: e2e:latest 
    stage: e2e 
    before_script: 
    - cd /opt/project/build/core/bundle && ls -la 
    script: 
    # - run nightwatchJS to do some e2e testing with the build bundle 

E2E:最新的图像Dockerfile

FROM java:8-jre 

## Node.js setup 
RUN curl -sL https://deb.nodesource.com/setup_4.x | bash - 
RUN apt-get install -y nodejs 

## Nightwatch 
RUN npm install -g nightwatch 

从该图像创建一个名为e2e_testing的容器,它运行所有的时间。所以在CI管道运行时,容器已经存在。

但是,当时这个图像是在应用程序文件不存在的情况下创建的,因为它们是在构建阶段生成的。所以我不能使用Dockerfile将这些文件放在Docker镜像中。

那么我怎样才能访问在e2e阶段的构建阶段生成的文件?

或者是有可能使用的生成图像($ CI_REGISTRY_IMAGE:最新)夜巡图像(E2E)内

+0

https://github.com/moby/moby/pull/31257 – johnharris85

+0

@ johnharris85我没有看到,你想向我展示哪个部分... :-( – user3142695

+0

什么应用解析这些yml文件?ie你使用什么CI工具? – BMitch

回答

0

怎么样使用artifacts

基本上,在构建之后,将包文件夹移到存储库的根目录,并将包文件夹定义为工件。然后,从e2e作业中,将从构建阶段的工件下载该文件夹文件夹,并且您将能够使用其内容。下面是如何做到这一点的例子:

build: 
    stage: build 
    before_script: 
    - meteor build /opt/project/build/core --directory 
    script: 
    # Copy the contents of the bundle folder to ./bundle 
    - cp -r /opt/project/build/core/bundle ./bundle 
    - cd /opt/jaqua/build/core/bundle 
    - docker build -t $CI_REGISTRY_IMAGE:latest . 
    artifacts: 
    paths: 
     - bundle 

e2e: 
    image: e2e:latest 
    stage: e2e 
    dependencies: 
    - build 
    script: 
    - mkdir -p /opt/project/build/core/bundle 
    - cp -r ./bundle /opt/project/build/core/bundle 
    # - run nightwatchJS to do some e2e testing with the build bundle 

我不知道,如果你仍然需要docker build一部分,所以我把它在那里的情况下,你想不想找个推动该容器。

+0

为什么我必须将文件夹复制到根目录?难道不能用原始路径设置工件吗? – user3142695

+0

如果您查看了答案中链接的工件文档,您会看到:“您只能使用项目工作区内的路径。” – Jawad

相关问题