Jenkins教程maven项目(使用Docker)在Build阶段

时间:2018-01-20 21:10:12

标签: maven docker jenkins

我正在使用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 777chown -R nobodychown -R 1000设置限制最少的权限,但似乎没有任何效果。

这种情况发生在Docker版本17.12.0-ce上的jenkins映像上,在Windows 10 Professional上构建c97c6d6。

正如Jenkins网站上的Maven项目教程所发生的那样,我想知道有多少人遇到过这个问题。

3 个答案:

答案 0 :(得分:2)

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

要解决这个问题,了解Jenkins位于容器内部并且当此容器内的docker代理与docker引擎通信时,它提供了在容器内部安装容量匹配的路径,这一点非常重要。但是您的码头引擎是外部的。因此,要允许正确使用路径,容器必须与主机中容器外部的相同路径匹配。

为了让您正常工作,您需要更改两件事。

  • docker run arguments
  • Jenkinsfile泊坞窗代理参数

对于我自己的用法,我使用了这个

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

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