gpt4 book ai didi

python - Jenkinsfile 和 Python virtualenv

转载 作者:IT老高 更新时间:2023-10-28 20:28:59 24 4
gpt4 key购买 nike

我正在尝试设置一个使用 Shiny 的新 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'

看起来它正在尝试在全局 env 中而不是在 virtualenv 中更新 pip,并且看起来每个 sh 步骤都在自己的上下文中,我如何让它们在相同的上下文中执行?

最佳答案

你试图做的事情不会奏效。每次调用 sh 命令时,jenkins 都会创建一个新的 shell。

这意味着如果您在 sh 中使用 .env/bin/activate,它将仅在该 shell session 中获取。结果是,在新的 sh 命令中,您必须再次获取文件(如果您仔细查看控制台输出,您会发现 Jenkins 实际上会在您每次运行时创建临时 shell 文件命令。

因此,您应该在每个 shell 命令的开头获取 .env/bin/activate 文件(您可以对多行​​字符串使用三引号),像这样

if (fileExists('requirements/preinstall.txt')) {
sh """
. .env/bin/activate
pip install -r requirements/preinstall.txt
"""
}
...
sh """
. .env/bin/activate
pip install -r requirements/test.txt
"""
}
stage("Unittests") {
sh """
. .env/bin/activate
./manage.py test --noinput
"""
}

或者在一个 shell 中运行它

sh """
. .env/bin/activate
if [[ -f requirements/preinstall.txt ]]; then
pip install -r requirements/preinstall.txt
fi
pip install -r requirements/test.txt
./manage.py test --noinput
"""

关于python - Jenkinsfile 和 Python virtualenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40836570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com