我是詹金斯尝试建立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)?