我正在为jenkins使用声明式管道,我的目标是为jenkins/workspace中的每个项目提供一个独立的虚拟环境,我用以下代码创建了一个新的管道:
pipeline {
agent any
stages {
stage('Pull all changes') {
steps {
git branch: "master", url: "git@fancylink.git"
}
}
stage('Create and Activate venv') {
steps {
sh 'python3.11 -m venv venv'
sh 'source venv/bin/activate'
}
}
}
post {
always {
sh 'deactivate'
}
}
}
但是,我得到这个错误:
当我尝试通过SSH执行相同的步骤时,一切都很正常,venv也被激活了。另外,我不知道这是否重要,但我在服务器上有2个版本的python(python3.9,python3.11)
1条答案
按热度按时间w7t8yxp51#
source
的可用性取决于jenkins实际使用的shell,正如评论中提到的,你可能应该使用.
而不是source
。但是,venv的激活和停用与
sh
的范围有关。如果你有多个步骤和多个
sh
,你需要激活每个你需要访问安装到venv的python库/工具的地方的venv。这是因为激活应用于当前shell,如果你在一个sh
上激活它,一旦停止,venv设置会自动停用,因为下一个sh
将产生一个新shell。