tar - 由于“无法将所有权更改为 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 存在。我打开了一张支持票,但希望能更快地解决这个问题。
解决方案
我找到了解决这个问题的方法,它迫使 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。
推荐阅读
- bash - 无法在 .sh 脚本中回显上次执行
- android - Gradle 任务 jacoco 报告生成空的 html 报告文件(未指定类文件)
- javascript - 测试在 Javascript 中使用扩展运算符
- javascript - 当我试图阻止表单提交时,表单被提交了两次
- javascript - 使用 express 进行长轮询模拟
- oracle - 连续获取层次结构中的每个父级
- mongodb - Mongodb upsert 在应该更新时插入
- python-3.x - 将过滤器应用于霍夫线检测
- maven - Maven Tycho 尝试解压缩签名文件时失败(tycho-packaging-plugin)
- linux - 一种指定命令在前一个失败时运行的方法