You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab Pipeline传递node_modules及Docker环境配置问题

GitLab Pipeline 问题解决方案

原始配置

image:
  name: node:18.13.0-alpine
  entrypoint: [""]

stages:
  - test
  - build

test:
  stage: test
  script:
    - yarn install
    - yarn test:coverage

publish:
  stage: build
  script:
    - docker build -t someimage:123 .

问题1:传递test阶段的node_modules到build阶段

用GitLab的**工件(artifacts)**实现跨阶段文件传递,在test阶段添加artifacts配置即可:

修改后的test阶段:

test:
  stage: test
  script:
    - yarn install
    - yarn test:coverage
  artifacts:
    paths:
      - node_modules/
    expire_in: 1h # 可选,设置工件过期时间,避免占用存储空间

build阶段的job会自动下载test阶段生成的node_modules,无需重新执行yarn install。


问题2:解决node镜像未安装Docker的问题

推荐用**Docker-in-Docker(DinD)**方案,直接在流水线中启用Docker服务,修改publish阶段的配置:

修改后的publish阶段:

publish:
  stage: build
  image: docker:24.0.6-dind
  services:
    - docker:24.0.6-dind
  variables:
    DOCKER_HOST: tcp://docker:2376
    DOCKER_TLS_CERTDIR: "/certs"
    DOCKER_TLS_VERIFY: 1
    DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"
  script:
    - docker build -t someimage:123 .

说明:

  • 使用官方docker-dind镜像,自带完整Docker环境
  • 通过services启动Docker守护进程
  • 设置TLS相关环境变量,确保Docker客户端与守护进程安全通信

完整修改后的配置

image:
  name: node:18.13.0-alpine
  entrypoint: [""]

stages:
  - test
  - build

test:
  stage: test
  script:
    - yarn install
    - yarn test:coverage
  artifacts:
    paths:
      - node_modules/
    expire_in: 1h

publish:
  stage: build
  image: docker:24.0.6-dind
  services:
    - docker:24.0.6-dind
  variables:
    DOCKER_HOST: tcp://docker:2376
    DOCKER_TLS_CERTDIR: "/certs"
    DOCKER_TLS_VERIFY: 1
    DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"
  script:
    - docker build -t someimage:123 .

内容的提问来源于stack exchange,提问作者Sean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:22:16