web-dev-qa-db-ja.com

JenkinsでPIPインストールが機能しない?

それが私の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を使用してみましたが、うまくいきませんでした。

14
Rahul

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'
                }
            }
        }
    }
}
11
Yoichi Nakayama

PATH変数にvirtualenvを追加する必要があります。

pip install virtualenvを使用してインストールした場合は、pythonX.X/Lib/site-packages/になります。

SudoもPATH変数に追加する必要があります。


最初のコードスニペットのエラーは、'/.local'への書き込み権限がないためです。 administratorとして実行してみてください

1
user8279878

私は今これに遭遇しています。 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サービスはこれをうまく処理しているようです。

中山陽一の答えがうまくいき、賛成しています。

0
ryang

次のように引数-u root:rootを追加してみてください:

withDockerContainer(image: 'python:3.6', args:'-u root:root'){
        sh """
            pip install --user -r requirements.txt
            python WebChecker.py
        """
    }
0