15

我有一个 git repo,想让 jenkins 克隆它然后运行

virtualenv venv --distribute
/bin/bash venv/source/activate
pip install -r requirements.txt
python tests.py

詹金斯的控制台输出是:

+ virtualenv venv --distribute
New python executable in venv/bin/python
Installing distribute..........................done.
Installing pip...............done.
+ /bin/bash venv/bin/activate
+ pip install -r requirements.txt
Downloading/unpacking flask (from -r requirements.txt (line 1))
  Running setup.py egg_info for package flask

SNIP

creating /usr/local/lib/python2.7/dist-packages/flask

error: could not create '/usr/local/lib/python2.7/dist-packages/flask': Permission denied

----------------------------------------
Command /usr/bin/python -c "import setuptools;__file__='/var/lib/jenkins/workspace/infatics-website/build/flask/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-hkdBAi-record/install-record.txt failed with error code 1
Storing complete log in /home/jenkins/.pip/pip.log
Build step 'Execute shell' marked build as failure
Finished: FAILURE

我试过在命令之前添加 sudo ,但它也不起作用:

+ sudo pip install -r requirements.txt
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts
Build step 'Execute shell' marked build as failure
Finished: FAILURE

任何想法如何解决这个问题?此外,当我以 jenkins 用户身份在终端中运行 pip install -r requirements.txt 时,它不需要 sudo 权限。我可以让 jenkins(进程)以 jenkins 用户身份运行吗?

4

4 回答 4

29

sudo您必须运行 use才能运行这一事实pip是一个很大的警告,即您的虚拟环境无法正常工作。构建输出显示pip正在您的系统站点包目录中安装需求,这不是 virtualenv 的工作方式。

您的构建脚本实际上并没有保留激活的虚拟环境。激活脚本设置的环境变量在子 bash 进程中设置,不会传播到构建脚本。您应该获取activate脚本而不是运行单独的 shell:

virtualenv venv --distribute
. venv/bin/activate 
pip install -r requirements.txt
python tests.py

如果您将其作为一个构建步骤运行,那应该可以工作(并将您的软件包安装在venv中)。如果要添加更多步骤,则需要在其他步骤中设置 PATH 环境变量。您最好提供完整路径pippython确保您不依赖系统包安装。

于 2013-02-11T18:40:28.737 回答
3

尝试使用

stage('test') {
     agent {
          docker {
               image 'qnib/pytest'
          }
     }
     steps {
          sh 'virtualenv venv && . venv/bin/activate && pip install -r requirements.txt && python tests.py'
     }
}
于 2020-04-21T13:28:21.740 回答
1

我完全同意所说的话....但是为了让这更“詹金斯”

创建一个基本项目 - 并在自定义步骤中执行类似这样的操作

PROJECT="Tree"


rm -Rf ~/Builds/$PROJECT
CODE_HOME=~/Builds/$PROJECT/code
PYENV_HOME=~/Builds/$PROJECT/python
export PYENV_HOME
export PYTHONPATH=""
echo "Creating new Python env"
/usr/local/bin/python3 -m venv  --clear $PYENV_HOME
source $PYENV_HOME/bin/activate

echo "Get Project"
mkdir -p $CODE_HOME
cd $CODE_HOME
git clone https://github.com/MyUsername/MyTree.git .

pip install --upgrade pip
pip install nose
pip install coverage
pip install -r requirements.txt
python setup.py build
python setup.py install

在此之后,您可以进行鼻子测试等...

于 2018-04-05T09:53:53.247 回答
0

这是我为使 Jenkins 在 Windows 机器上执行 pip 安装要求所做的工作:

在“执行 Windows 批处理命令”管道中

REM activate venv, update pip and install package
cmd /k "cd <path to your directory like C:\WebAPI> & .\venv\Scripts\activate.bat & python -m pip install -U pip & pip install -r .\requirements.txt"

cmd /k执行 windows 命令提示符,您可以在那里添加任何命令。&是管道运营商。所以你可以有多个命令

于 2019-04-10T11:50:59.287 回答