我在使用Jenkins声明性流水线通过Docker运行时遇到了另一个权限问题。我想通过Jenkins作业在Docker容器中构建和发布Python软件包:
pipeline {
agent {
docker {
image 'python:3.7'
label 'docker && linux'
}
}
environment {
PACKAGE_VERSION = readFile 'VERSION'
}
stages {
stage('Package') {
steps {
sh 'python -V'
sh 'python -m pip install -r requirements.txt --user --no-cache'
sh 'python setup.py sdist'
}
}
stage('Deploy') {
steps {
...
}
}
}
post {
always {
cleanWs()
}
}
}
然而,我由于PermissionError
的原因无法执行pip install
命令:
我该如何修复这些权限?
docker
声明中添加args '--user 0:0'
来以root身份运行代理,但是找出默认设置和使用--user
标志进行pip install
的问题会很有趣。 - hoefling-u 1001:1001
,覆盖它的-u 0:0
确实解决了问题。但是,对我来说,pip install ... --user
无法正常工作就没有意义了。Docker镜像中的权限设置可能有问题吗? - casparjespersenpython:3.7
镜像对 ID 为 1001 的用户一无所知 - 如果在容器内运行cat /etc/passwd | grep 1001
,将什么也找不到。Jenkins 以不存在的用户启动容器,没有passwd
条目,没有主目录等。我假设在这种情况下HOME
被留空为/
,因此pip install --user
会安装到/.local
,但是 1. 它不存在,即使存在 2. 它也属于 root。 - hoefling