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
相关产品推荐
相关产品推荐

