我正在尝试设置一个使用闪亮的新 Jenkins 管道的项目,更具体地说是一个多分支项目。
我在测试分支中创建了一个 Jenkinsfile
,如下所示:
node {
stage 'Preparing VirtualEnv'
if (!fileExists('.env')){
echo 'Creating virtualenv ...'
sh 'virtualenv --no-site-packages .env'
}
sh '. .env/bin/activate'
sh 'ls -all'
if (fileExists('requirements/preinstall.txt')){
sh 'pip install -r requirements/preinstall.txt'
}
sh 'pip install -r requirements/test.txt'
stage 'Unittests'
sh './manage.py test --noinput'
}
值得注意的是 preinstall.txt
会更新pip。
我收到如下错误:
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/pip'
看起来它正在尝试在全局环境中而不是在 virtualenv 中更新 pip,并且看起来每个 sh
步骤都在其自己的上下文中,如何让它们在相同的上下文中执行?
原文由 James Lin 发布,翻译遵循 CC BY-SA 4.0 许可协议
你试图做的是行不通的。每次调用
sh
命令时,jenkins 都会创建一个新的 shell。这意味着如果您在
.env/bin/activate
中使用sh
它将仅在该 shell 会话中获取。结果是,在新的sh
命令中,您必须再次获取文件源(如果仔细查看控制台输出,您会发现 Jenkins 实际上会在每次运行命令时创建临时 shell 文件.因此,您应该在每个 shell 命令的开头获取
.env/bin/activate
文件(您可以对多行字符串使用三重引号),如下所示或者在一个 shell 中运行它