我正在使用Docker的当前Jenkins Maven项目教程:
https://jenkins.io/doc/tutorials/build-a-java-app-with-maven/
我在构建阶段一直收到此错误:
[simple-java-maven-app]运行shell脚本
sh:无法创造 /var/jenkins_home/workspace/simple-java-maven-app@tmp/durable-bae402a9/jenkins-log.txt: 不存在的目录
sh:无法创造 /var/jenkins_home/workspace/simple-java-maven-app@tmp/durable-bae402a9/jenkins-result.txt: 不存在的目录
我已尝试在列出的目录中使用chmod -R 777
,chown -R nobody
和chown -R 1000
设置限制最少的权限,但似乎没有任何效果。
这种情况发生在Docker版本17.12.0-ce上的jenkins映像上,在Windows 10 Professional上构建c97c6d6。
正如Jenkins网站上的Maven项目教程所发生的那样,我想知道有多少人遇到过这个问题。
答案 0 :(得分:2)
我在MacOSX上也有同样的问题。 经过几个小时的研究,我终于找到了解决方案。
要解决这个问题,了解Jenkins位于容器内部并且当此容器内的docker代理与docker引擎通信时,它提供了在容器内部安装容量匹配的路径,这一点非常重要。但是您的码头引擎是外部的。因此,要允许正确使用路径,容器必须与主机中容器外部的相同路径匹配。
为了让您正常工作,您需要更改两件事。
对于我自己的用法,我使用了这个
docker run -d \
--env "JENKINS_HOME=$HOME/Library/Jenkins" \
--restart always \
--name jenkins \
-u root \
-p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $HOME/Library/Jenkins:$HOME/Library/Jenkins \
-v "$HOME":/home \
jenkinsci/blueocean
在Jenkins文件中
替换座席部分
agent {
docker {
image 'maven:3-alpine'
args '-v /root/.m2:/root/.m2'
}
通过
agent {
docker {
image 'maven:3-alpine'
args '-v <host_home_path>/.m2:/root/.m2'
}
答案 1 :(得分:1)
这个问题很可能是由于最近Docker行为发生了变化,Jenkins的Docker Pipeline插件不再能正确处理这个问题。
没有太多细节,问题导致Jenkins无法再识别它运行的容器,这导致您在这些教程中遇到的错误(上图)。
昨天发布了Docker Pipeline插件的新版本(1.15)(https://plugins.jenkins.io/docker-workflow)。
如果您在Jenkins(在Docker中)实例上升级此插件(通过管理Jenkins&gt;管理插件),您会发现这些教程应该重新开始工作(如文档所述)
答案 2 :(得分:0)
错误消息表示未创建目录durable-bae402a9
。
返回本教程,找到应该创建该目录的步骤,并进行必要的更改以确保成功。