首页 > 解决方案 > 具有多阶段 dockerfile 的多个 gitlab-ci 阶段

问题描述

我有一个包含两个阶段的 Dockerfile;第一阶段从源代码构建一个 React 应用程序,第二阶段复制构建并添加 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/

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

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

这可能吗?还是我需要将 Dockerfile 阶段拆分为多个 Dockerfile?

标签: reactjsdockertestinggitlab-ci

解决方案


您是否考虑过使用 gitlab 工件传递必要的文件?如果您在一个阶段通过

  artifacts:
    paths:
      - some_path_or_file

然后 gitlab 在以下阶段提供这些。另请参阅https://docs.gitlab.com/ee/user/project/pipelines/job_artifacts.htmlhttps://forum.gitlab.com/t/access-artifact-in-next-task-to-deploy/ 9295/2


推荐阅读