【发布时间】:2018-12-29 14:57:22
【问题描述】:
目前正在使用 Jenkins Blue Ocean 尝试设置新管道。这是一个基于节点的项目,我在 Dockerfile 中成功运行npm install,但是后面的管道步骤看不到安装的node_modules。这种行为很奇怪。
Jenkins 文件。
pipeline {
agent {
dockerfile {
filename 'Dockerfile.prod'
}
}
stages {
stage('Test') {
steps {
sh 'ls node_modules'
}
}
}
}
Dockerfile.prod
FROM node:8
ADD . /var/www
WORKDIR /var/www
RUN ["npm", "install"]
在 Dockerfile 构建期间:
Step 4/4 : RUN ["npm", "install"]
---> Running in de3cd138a40e
...
added 1283 packages in 39.842s
Removing intermediate container de3cd138a40e
在 Jenkinsfile 的 test 阶段:
+ ls node_modules
ls: cannot access node_modules: No such file or directory
【问题讨论】:
-
我从未使用过此设置,但您确定您的
ls node_nodules命令正在容器内运行吗?您的Dockerfile正在将所有依赖项安装在 Docker 映像中,因此如果不运行容器,它们就无法在外部访问。 -
感谢@IgorNikolaev 的回复!因此,根据此处找到的文档jenkins.io/doc/book/pipeline/syntax/#agent-example,如果 dockerfile 代理是在根级别定义的,则所有阶段都应在其中执行。我尝试在 Dockerfile 中设置 ENV,当我运行 sh 步骤时,它正在回显正确的值。奇怪。
标签: docker jenkins jenkins-pipeline jenkins-blueocean