Jenkins声明管道-激活python venv

lzfw57am  于 2023-03-17  发布在  Jenkins
关注(0)|答案(1)|浏览(167)

我正在为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)

w7t8yxp5

w7t8yxp51#

source的可用性取决于jenkins实际使用的shell,正如评论中提到的,你可能应该使用.而不是source
但是,venv的激活和停用与sh的范围有关。
如果你有多个步骤和多个sh,你需要激活每个你需要访问安装到venv的python库/工具的地方的venv。这是因为激活应用于当前shell,如果你在一个sh上激活它,一旦停止,venv设置会自动停用,因为下一个sh将产生一个新shell。

相关问题