それが私の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'
}
}
}
}
}
ジェンキンスで実行すると、次のようになります
[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を削除し、仮想環境を使用してみました。
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を使用してみましたが、うまくいきませんでした。
Tftdが書いたように、HOMEを次のような書き込み可能なディレクトリに変更します。
pipeline {
agent none
stages {
stage('Build') {
agent {
docker {
image 'python:3-Alpine'
}
}
steps {
withEnv(["HOME=${env.WORKSPACE}"]) {
sh 'pip install --user -r requirements.txt'
sh 'python WebChecker.py'
}
}
post {
always {
junit 'output.xml'
}
}
}
}
}
PATH変数にvirtualenvを追加する必要があります。
pip install virtualenv
を使用してインストールした場合は、pythonX.X/Lib/site-packages/
になります。
Sudo
もPATH変数に追加する必要があります。
最初のコードスニペットのエラーは、'/.local'
への書き込み権限がないためです。 administratorとして実行してみてください
私は今これに遭遇しています。 OPの元の投稿に表示されていないのは、JenkinsがDockerを実行するために使用するコマンドです。それは次のようになります:
docker run -t -d -u XXX:YYY -w/var/lib/jenkins/workspace /
ここで、XXXはjenkinsを実行しているユーザーのUID、YYYはグループIDです。 pythonコンテナでは、このUIDは認識されないため、ホームディレクトリがありません。'pipinstall --user 'が実行しようとすると、ホームディレクトリがないため、デフォルトで'/'書き込み不可です。
これはジェンキンスの誤りだと思います( https://issues.jenkins-ci.org/browse/JENKINS-47026 を参照)。他のCICDサービスはこれをうまく処理しているようです。
中山陽一の答えがうまくいき、賛成しています。
次のように引数-u root:rootを追加してみてください:
withDockerContainer(image: 'python:3.6', args:'-u root:root'){
sh """
pip install --user -r requirements.txt
python WebChecker.py
"""
}