在Travis CI构建中执行时,如何更改文件组?

时间:2016-01-31 17:59:47

标签: travis-ci

我有一个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

1 个答案:

答案 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"