那是我的Jenkinsfile。
pipeline {
agent none
stages {
stage('Build') {
agent {
docker {
image 'python:3-alpine'
}
}
steps {
sh 'pip install --user -r requirements.txt'
sh 'python WebChecker.py'
}
post {
always {
junit 'output.xml'
}
}
}
}
}
当我在Jenkins中运行它时,我得到了以下结果
[urltester] Running shell script
+ pip install --user -r requirements.txt
The directory '/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting beautifulsoup4==4.6.0 (from -r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/9e/d4/10f46e5cfac773e22707237bfcd51bbffeaf0a576b0a847ec7ab15bd7ace/beautifulsoup4-4.6.0-py3-none-any.whl (86kB)
Collecting requests==2.18.4 (from -r requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/49/df/50aa1999ab9bde74656c2919d9c0c085fd2b3775fd3eca826012bef76d8c/requests-2.18.4-py2.py3-none-any.whl (88kB)
Collecting junit-xml==1.8 (from -r requirements.txt (line 3))
Downloading https://files.pythonhosted.org/packages/a6/2a/f8d5aab80bb31fcc789d0f2b34b49f08bd6121cd8798d2e37f416df2b9f8/junit-xml-1.8.tar.gz
Collecting urllib3<1.23,>=1.21.1 (from requests==2.18.4->-r requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/63/cb/6965947c13a94236f6d4b8223e21beb4d576dc72e8130bd7880f600839b8/urllib3-1.22-py2.py3-none-any.whl (132kB)
Collecting idna<2.7,>=2.5 (from requests==2.18.4->-r requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/27/cc/6dd9a3869f15c2edfab863b992838277279ce92663d334df9ecf5106f5c6/idna-2.6-py2.py3-none-any.whl (56kB)
Collecting certifi>=2017.4.17 (from requests==2.18.4->-r requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/7c/e6/92ad559b7192d846975fc916b65f667c7b8c3a32bea7372340bfe9a15fa5/certifi-2018.4.16-py2.py3-none-any.whl (150kB)
Collecting chardet<3.1.0,>=3.0.2 (from requests==2.18.4->-r requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
Collecting six (from junit-xml==1.8->-r requirements.txt (line 3))
Downloading https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Installing collected packages: beautifulsoup4, urllib3, idna, certifi, chardet, requests, six, junit-xml
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/.local'
Check the permissions.
script returned exit code 1
那么我就执行sudo pip install ...
然后我收到以下错误信息:
[urltester] Running shell script
+ sudo python -m pip install --user -r requirements.txt
/Users/me/.jenkins/workspace/urltester@tmp/durable-e36d9731/script.sh: line 1: sudo: not found
script returned exit code 127
我取消了sudo并尝试使用虚拟环境:
我取消了sudo并尝试使用虚拟环境:
pipeline {
agent none
stages {
stage('Build') {
agent {
docker {
image 'python:3-alpine'
}
}
steps {
sh 'virtualenv venv --distribute'
sh 'source venv/bin/activate '
sh 'pip install --user -r requirements.txt'
sh 'python WebChecker.py'
}
post {
always {
junit 'output.xml'
}
}
}
}
}
但是当我尝试使用sudo时,我得到了与之前相同的结果,但这次virtualenv未被找到。
我的最终目标是能够运行我的Python脚本。这个Python脚本会在其相同的目录中生成一个XML文件。然后Jenkins应该读取这个XML文件。我尝试使用Docker,但没有取得很大进展。那么我该怎么办?
Jenkins
启动的Docker容器以“普通”用户身份运行(即uid 1000
和gid 1000
)。从日志中可以看出,pip
试图在/.local
中安装依赖项,但由于权限问题无法执行。请检查$HOME
是否指向$WORKSPACE
目录。如果是这个问题,您可以使用withEnv
手动设置它。另一种选择是在/.local
上挂载一个具有rwx
权限的volume
,以便任何用户都可以在那里写入,这应该解决您的问题。 - tftd$HOME
。那么它输出什么? :) - tftd