首页 > 解决方案 > CircleCI 上 Ubuntu 映像的文件权限

问题描述

我是使用 CircleCI 的新手。我有一个 Python 脚本,用于调用一些 os 命令,例如

path = "/Users/Name/Dev"
os.makedirs(path)

cmds = ["cd path", "touch hello.txt"]
cmd = "; ".join(cmds)
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
                            stderr=subprocess.STDOUT)

但是,PermissionError: [Errno 13] Permission denied: /Users/Name/Dev每当我尝试访问目录时都会遇到问题。也不能 cd,不能写等。这是在 CircleCI 上运行时,但在我的个人机器上运行良好。

我可以尝试什么的任何想法?如何解决 VM 上的这些权限问题?

CircleCI 的 config.yml 设置如下所示:

  build-and-test:
    machine:
      resource_class: large
      image: ubuntu-****
    environment:
      CI_VARIABLE: "8.0.1"
    working_directory: ~/repo

标签: pythoncontinuous-integrationsubprocessyamlcircleci

解决方案


我相信那是因为您试图在 CircleCI 机器中创建一组文件Users/Name/Dev/。由于安全限制(可能是创建文件夹和写入内容的权限),您不应该这样做。

更好的方法是Dev使用环境变量在主文件夹中创建一个文件夹,如下所示:

path = os.path.join(os.environ['HOME'], 'Dev')
os.makedirs(path)

cmds = ["cd '" + path + "'", "touch hello.txt"]
cmd = "; ".join(cmds)
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
                            stderr=subprocess.STDOUT)

这样,您将始终为用户获得一个可写文件夹,因为它始终是主文件夹。


推荐阅读