无法通过 Jenkins 声明性管道在 Docker 映像中作为代理安装 pip

cas*_*sen 11 python pip jenkins docker

还有另一个问题,即通过 Jenkins 声明性管道运行 Docker 的权限。我想通过 Docker 容器中的 Jenkins 作业构建和发布 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()
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

但是,pip install由于以下原因,我不允许PermissionError

+python -m pip install -r requirements.txt --user --no-cache 要求已经满足:/usr/local/lib/python3.7/site-packages中的setuptools(来自-r requirements.txt(第1行) ) (40.0.0) 收集 pytest(来自 -r requirements.txt(第 2 行))
下载 https://files.pythonhosted.org/packages/9e/a1/8166a56ce9d89fdd9efcae5601e71758029d90e5644e0b7b67302300000b7b6730303030000 -any.whl (202kB) 收集 py>=1.5.0(来自 pytest->-r requirements.txt(第 2 行))下载 https://files.pythonhosted.org/packages/f3/bd/83369ff2dee18f22f27d16b78dd651e893983829855583828c828c98c98c 1.5.4-py2.py3-none-any.whl (83kB) 收集 more-itertools>=4.0.0 (from pytest->-r requirements.txt (line 2)) 下载 https://files.pythonhosted.org/packages/79/b1/eace304ef66bd7d3d8b2f78cc374b73ca03bc53664d78151e9df3b3996cc/more_itertools-4.3.0-py3-none-plug-any.whl0test (plugin-any>whl0test)第2行))下载 https://files.pythonhosted.org/packages/f5/f1/5a93c118663896d83f7bcbfb7f657ce1d0c0d617e6b4a443a53abcc658ca/pluggy-0.7.1-py2.py3-none-any.whl 收集6> = 1.10.0(从pytest-> -r requirements.txt(线2))
下载 https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl 收集atomicwrites> = 1.0(从 pytest->-r requirements.txt (line 2)) 下载 https://files.pythonhosted.org/packages/0a/e8/cd6375e7a59664eeea9e1c77a766eeac0fc3083bb958c2b41ec46b95f29c/atomicwrites-1.1.5-py2.py3-none-any.whl 收集ATTRS> = 17.4.0(从pytest - > - R的requirements.txt (第 2 行))
下载 https://files.pythonhosted.org/packages/41/59/cedf87e91ed541be7957c501a92102f9cc6363c623a7666d69d51c78ac5b/attrs-18.1.0-py2, 安装更多-nhlanyer-py2-py2-py2-py2-py2 软件包。 ,pluggy,atomicwrites,attrs,pytest

由于环境错误,无法安装软件包:[Errno 13] 权限被拒绝:'/.local' 检查权限。

如何修复这些权限?

cas*_*sen 10

我找到了我自己认为更漂亮的解决方案:

stage("Python Test") {
  agent { 
    docker {
      label "docker && linux" 
      image "python:3.7"
    }
  }
  steps {
    withEnv(["HOME=${env.WORKSPACE}"]) {
      sh "pip install -r requirements.txt --user"
      # python stuff
    }
  }
  post {
    cleanup {
      cleanWs()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

此解决方法完全围绕问题本身,在用户级别安装软件包。这里的问题是 HOME 目录最初也不是可写的,因此覆盖了 HOME 目录。