【问题标题】:Gitlab Runner with Docker and shell error — Permission denied带有 Docker 和 shell 错误的 Gitlab Runner — 权限被拒绝
【发布时间】:2021-05-29 13:55:54
【问题描述】:

在 Ubuntu Server 20.04.2.0 上安装了全新的 Gitlab CE 13.9.1。 这是管道

image: node:latest

before_script:
  - apt-get update -qq

stages:
  - install

install:
  stage: install
  script:
    - npm install --verbose

为了运行它,我使用与我之前的 Gitlab CE 12 相同的过程来配置我的 Gitlab Runner:

我拉出最后一张 Gitlab runner 图像:

docker pull gitlab/gitlab-runner:latest

第一次尝试:

在本地卷上启动 GitLab Runner 容器挂载

docker run -d \
--name gitlab-runner \
--restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest

并注册跑步者

docker run --rm -t -i \
-v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

注册runner时,executor我选择shell

最后,当我推送到 Gitlab 时,在管道上,我看到了这个错误:

$ apt-get update -qq
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
ERROR: Job failed: exit status 1

第二次尝试:

在 Docker 卷上启动 GitLab Runner 容器挂载

  1. 创建卷
docker volume create gitlab-runner-config
  1. 启动 GitLab Runner 容器
docker run -d \
--name gitlab-runner \
--restart always \
-v gitlab-runner-config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
  1. 注册runner(再次选择shell作为executor)
docker run \
--rm -t -i \
-v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner register

同样的结果。

$ apt-get update -qq
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
ERROR: Job failed: exit status 1

第三次尝试:

授予 gitlab-runner 权限

我最终阅读了In gitlab CI the gitlab runner choose wrong executorhttps://docs.gitlab.com/runner/executors/shell.html#running-as-unprivileged-user,其中说明了这些解决方案:

  1. 移至码头
  2. 授予用户 gitlab-runner 运行指定命令所需的权限。 gitlab-runner 可以在没有 sudo 的情况下运行 apt-get,他还需要 perms 才能进行 npm install 和 npm run。
  3. 将 sudo nopasswd 授予用户 gitlab-runner。将 gitlab-runner ALL=(ALL) NOPASSWD: ALL (或类似) 添加到安装了 gitlab-runner 的机器上的 /etc/sudoers 并将 apt-get update 行更改为 sudo apt-get update,这将作为特权执行它们用户(root)。
  1. 我需要使用shell
  2. 我已经用 sudo usermod -aG docker gitlab-runner 做到了
  3. 也尝试使用sudo nano /etc/sudoers,添加gitlab-runner ALL=(ALL) NOPASSWD: ALL,并在管道中使用sudo apt-get update -qq,结果为bash: line 106: sudo: command not found

我现在很迷茫。欢迎任何想法。

【问题讨论】:

    标签: docker gitlab gitlab-ci-runner


    【解决方案1】:

    恕我直言,在已安装 Docker 套接字的 Docker 运行器上使用 shell 执行程序不是一个好主意。你最好使用docker executor,它会处理所有事情,并且可能是它应该运行的方式。

    编辑

    或者,您可以使用自定义的 Docker 映像来允许使用具有 root 权限的 shell 执行程序。首先,您需要创建一个Dockerfile

    FROM gitlab/gitlab-runner:latest
    # Change user to root
    USER root
    

    然后,您必须构建图像(在这里,我将其标记为custom-gitlab-runner):

    $ docker build -t custom-gitlab-runner .
    

    最后,你需要使用这张图片:

    docker run -d \
      --name gitlab-runner \
      --restart always \
      -v /srv/gitlab-runner/config:/etc/gitlab-runner \
      -v /var/run/docker.sock:/var/run/docker.sock \
      custom-gitlab-runner:latest
    

    【讨论】:

    • 如问题中所述,shell 是一项要求。
    • 这不是要求。此外,您正在配置所有内容,就好像您要使用 docker 执行程序(在 Docker 中使用 Docker)一样。
    • 请参考题名。我知道管道的配置,就好像我要与 docker executor 一起使用它一样;这里有趣的是,我让它使用带有 shell 执行器的 Gitlab Runner 12 运行这个管道。应该这样工作,我很确定我做错了什么。
    • Please refer to the title of the question 也没有将其作为要求。发布的解决方案至少是一个足够的解决方案,因为它修复了错误(只需将shell 更改为docker,一切都会正常工作)。否决票不公平,或编辑您的问题并确保将shell 声明为要求(这将难以理解,但将是您的具体问题)。
    • 你是有道理的,无论如何编辑答案,这样我就可以取消投票了
    猜你喜欢
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 2020-09-13
    • 2018-07-15
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多