如何使用pip和virtualenv在Jenkins中正确设置我的Python依赖关系?

时间:2019-02-05 19:29:52

标签: python jenkins pip jenkins-pipeline virtualenv

我是詹金斯(Jenkins)的新手,他试图设置要运行的Python pytest 测试套件。为了正确执行测试套件,我必须安装几个Python软件包。我在执行此特定步骤时遇到了麻烦,因为詹金斯一直无法找到virtualenvpip

pipeline {
    parameters {
      gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH', quickFilterEnabled: true
    }

    agent any

    stages {
        stage('Checkout source code') {
            steps {

                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '------', url: 'git@github.com:path-to-my-repo/my-test-repo.git']]])
            }
        }

        stage('Start Test Suite') {
            steps {
                    sh script: 'PATH=/Library/Frameworks/Python.framework/Versions/3.6/bin/:$PATH'
                    echo "Checking out Test suite repo."

                    sh script: 'virtualenv venv --distribute'
                    sh label: 'install deps', script: '/Library/Frameworks/Python.framework/Versions/3.6/bin/pip install -r requirements.txt'
                    sh label: 'execute test suite, exit upon first failure', script: 'pytest --verbose -x --junit-xml reports/results.xml'

                post {
                    always {
                        junit allowEmptyResults: true, testResults: 'reports/results.xml'
                    }
                }
            }
        }

virtualenv venv --distribute步骤中,Jenkins引发错误(我最初在本地实例的Jenkins服务器上运行此错误,尽管在生产中它将在Amazon Linux 2计算机上运行):

  
      
  • virtualenv venv --distribute /Users/Shared/Jenkins/Home/workspace/my-project-name@tmp/durable-5045c283/script.sh:   第1行:virtualenv:找不到命令
  •   

为什么会这样?在前面的步骤中,我确保将我知道的virtualenvpip附加在以下位置:

 sh script: 'PATH=/Library/Frameworks/Python.framework/Versions/3.6/bin/:$PATH'

例如,当我输入

sudo su jenkins
which pip
which virtualenv

我得到了预期的以下输出:

  

/Library/Frameworks/Python.framework/Versions/3.6/bin/pip   /Library/Frameworks/Python.framework/Versions/3.6/bin/virtualenv

这是我所知道的:

  • Jenkins以名为jenkins的用户身份运行
  • 最佳做法是创建一个虚拟环境,将其激活,然后在其中执行我的pip安装
  • Jenkins默认运行sh,而不运行bash(但是我不确定这是否与我的问题有关)

为什么詹金斯找不到我的virtualenv?为Jenkins构建安装Python库的最佳实践是什么?

编辑:,我又玩了几次,找到了可行的解决方案:

我不知道这是否是正确的方法,但是我使用了以下语法:

withEnv(['PATH+EXTRA=/Library/Frameworks/Python.framework/Versions/3.6/bin/']) {
                            sh script: "pip install virtualenv"
                 // do other setup stuff
    }

但是,我现在遇到了一个新问题:我在这里的Python路径中明确地进行了硬编码。如果我在远程Linux机器上运行,我是否必须安装该特定版本的Python(3.6)?

0 个答案:

没有答案