我从Dockerfile运行Jenkins,并使用本地docker.sock成功地与Bitbucket云集成.我使用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.如果我npm install从Jenkins文件中运行,那么该步骤可以正常工作sh 'npm install'.
也许我错过了一些东西,但看起来jenkins没有运行构建映像中的步骤,这意味着我必须npm install在应用程序Dockerfile和应用程序中复制和可能的其他命令Jenkinsfile.
有没有办法在最初构建的映像中运行测试,还是必须从构建步骤复制Dockerfile到Jenkinsfile?
Jenkins 将项目安装在它自己的目录中。如果您使用dockerfilearg,它不一定会将您的依赖项安装在正确的位置。
如果您在控制台中查看您的构建,您应该会看到如下行:
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
Run Code Online (Sandbox Code Playgroud)
请注意-w和-v标志。Jenkins 安装到的目录与您在上面的 Dockerfile 中指定的 WRKDIR 不同。
除了全局安装依赖项之外,我还没有找到一个很好的解决方案,但这也不是很好。如果其他人以其他方式解决了这个问题,我很想知道。
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |