我从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 Dockerfile
和 Jenkinsfile
中复制 npm install
和其他可能的命令 .
有没有办法在最初构建的映像中运行测试,还是必须将构建步骤从 Dockerfile
复制到 Jenkinsfile
?
1 回答
Jenkins将项目安装在自己的目录中 . 如果您使用
dockerfile
arg,则不一定会在正确的位置安装依赖项 .如果您在控制台中查看构建,您应该看到如下所示的行:
请注意
-w
和-v
标志 . Jenkins安装到那些与您在上面的Dockerfile中指定的WRKDIR不同的目录中 .我还没有找到一个很好的解决方案,除了全局安装依赖,但也不是很好 . 如果其他人以其他方式解决这个问题,我很乐意知道 .