首页 > 解决方案 > 由于“无法将所有权更改为 uid 3434”,无法将 CircleCI 工作区从 Windows 附加到 Linux

问题描述

我正在使用 CircleCI 的持久工作区功能在 Linux 和 Windows 执行程序类型之间运行具有相同构建文件夹的作业。我能够从 Linux 转到 Windows,但是当我从 Windows 转到 Linux 时,当 CircleCI 尝试附加工作区时出现此错误。

应用工作区层:

  9ba3eddc-3658-43c2-858b-aea39250af3e
  25c476af-8804-4125-b979-05a62a9ac204

Error applying workspace layer for job 25c476af-8804-4125-b979-05a62a9ac204: Error extracting tarball /tmp/workspace-layer-25c476af-8804-4125-b979-05a62a9ac204854634413 : tar: project/.circleci/config.yml: Cannot change ownership to uid 3434, gid 197121: Invalid argument

查看错误很明显,系统上不存在 UID。我试图运行命令来创建它出错的相同 UID/GID,但我仍然遇到无法更改所有者的问题。

我期待 CircleCI 移动文件并忽略用户:提取时的组部分,因为您不能保证 UID/GID 存在。我打开了一张支持票,但希望能更快地解决这个问题。

标签: tarcircleciworkspace

解决方案


我找到了解决这个问题的方法,它迫使 CircleCI 使用 TAR_OPTIONS 环境变量来强制选项忽略所有者/组。这是我添加到我的作业步骤中的内容,这些步骤在之前的作业运行是 Window 时附加了工作区。

build-app:
    build:
    docker:
      - image: Dockerhub.com/myrepo/myimage:1.0.0
        environment:
          TAR_OPTIONS: --no-same-owner

使用 TAR_OPTIONS 环境注入选项--no-same-owner允许 CircleCI 毫无问题地提取 tarball。


推荐阅读