首页 文章

Jenkins构建映像中不存在node_modules

提问于
浏览
5

我从Dockerfile运行Jenkins,并使用本地docker.sock成功地与Bitbucket Cloud 集成 . 我使用Blue Ocean设置了一个新的管道,它下载了repo并从Dockerfile构建了一个简单的nodejs应用程序 .

我的文件看起来像这样:

节点应用

FROM node:8.6.0-slim
    WORKDIR app
    # Install dependencies
    COPY package.json .
    RUN npm install
    RUN ls
    # Import source files
    COPY . .

Jenkinsfile

pipeline {
        agent { dockerfile true }
        stages {
            stage('Test') {
                steps {
                    sh 'ls -l'
                    sh 'npm test'
                }
            }
        }
    }

但是,当我运行 npm test 步骤时,它抱怨它无法找到 node_modules . 如果我从Jenkins文件中运行 npm install ,如 sh 'npm install' ,则该步骤正常 .

也许我错过了一些东西,但看起来jenkins没有运行构建映像中的步骤,这意味着我必须在app DockerfileJenkinsfile 中复制 npm install 和其他可能的命令 .

有没有办法在最初构建的映像中运行测试,还是必须将构建步骤从 Dockerfile 复制到 Jenkinsfile

1 回答

  • 1

    Jenkins将项目安装在自己的目录中 . 如果您使用 dockerfile arg,则不一定会在正确的位置安装依赖项 .

    如果您在控制台中查看构建,您应该看到如下所示的行:

    docker run -t -d -u 500:500 -w /var/lib/jenkins/workspace/ev-team_***_master-D5DTMAWQCFAZ7O7BLEJB3CZGNIHTH72HCI7AEOKAAA7A4XQN3COQ -v /var/lib/jenkins/workspace/ev-***_master-D5DTMAWQCFAZ7O7BLEJB3CZGNIHTH72HCI7AEOKAAA7A4XQN3COQ:/var/lib/jenkins/workspace/ev-team_**_master-D5DTMAWQCFAZ7O7BLEJB3CZGNIHTH72HCI7AEOKAAA7A4XQN3COQ:rw,z -v /var/lib/jenkins/workspace/ev-team_**_master-D5DTMAWQCFAZ7O7BLEJB3CZGNIHTH72HCI7AEOKAAA7A4XQN3COQ@tmp:/var/lib/jenkins/workspace/ev-team_**_master-D5DTMAWQCFAZ7O7BLEJB3CZGNIHTH72HCI7AEOKAAA7A4XQN3COQ@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** 53c72bed1642cf1703ce0385a7b622121709b9af cat
    

    请注意 -w-v 标志 . Jenkins安装到那些与您在上面的Dockerfile中指定的WRKDIR不同的目录中 .

    我还没有找到一个很好的解决方案,除了全局安装依赖,但也不是很好 . 如果其他人以其他方式解决这个问题,我很乐意知道 .

相关问题