我是詹金斯(Jenkins)的新手,他试图设置要运行的Python pytest 测试套件。为了正确执行测试套件,我必须安装几个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 --distribute /Users/Shared/Jenkins/Home/workspace/my-project-name@tmp/durable-5045c283/script.sh: 第1行:virtualenv:找不到命令
为什么会这样?在前面的步骤中,我确保将我知道的virtualenv
和pip
附加在以下位置:
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
的用户身份运行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)?