问题描述
根据官方文档 (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/jenkins
。 jenkins
用户的默认主目录位于 /home
之外。
如果是这种情况,有几种选择:
- 在该计算机上创建一个用户,主目录位于
/home
中,并以该用户身份运行 Jenkins 代理 - 使用
apt
而不是使用snapd
在该计算机上安装 docker(遵循 Docker 说明而不是 Ubuntu 说明) - 在主目录位于
/home
的另一台计算机上创建一个用户并使用snapd
在那里安装 docker,然后配置代理以使用该计算机