在我的CI管道(gitlab)中,有一个构建和一个 end2end-testing 阶段。在构建阶段,将创建应用程序的文件。然后,我想将生成的文件复制到e2e_testing容器中,以便对此应用程序进行一些测试。

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

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

我需要做的是对生成的nodeJS应用程序进行nightwatchJS e2e测试

我的尝试

使用e2e_testing命令将生成的文件复制到docker cp容器。

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阶段访问在构建阶段生成的文件?

或者是否可以在夜视镜图像(e2e)中使用构建图像($ CI_REGISTRY_IMAGE:latest)

最佳答案

那使用artifacts呢?

基本上,在构建后将bundle文件夹移至存储库的根目录,并将bundle文件夹定义为 Artifact 。然后,从e2e作业中,将从构建阶段的 Artifact 中下载bundle文件夹,您将能够使用其内容。这是如何执行此操作的示例:

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部分,因此我将其留在此处,以防您要将该容器推到某个地方。

关于node.js - Docker/CI:访问在另一个阶段创建的nodeJS应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43621022/

10-12 13:07