我正在从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 install
和Dockerfile
中复制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/