Node.js Jenkins中的Docker和专用模块

Node.js Jenkins中的Docker和专用模块,node.js,docker,jenkins,npm,Node.js,Docker,Jenkins,Npm,我正在寻找一种从Docker容器中的代理存储库安全克隆私有npm模块的方法,Docker容器由运行在Ubuntu上的Jenkins旋转而成。Docker映像将被丢弃,但它应该编译项目并运行单元测试 用于构建的Jenkinsfile看起来很简单,如下所示: node('master') { stage('Checkout from version control') { checkout scm } stage('Build within Docker') {

我正在寻找一种从Docker容器中的代理存储库安全克隆私有npm模块的方法,Docker容器由运行在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
文件(匿名):

问题是,
COPY
命令使用
.npmrc
文件创建了一个层。如果我在自己的Jenkins服务器之外构建,该层将由构建提供程序缓存

  • 我可以手动构建。有没有办法在Ubuntu上设置环境变量并让Jenkins将其传递给Docker
  • (也许)我可以,然后进入管道?用户声称该插件与管道插件不完全兼容
  • 我是否应该利用Docker和Jenkins在同一台机器上运行的事实,将某些东西装入容器中
还是我太担心了,因为这张照片不会出版,詹金斯一家也是私人的


我想要实现的是,构建可以使用独立于构建服务器的任意节点版本。

我已经决定,因为docker主机与Jenkins主机是同一台(虚拟)机器,所以如果我将.npmrc文件烘焙到docker层中也没有问题

目前,任何有权访问Docker主机的人都可以窃取本地.npmrc令牌

此外,可以访问我们的私有npm模块的组是可以访问源代码管理存储库的完整人员子组。因此,将npm令牌公开给构建机、Jenkins、Docker中间映像、Docker映像层和/或存储库,到目前为止不会带来额外的身份验证问题。撤销访问应该与旋转npmrc令牌(这样被移除的开发人员就不会使用构建令牌)齐头并进,但这是一个很小的攻击面,在任何情况下都比将代码复制到硬盘驱动器的人要小


如果此设置发生更改,我们将不得不重新评估我们的选项。希望到时候我们能找到解决办法,但现在不值得麻烦了。一种可能的解决方案是从不同的docker容器中请求令牌,唯一的目的是应答这些(本地)呼叫。

我决定,因为docker主机与Jenkins主机是同一台(虚拟)机器,所以如果我将.npmrc文件烘焙到docker层中,就没有问题了

目前,任何有权访问Docker主机的人都可以窃取本地.npmrc令牌

此外,可以访问我们的私有npm模块的组是可以访问源代码管理存储库的完整人员子组。因此,将npm令牌公开给构建机、Jenkins、Docker中间映像、Docker映像层和/或存储库,到目前为止不会带来额外的身份验证问题。撤销访问应该与旋转npmrc令牌(这样被移除的开发人员就不会使用构建令牌)齐头并进,但这是一个很小的攻击面,在任何情况下都比将代码复制到硬盘驱动器的人要小


如果此设置发生更改,我们将不得不重新评估我们的选项。希望到时候我们能找到解决办法,但现在不值得麻烦了。一种可能的解决方案是从不同的docker容器请求令牌,唯一目的是应答这些(本地)呼叫。

坏主意,确保令牌是只读的,不能发布。坏主意,确保令牌是只读的,不能发布。
@domain:registry=https://npm.domain.com/
//npm.domain.com/:_authToken=abcdefg