代码之家  ›  专栏  ›  技术社区  ›  Yu Chen little_birdie

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

  •  0
  • Yu Chen little_birdie  · 技术社区  · 7 年前

    我是詹金斯尝试建立Python的新手 皮特斯特 要运行的测试套件。为了正确执行测试套件,我必须安装几个Python软件包。我在这一步上遇到了麻烦,因为詹金斯一直无法找到答案 virtualenv 和 pip :

    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——分发/用户/共享/詹金斯/家庭/工作区/我的项目-name@tmp/耐用-5045c283/脚本。上海: 第1行:virtualenv:未找到命令

    为什么会这样?在前面的步骤中,我确保在我知道我的 虚拟的 和 皮普 是:

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

    例如,当我输入

    sudo su jenkins
    which pip
    which virtualenv
    

    我得到了如下预期的结果:

    /库/框架/Python。framework/Versions/3.6/bin/pip /库/框架/Python。framework/Versions/3.6/bin/virtualenv

    以下是我所知道的事情:

    • 詹金斯以一个名为 jenkins
    • 最佳实践是创建一个虚拟环境,激活它,并在其中执行我的pip安装
    • 詹金斯跑步 sh 默认情况下,不是这样 bash (但我不确定这是否与我的问题有关)

    为什么詹金斯找不到我的 虚拟的

    编辑: 我又玩了一些,找到了一个有效的解决方案:

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

    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 回复  |  直到 7 年前