GitLab的Shell执行器,无特权

7

我有一个8.7.0版本的GitLab平台,目前正在设置CI部分。 我创建了一个新的gitlab-runner,使用shell作为执行器。 问题在于,在运行runner执行自己的任务之前,系统无法获取git更改。 构建过程的控制台输出:

gitlab-ci-multi-runner 1.1.3 (a470667)
Using Shell executor...
Running on <my-page>...
Fetching changes...
warning: failed to remove <some-path>/localClassSetAnalysis.bin
warning: failed to remove <some-path>/localClassSetAnalysis.lock
...


gitlab-ci-multi-runner 1.1.3 (a470667)
Using Shell executor...
Running on <my-page>...
Cloning repository...
rm: cannot remove ‘path-to-some-directory>’: Permission denied
rm: cannot remove ‘path-to-some-directory>’: Permission denied
...

存储文件的文件夹是/home/gitlab-runner/builds。因此,我想,有两个用户:git和gitlab-runner,而git用户无法删除或重写该目录中的文件。更改目录权限后,构建过程开始并成功完成,但之后文件再次具有旧的权限(用户(gitlab-runner)为读+写,其他人为只读)。因此,现在我必须(最简单的方法)在每次构建之前始终删除/home/gitlab-runner/builds中的所有文件,但这当然不是解决方案... 我该怎么办?

你尝试过为文件夹设置umask吗?这样你就可以控制新创建的文件所具有的权限。 - Fairy
或者给 gitlab-runner 授予 sudo 权限(仅当它在非特权模式下运行的 docker 容器中运行时)。 - Simon A. Eugster
我也遇到了同样的问题(即“shell”注册的gitlab-runner权限被拒绝)。但是,由于我在iOS应用上,所以无法使用“docker”。因此,“sudo”不是一个选项。你找到了另一种克服这个权限被拒绝问题的方法吗?我的问题在这里解释... 感谢任何帮助。 - iKK
1个回答

2

我之前也遇到了同样的问题,但我想我找到了解决方法。你需要确认你的新文件是在哪个组下面创建的(我的是 tape),然后将 gitlab-runner 添加到该组中。在我的情况下,命令如下:

sudo usermod -a -G tape gitlab-runner


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接