我正在从Dockerfile运行Jenkins,并已使用本地docker.sock与Bitbucket云成功集成。我已经使用Blue Ocean设置了一个新的管道,该管道下载了仓库并从Dockerfile构建了一个简单的nodejs应用程序。

我的文件如下所示:

节点应用



FROM节点:8.6.0-slim
WORKDIR应用
#安装依赖项
COPY package.json。
运行npm安装
运行ls
#导入源文件
复制。 。

Jenkins 文件

管道{
代理{dockerfile true}
阶段{
stage('Test'){
脚步 {
sh'ls -l'
sh'npm测试'
}
}
}
}

但是,当我运行npm test步骤时,它抱怨找不到node_modules。如果我像npm install一样从Jenkinsfile运行sh 'npm install',则此步骤可以正常工作。

也许我遗漏了一些东西,但是看起来jenkins没有运行构建镜像中的步骤,这意味着我必须在应用程序npm installDockerfile中复制Jenkinsfile和可能的其他命令。

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

最佳答案

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不同的目录中。

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

关于docker - Jenkins构建镜像中不存在node_modules,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49255619/

10-16 17:02