无法运行简单的 jenkins docker 节点构建当前不支持 /home 之外的主目录

问题描述

根据官方文档 (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

不确定我做错了什么。

解决方法

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

类似于:

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

消息内的超链接指向一个页面,内容为:

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...