为 Gitlab CI Dockerizing Nodejs 依赖项

Posted

技术标签:

【中文标题】为 Gitlab CI Dockerizing Nodejs 依赖项【英文标题】:Dockerizing Nodejs dependencies for Gitlab CI 【发布时间】:2018-08-24 22:40:16 【问题描述】:

我正在使用 Gitlab CI 来为我的 Node.js 应用程序实施 CI。我已经在使用工件并共享作业之间的依赖关系,但是,我想让它更快。每次管道启动时,它都会在第一个作业期间安装依赖项,我想通过在 Docker 映像中包含所有依赖项并将该映像传递到测试和生产阶段来防止这种情况。但是,我一直无法这样做。显然 Gitlab 没有运行我图像的 WORKDIR 中的代码。

以下是我的 Dockerfile:

FROM node:6.13-alpine
WORKDIR /home/app
COPY package.json .
RUN npm install
CMD [“sh”]

以下是我的 gitlab-ci.yml:

test:
  image: azarboon/dependencies-test
  stage: test
  script:
     — pwd
     — npm run test

查看日志,pwd导致/builds/anderson-martin/lambda-test,与定义的WORKDIR不同,也找不到安装的依赖。您对我有什么建议吗?如何 Dockerize 我的依赖项并加快构建阶段?

【问题讨论】:

你尝试过 docker 的多阶段构建吗?见docs.docker.com/develop/develop-images/multistage-build 是的,多阶段构建并从父映像复制您的依赖项 我们实现了相同的场景,但我们本地的 npm 注册表每次都从本地注册表安装 npm 模块,但这比从远程注册表安装要快,我们在启动时安装 @元坤谢谢。我会彻底阅读那篇文章,但你对 Gitlab CI 有什么想法吗?当我处于 Gitlab 的测试阶段时,如何在 Docker 映像中引用我的 node_modules? @Mahdi 你解决了吗? 【参考方案1】:

解决问题的最简单方法可能是将基本映像中的 node_modules 文件夹符号链接到 gitlab CI 工作区,如下所示:

test:
  image: azarboon/dependencies-test
  stage: test
  script:
     — ln -s /home/app/node_modules ./node_modules
     — npm run test

符号链接的语法是ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME

请注意,/home/app/ 是您在基础映像中使用的工作区。

Gitlab 还提供了其他功能来共享依赖项。一方面你有caching,另一方面有job artifacts。

【讨论】:

以上是关于为 Gitlab CI Dockerizing Nodejs 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

使用gitlab实现CI

GItLab CI/CD 只为开发分支添加变量

用centos和gitlab的CI做持续集成

Gitlab Flask 页面:使用 .gitlab-ci.yml 文件为 Frozen Flask Application 安装 python GDAL 包时出现问题

.gitlab-ci.yml配置参数

以 shell 执行器和 docker 镜像为基础的 Gitlab CI