具有多阶段 dockerfile 的多个 gitlab-ci 阶段

Wes*_*den 5 testing docker reactjs gitlab-ci

我有一个包含两个阶段的 Dockerfile;第一阶段从源代码构建反应应用程序,第二阶段复制构建并添加 NGINX 服务器:

FROM kkarczmarczyk/node-yarn as builder
COPY . /workspace
RUN set -ex \
    yarn global add create-react-app \
    && yarn install \
    && GENERATE_SOURCEMAP=false yarn build

FROM nginx:mainline-alpine
COPY ./nginx-default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /workspace/build /var/www/html/
Run Code Online (Sandbox Code Playgroud)

我也在使用 gitlab-ci,我希望有多个阶段:构建、测试和部署。但我不知道如何拆分构建和测试阶段,因为我使用的是多阶段 Dockerfile。问题是所有 JS 测试(针对 React)都需要在“纱线构建”执行之前运行,并且构建被复制到秒级 docker 阶段。

一个解决方案可能是yarn testyarn build运行之前执行。但我真的很想有一个单独的测试 gitlab-ci 阶段。

这可能吗?或者我是否需要将我的 Dockerfile 阶段拆分为多个 Dockerfile?

Den*_*rev 1

你可能想要在 gitlab 中使用多个阶段的原因是快速失败。但是使用多阶段 docker 或 gitlab 阶段进行构建可以给您相同的结果,如果测试失败,您将无法进一步进行并获得堆栈跟踪。从一方面来说,docker 多阶段可能更方便,因为您始终可以调用前一个容器并重现/测试/修复错误。但总的来说,在 CI 中使用 docker-builder 模式只是不必要的复杂化,最好分离 docker 镜像并在 gitlab 阶段使用它们。