【问题标题】:Docker in Jenkins and private modulesJenkins 中的 Docker 和私有模块
【发布时间】: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 服务器之外构建,该层将由构建提供者缓存。

还是我太担心了,考虑到图像不会被发布并且詹金斯也是私有的?

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

【问题讨论】:

    标签: node.js docker jenkins npm


    【解决方案1】:

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

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

    此外,有权访问我们的私有 npm 模块的组是有权访问源代码控制存储库的完整子组。因此,到目前为止,将 npm 令牌暴露给构建机器、Jenkins、Docker 中间映像、Docker 映像层和/或存储库不会造成额外的身份验证问题。撤销访问权限应该与轮换 npmrc 令牌同时进行(这样被删除的开发人员就不会使用构建令牌),但这是一个小的攻击面,无论如何都比人们将代码复制到硬盘驱动器要小。

    如果此设置发生变化,我们将不得不重新评估我们的选择。希望那时我们会找到解决方案,但现在不值得麻烦。一种可能的解决方案是从不同的 docker 容器请求令牌,其唯一目的是回答这些(本地)调用。

    【讨论】:

    • 坏主意,确保令牌是只读的,不能发布。
    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2020-04-19
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多