在存储库 GITLAB CI/CD 中检测到可疑的所有权

问题描述 投票:0回答:4

我在尝试使用 gitlab ci/cd 部署脚本时遇到这个问题:

Initialized empty Git repository in C:/builds/Tri.BuiV/test-gitlab-cicd/.git/
fatal: detected dubious ownership in repository at 'C:/builds/Tri.BuiV/test-gitlab-cicd'
'C:/builds/Tri.BuiV/test-gitlab-cicd' is owned by:
    'S-1-5-83-1-1989435290-1148643240-1709935003-3943614564'
but the current user is:
    'S-1-5-93-2-1'
To add an exception for this directory, call:
    git config --global --add safe.directory C:/builds/Tri.BuiV/test-gitlab-cicd

我尝试过:

git config --global --add safe.directory C:/builds/Tri.BuiV/test-gitlab-cicd

但是同样的错误,为什么?

我尝试过:

git config --global --add safe.directory C:/builds/Tri.BuiV/test-gitlab-cicd

但遇到同样的问题。

docker image gitlab cicd
4个回答
11
投票

GitLab 论坛这里发布了一个很好的解决方法。就是将以下git相关的环境变量添加到受影响的runner的config.toml中:

[[runners]]
  environment = ["GIT_CONFIG_COUNT=1", "GIT_CONFIG_KEY_0=safe.directory", "GIT_CONFIG_VALUE_0=*"]

这对我有用。


5
投票

如果错误仍然存在,则可能意味着您的

git config --global
(这会影响
%USERPROFILE%\.gitconfig
)未使用与运行 GitLab CI/CD 的帐户相同的帐户。

如果 GitLab 使用不同的帐户运行,它可能会尝试访问您最初创建的文件夹。
GitLab 管道本身需要包括:

git config --global --add safe.directory $CI_PROJECT_DIR

这是我在 MR 3538 中为 GitLab 15.8 自动添加的内容。


solstice333在评论中指出

gitlab-org/gitlab-runner
问题29022,其中Kevin Navero解释说:

我找到了适合我的案例的解决方法。

为了更清楚地说明我的环境,我在 Windows 服务器上使用带有 powershell 的 docker-windows 执行器/运行器。
忘记我之前提到的关于怀疑

git config
git clone
/
fetch
在不同容器下运行的内容。我认为这不再准确。

Gitlab-runner 14.10.1 适用于我,所以我回滚到该版本。

结果,不知何故,“可疑所有者”错误被推送到运行时的稍后时间点,在主

.gitlab-ci.yml
构建脚本中。
这允许我在
git config --global --add safe.directory ...
中执行
pre_build_script
,而不是任何其他
pre_*
脚本。我不知道其他
pre_*
脚本在哪里或什么容器中运行。

AFAIK,此版本的

gitlab-runner
不支持
--docker-isolation
参数,也不识别
runners[i].docker.isolation = "hyperv"

实现此目的的替代解决方案是编辑 docker 守护程序 json 配置,位于
%userprofile%\.docker\windows-daemon.json
%programdata%\docker\config\daemon.json

要添加的条目是“
exec-opts":["isolation=hyperv"]

需要
isolation=hyperv
来配置CPU和内存。否则,配置 CPU 和内存的请求将被忽略(在进程隔离中)。
当然,如果不为每个 docker-windows 执行程序配置资源子集,则需要担心的是,单个主机上可能会生成多个 docker 容器,过多的进程会导致主机因过多的上下文切换而不堪重负。

config.toml
中,我添加了以下内容:

[[runners]]
  ...
  pre_build_script = """
$CI_PROJECT_POSIX_PATH = python -c "from pathlib import Path; >print(Path(r'$CI_PROJECT_DIR').resolve().as_posix())"
echo "> git config --global --add safe.directory >$CI_PROJECT_POSIX_PATH"
git config --global --add safe.directory $CI_PROJECT_POSIX_PATH
"""
  ...

Python3.11 可以方便地烘焙到

.gitlab-ci.yml
中指定的 docker 映像中,以便运行主构建脚本。
$CI_PROJECT_DIR
类似于
c:\builds\nextest-eng\usa\magnum
,全部小写。
来自 Git 的“可疑所有者”错误消息建议执行
git config --global --add safe.directory C:/builds/nextest-eng/usa/magnum
,事实证明,即使在 Windows 上,这也是区分大小写的(我很愚蠢地忽略了这一点,因为 git-for-windows 对于跟踪路径是区分大小写的) .

Python 用于自动将

$CI_PROJECT_DIR
映射到精确的区分大小写的路径,并使用 git-config 建议使用的 posix 分隔符。
在此示例中,
$CI_PROJECT_POSIX_PATH
结果为
C:/builds/nextest-eng/usa/magnum

几个小时以来,我将
c:/builds/nextest-eng/usa/magnum
设置为我的
safe.directory
,它被忽略为不匹配的 dirpath bc。驱动器盘符错误地小写。

这可能适用于 gitlab-runner 15.10,使用未弃用的

pre_get_sources_script
钩子(或已弃用的
pre_clone_script
),但如果它不使用
.gitlab-ci.yml
指定的图像并使用 gitlab-runner-helper 代替,那么 python 将找不到并且会失败。
为了时间和公元前的利益。 gitlab-runner 15.10 不提供我现在需要的任何额外增益,我将坚持使用 gitlab-runner 14.10.1。


0
投票

当使用 mcr.microsoft.com/windows/servercore:ltsc2016 中的图像作为执行器时,我也遇到了这个问题,但事实证明失败的原因是因为我在 Dockerfile 中预先创建了 builds 文件夹:

RUN mkdir C:\builds\my_repo
WORKDIR C:\builds\my_repo

当我从 Dockerfile 中删除它时,git 可疑所有权错误就消失了。

(我创建此文件夹的原因是因为我在本地测试中使用构建容器,并且希望存在完全相同的路径设置,因此我也需要在本地创建该文件夹。不过将来我将手动创建它。 )


0
投票

这是真正的解决方案:

如果您在 gitlab-runner 的文件夹中打开 CMD 并输入

gitlab-runner.exe run
然后使用它,克隆的目录将使用用户的用户名进行注册。如果您想在该服务使用不同的帐户运行之后将其注册为服务,那么它就无法使用它。

解决方案:只需删除 /builds/Ukgehnf23 内的每个文件夹即可

默认情况下,它应该只有一个名为

0

并从服务运行 gitlab-runner

© www.soinside.com 2019 - 2024. All rights reserved.