我正在尝试在构建步骤中安装需求并在circleci上运行测试。我在运行pip安装时遇到了权限被拒绝的问题,因为它尝试在全局安装需求。我可以在用户级别安装要求,但是使用virtualenv也可以:
version: 2
defaults: &defaults
docker:
- image: circleci/python:3.6
jobs:
build_dataloader:
<<: *defaults
working_directory: ~/app/dataloader
steps:
- checkout:
path: ~/app
- run:
name: Install requirements
command: |
virtualenv env
source env/bin/activate
pip install -r requirements.txt
dataloader_tests:
<<: *defaults
parallelism: 2
steps:
- checkout:
path: ~/app
- run:
name: Running dataloader tests
command: |
cd ~/app/dataloader
python3 -m unittest discover tests/unit/
- store_artifacts:
path: test-reports/
destination: app_tests
workflows:
version: 2
run_tests:
jobs:
- build_dataloader
- dataloader_tests:
requires:
- build_dataloader
有什么方法可以将virtualenv放在单独的步骤中吗?当我将virtualenv零件放在单独的步骤中时,这将不起作用:
version: 2
defaults: &defaults
docker:
- image: circleci/python:3.6
jobs:
build_dataloader:
<<: *defaults
working_directory: ~/app/dataloader
steps:
- checkout:
path: ~/app
- run:
name: Setup virtualenv
command: |
virtualenv env
source env/bin/activate
- run:
name: Install requirements
command: |
pip install -r requirements.txt
dataloader_tests:
<<: *defaults
parallelism: 2
steps:
- checkout:
path: ~/app
- run:
name: Running dataloader tests
command: |
cd ~/app/dataloader
python3 -m unittest discover tests/unit/
- store_artifacts:
path: test-reports/
destination: app_tests
workflows:
version: 2
run_tests:
jobs:
- build_dataloader
- dataloader_tests:
requires:
- build_dataloader
这为什么会失败?如果我将其放在一个单独的步骤中,它是否应该创建虚拟环境?
答案 0 :(得分:1)
我认为这种方法的问题在于每个步骤都使用自己的外壳运行,因此source env/bin/activate
的结果在该步骤完成时会丢失; pip install
在不激活virtualenv的其他外壳中运行。尝试以下方法:
- run:
name: Setup virtualenv
command: |
virtualenv env
- run:
name: Install requirements
command: |
source env/bin/activate
pip install -r requirements.txt
或者只是env/bin/pip install -r requirements.txt
而没有任何激活。