无法运行简单的 jenkins docker node build(当前不支持 /home 之外的主目录)

Posted

技术标签:

【中文标题】无法运行简单的 jenkins docker node build(当前不支持 /home 之外的主目录)【英文标题】:unable to run simple jenkins docker node build (home directories outside of /home are not currently supported) 【发布时间】:2021-07-22 02:55:24 【问题描述】:

根据官方文档 (https://www.jenkins.io/doc/book/pipeline/docker/),我正在使用下面提到的一个非常简单的脚本:

pipeline 
    agent 
        docker  image 'node:14-alpine' 
    
    stages 
        stage('Test') 
            steps 
                sh 'node --version'
            
        
    

虽然很简单,但输出如下:

22:58:45  [Pipeline] 
22:58:45  [Pipeline] // stage
22:58:45  [Pipeline] withEnv
22:58:45  [Pipeline] 
22:58:45  [Pipeline] isUnix
22:58:45  [Pipeline] sh
22:58:45  + docker inspect -f . node:14-alpine
22:58:46  Sorry, home directories outside of /home are not currently supported. 
22:58:46  See https://forum.snapcraft.io/t/11209 for details.
22:58:46  [Pipeline] isUnix
22:58:46  [Pipeline] sh
22:58:46  + docker pull node:14-alpine
22:58:46  Sorry, home directories outside of /home are not currently supported. 
22:58:46  See https://forum.snapcraft.io/t/11209 for details.
22:58:46  [Pipeline] 
22:58:46  [Pipeline] // withEnv
22:58:46  [Pipeline] 
22:58:46  [Pipeline] // node
22:58:46  [Pipeline] End of Pipeline
22:58:46  ERROR: script returned exit code 1
22:58:46  Finished: FAILURE

不知道我做错了什么。

【问题讨论】:

【参考方案1】:

消息中的超链接指向一个页面,该页面显示:

如果用户的主目录在 /home 之外,Snapd 目前不支持运行快照。

docker 命令是这样说的。我怀疑您正在尝试以jenkins 用户身份运行docker 命令。 jenkins 用户的默认主目录是 /var/lib/jenkinsjenkins 用户的默认主目录在 /home 之外。

如果是这种情况,有几种选择:

在该计算机上创建一个用户,其主目录位于 /home,并以该用户身份运行 Jenkins 代理 使用 apt 而不是 snapd 在该计算机上安装 docker(遵循 Docker 指导而不是 Ubuntu 指导) 在另一台计算机上创建一个用户,其主目录位于 /home,并使用 snapd 在那里安装 docker,然后配置代理以使用该计算机

【讨论】:

【参考方案2】:

您可能以某种方式从 Jenkins 继承了 HOME 环境变量。您可以使用 env config 来覆盖它。如果您希望从执行 docker build 的工作节点获得 HOME,您可以将 env.HOME 挂载到 /home/jenkins(或类似的东西)到容器中。

类似:

pipeline 
    agent 
        docker 
            image 'node:14-alpine'
            args '-v $HOME:/home/jenkins'
        
    
    ...

【讨论】:

一个有用的事情是在舞台上打印环境。切换它,以便 docker 代理仅在“测试”步骤中使用。然后在此之前添加一个使用非 docker 代理的步骤并添加如下内容: sh 'env' 这将打印环境,您可以看到 HOME 设置为什么

以上是关于无法运行简单的 jenkins docker node build(当前不支持 /home 之外的主目录)的主要内容,如果未能解决你的问题,请参考以下文章

jenkins初始化提示“No such plugin: cloudbees-folder”

Jenkins 在 Windows 上使用 Docker - 无法运行程序“nohup”

Docker 中的 Docker 无法挂载卷

Jenkins Docker持续集成实战3:Docker的六项优势,让你无法拒绝

在 Jenkins Docker 代理中使用测试容器:容器无法启动,NoRouteToHostException

无法让 Docker 在 Docker 之外与 ECS 中的 Jenkins 一起工作