Jenkins教程maven项目(带Docker)在构建阶段失败

Jenkins教程maven项目(带Docker)在构建阶段失败,maven,docker,jenkins,Maven,Docker,Jenkins,我正在使用Docker使用当前的Jenkins Maven项目教程: 我在构建阶段不断遇到此错误: [简单java maven应用程序]运行shell脚本 sh:无法创建 /var/jenkins_home/workspace/simplejavamaven-app@tmp/耐用-bae402a9/jenkins-log.txt: 不存在的目录 sh:无法创建 /var/jenkins_home/workspace/simplejavamaven-app@tmp/耐用-bae402a9/jen

我正在使用Docker使用当前的Jenkins Maven项目教程:

我在构建阶段不断遇到此错误:

[简单java maven应用程序]运行shell脚本

sh:无法创建 /var/jenkins_home/workspace/simplejavamaven-app@tmp/耐用-bae402a9/jenkins-log.txt: 不存在的目录

sh:无法创建 /var/jenkins_home/workspace/simplejavamaven-app@tmp/耐用-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项目教程出现了这种情况,我想知道还有多少人遇到过这个问题。

错误消息意味着没有创建目录
durable-bae402a9


回顾本教程,找出应该创建该目录的步骤,并进行必要的更改以确保其成功。

我在MacOSX上也遇到了同样的问题。 经过几个小时的研究,我终于找到了解决办法

要解决这个问题,重要的是要了解Jenkins在一个容器中,当容器中的docker代理与docker引擎对话时,它会给出装载容器内匹配卷的路径。但是你的docker引擎在外面。因此,为了允许容器内部路径正确工作,容器必须与主机中容器外部路径匹配

要允许正确工作,您需要更改两件事

  • docker运行参数
  • Jenkinsfile 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
在詹金斯档案中

更换代理部件

agent {
  docker {
    image 'maven:3-alpine'
    args '-v /root/.m2:/root/.m2'
  }

代理{
码头工人{
图片“maven:3-alpine”
args'-v/.m2:/root/.m2'
}

这个问题很可能是因为最近Docker行为发生了变化,Jenkins中的Docker管道插件不再正确处理这个问题

在没有太多细节的情况下,这个问题导致Jenkins无法再识别它所运行的容器,从而导致您在这些教程中遇到的错误(如上所述)

Docker Pipeline插件的新版本(1.15)昨天发布()


如果您在Jenkins(Docker中)实例上升级此插件(通过管理Jenkins>管理插件),您会发现这些教程应该重新开始工作(如文档所示).

ls-la/var/jenkins\u home/workspace/simple java maven的输出是什么-app@tmp/?该目录为空;这是输出:drwxrwxrwx 2根根根目录4096 Jan 20 21:06。DRWXRWX 4根目录4096 Jan 20 19:12..在将所有/var上的权限更改回根目录之前,我已将权限设置为jenkins:jenkins和nobody:nobody以及它的子文件夹教程的哪一步?您在教程的前面有没有收到任何错误消息?如果有,是什么,在哪里?实际运行管道的“将初始管道创建为Jenkinsfile”的第5步。在构建步骤失败。该目录是“动态”创建的每次管道运行时。显然,目录名中“持久-”后面的部分每次管道运行时都会更改,因此我甚至无法提前创建它。似乎无论哪个进程尝试创建它,都可能没有适当的权限。我已尝试分配最有权限的chmod(777)和chown(例如nobody:nobody)上面每个目录上的值,但这似乎没有帮助。请查看创建目录“持久--”的进程的日志作为线索。Frederic,感谢您的反馈。我认为这是正确的,我认为这与短期存在的maven容器有关,要么路径映射错误,要么可能没有所需的权限。我确实尝试了您建议的映射值,但在我的情况下似乎还没有解决问题(到目前为止),但我在Windows 10上,可能没有正确输入映射路径值。我会随时通知你。我不是Windows专家,也从未在Windows中使用docker。因此,Windows中的符号链接与unix系统中的符号链接方式不同。但你可以尝试将嵌入式ubuntu与提供bash的Windows 10一起使用,然后访问NTF它就像一个unix系统。你像unix系统一样管理一切。一个朋友会投资windows并告诉我。
agent {
  docker {
    image 'maven:3-alpine'
    args '-v <host_home_path>/.m2:/root/.m2'
  }