Gitlab-runner 未能删除权限被拒绝

Posted

技术标签:

【中文标题】Gitlab-runner 未能删除权限被拒绝【英文标题】:Gitlab-runner failed to remove permission denied 【发布时间】:2020-06-08 04:17:01 【问题描述】:

我正在使用 Gitlab 设置 CI/CD 管道。我已经在 Digital Ocean Ubuntu 18.04 droplet 上安装了 gitlab-runner,并在 /etc/sudoers 中授予了 gitlab-runner 的权限:

gitlab-runner ALL=(ALL:ALL)ALL

对关联存储库的第一次提交正确构建了 docker-compose(应用程序本身是 Django+postgres),但随后的提交无法清除以前的构建并失败:

Running with gitlab-runner 12.8.0 (1b659122)
on ubuntu-s-4vcpu-8gb-fra1-01 52WypZsE
Using Shell executor...
00:00
Running on ubuntu-s-4vcpu-8gb-fra1-01...
00:00
Fetching changes with git depth set to 50...
00:01
 Reinitialized existing Git repository in /home/gitlab-runner/builds/52WypZsE/0/lorePieri/djangocicd/.git/
 From https://gitlab.com/lorePieri/djangocicd
  * [new ref]         refs/pipelines/120533457 -> refs/pipelines/120533457
    0072002..bd28ba4  develop                  -> origin/develop
 Checking out bd28ba46 as develop...
 warning: failed to remove app/staticfiles/admin/img/selector-icons.svg: Permission denied
 warning: failed to remove app/staticfiles/admin/img/search.svg: Permission denied
 warning: failed to remove app/staticfiles/admin/img/icon-alert.svg: Permission denied
 warning: failed to remove app/staticfiles/admin/img/tooltag-arrowright.svg: Permission denied
 warning: failed to remove app/staticfiles/admin/img/icon-unknown-alt.svg: Permission denied

这是 .gitlab-ci.yml 文件的相关部分:

image: docker:latest
services:
  - docker:dind

stages:
  - test
  - deploy_staging
  - deploy_production

step-test:
  stage: test
  before_script:
    - export DYNAMIC_ENV_VAR=DEVELOP
  only:
    - develop
  tags:
    - develop
  script:
    - echo running tests in $DYNAMIC_ENV_VAR
    - sudo apt-get install -y python-pip
    - sudo pip install docker-compose
    - sudo docker image prune -f
    - sudo docker-compose -f docker-compose.yml build --no-cache
    - sudo docker-compose -f docker-compose.yml up -d
    - echo do tests now
    - sudo docker-compose exec -T web python3 -m coverage run --source='.' manage.py test

...

我尝试过的:

usermod -aG docker gitlab-runner
sudo service docker restart

【问题讨论】:

我也有同样的问题。你搞清楚了吗? @silkAdmin 我添加了一个新答案。我曾经也有过一样的问题。请你看看它,如果它有用,请放弃投票? 【参考方案1】:

对我来说最好的解决方案是添加

pre_clone_script = "sudo chown -R gitlab-runner:gitlab-runner ."

进入/etc/gitlab-runner/config.toml 即使您在上一个作业之后没有权限,它也会在清理工作目录和克隆 repo 之前设置正确的权限。

【讨论】:

【参考方案2】:

我建议在受影响的工作中将 GIT_STRATEGY 设置为 none。

【讨论】:

您能否详细说明如何操作?谢谢。 首先,我将创建一个使用sudo rm -rf * && sudo rm -rf .git* 擦除所有预先存在的构建数据的作业,GIT_STRATEGY 为 none。然后,克隆项目的以下作业应该将 GIT_STRATEGY 设置为克隆。这样,当您进行测试时,您总是在克隆时从一个完全空的文件夹开始,这意味着您不会被拒绝尝试覆盖内容的权限。有关如何在 YML 中声明它们的更多信息:docs.gitlab.com/ee/ci/yaml/#git-strategy【参考方案3】:

我也遇到了同样的问题。因此,我将详细解释它是如何解决的。

尝试找到您的 config.toml 文件并以 root 权限运行 gitlab-runner 命令,因为 permission denied 是一个非常常见的基于 UNIX 的操作系统错误。

找到config.toml的位置后通过:

sudo gitlab-runner run --config <absolute_location_of_config_toml>

P.S. 您可以使用locate config.toml 命令轻松找到所有config.toml 文件。执行sudo apt-get install mlocate确认你已经安装了

    在遇到permission denied错误后,我尝试使用sudo gitlab-runner run而不是gitlab-runner,但它有自己的问题:

    ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such 
    file or directory  builds=0
    

    在没有root权限的情况下执行gitlab-runner没有任何配置文件问题。

    尝试实施@Grumbanks 和@vlad-Mazurkov 提到的方法和解决方案。但它们不能正常工作。

【讨论】:

【参考方案4】:

这可能是因为您在克隆的代码库中编写了一个文件。我所做的只是在 gitlab-runner 目录之外创建另一个目录:

WORKSPACE_DIR="/home/abcd_USER/a/b"
rm -rf $WORKSPACE_DIR
mkdir -p $WORKSPACE_DIR
cd $WORKSPACE_DIR
ls -la
git clone ..................
AND DO whatever 

我再也没有遇到过这个问题。

【讨论】:

以上是关于Gitlab-runner 未能删除权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

通过 SSH 将 gitlab-runner(服务器)连接到虚拟机失败:权限被拒绝(公钥、密码)

服务端点未能侦听 URI“0”,因为访问被拒绝 [关闭]

在本地运行 GitLab 和 GitLab-Runner docker 实例时,管道中的构建步骤因连接被拒绝错误而失败

致命:无法创建工作树目录“scrumwala.git。”:权限被拒绝

Carthage:打开模块的导入文件 * 权限被拒绝

系统创建文件失败...权限被拒绝 - cPanel