【发布时间】:2020-02-26 02:43:57
【问题描述】:
我正在寻找一种方法来从 Docker 容器内的代理存储库中安全地克隆私有 npm 模块,该容器由在 Ubuntu 上运行的 Jenkins 启动。 Docker 镜像将被丢弃,但它应该编译项目并运行单元测试。
用于构建的Jenkinsfile 看起来简化了,如下所示:
node('master') {
stage('Checkout from version control') {
checkout scm
}
stage('Build within Docker') {
docker.build("intermediate-image", ".")
}
}
现在的Dockerfile:
FROM node:10-alpine
COPY package.json package-lock.json .npmrc ./
RUN npm ci && \
rm -f .npmrc
COPY . .
RUN npm run build && \
npm run test
.npmrc 文件(匿名):
@domain:registry=https://npm.domain.com/
//npm.domain.com/:_authToken=abcdefg
问题在于COPY 命令使用.npmrc 文件创建了一个层。如果我在自己的 Jenkins 服务器之外构建,该层将由构建提供者缓存。
- 手动构建,我可以specify the token as a docker environment variable。有没有办法在 Ubuntu 上设置环境变量并让 Jenkins 将其传递给 Docker?
- (也许)我可以inject environment variables into Jenkins 然后进入管道?用户声称该插件与管道插件不完全兼容。
- 我是否应该利用 Docker 和 Jenkins 在同一台机器上运行并将某些东西挂载到容器中这一事实?
还是我太担心了,考虑到图像不会被发布并且詹金斯也是私有的?
我想要实现的是构建可以使用独立于构建服务器的任意节点版本。
【问题讨论】:
标签: node.js docker jenkins npm