我有一个Python Travis CI构建,并且Python单元测试执行尝试更改文件系统上的文件组。该文件以前是由单元测试创建的,因此执行测试的用户拥有该文件。
我能够启动一个子shell,我可以运行chgrp命令(每the Travis guidelines),但不幸的是,这搞砸了为我设置的virtualenv特定的Python版本(谁知道还有什么)。
如何复制(在Travis CI脚本中):
language: python
sudo: true
python:
- "3.4"
- "3.5"
before_install:
- sudo apt-get -qq update
- sudo gpasswd -a $USER fuse
script:
- touch testfile
- chgrp fuse testfile | echo 0 # this does not work - bad
- sudo -E su $USER -c "chgrp fuse testfile" # the sudo / su wrapper is required per Travis instructions, see link above - good
- python --version # reports 3.4 or 3.5 - good
- sudo -E su $USER -c "python --version" # always reports 2.7 - bad
- sudo -E su $USER -c "python --version" # always reports 3.2 - bad
正如我在上面的块中所评论的那样,运行一个试图更改testfile
组(这是我的单元测试代码正在执行的操作)的命令的命令仅在用{{1 }}
不幸的是,当我这样做时,我失去了在Travis为我设置的virtualenv中在那些脚本阶段(我已经在上面指定)访问python 3.4和3.5的能力。
知道如何实现我的两个目标吗? (允许sudo -E su $USER -c
非root用户使用chgrp,同时不使用virtualenv或路径上的travis
?
答案 0 :(得分:1)
创建新组时,必须先注销并再次登录才能使用chgrp。
使用sudo是解决此问题的一种方法。由于您已经将它用于groupadd和usermod,我建议您将最后一行更改为sudo chgrp newtravisgroup newfile
。
您还可以使用su
创建一个新的登录shell,其中newtravisgroup可用,但如上所述使用sudo是最简单的方法。
编辑:
使用su
PATH重置时。这就是python恢复到系统python的原因。您可以在运行测试之前再次激活virtualenv。
sudo -E su $USER -c "source $VIRTUAL_ENV/bin/activate; python --version"