繁体   English   中英

Gitlab Runner 与 Docker 和 shell 错误 - 权限被拒绝

[英]Gitlab Runner with Docker and shell error — Permission denied

在 Ubuntu 服务器 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 跑步者图像:

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

注册跑步者时,对于执行者,我选择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

第二次尝试:

启动 GitLab 流道容器安装在 Docker 卷上

  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 作为执行人)
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 权限

I ended up reading In gitlab CI the gitlab runner choose wrong executor and https://docs.gitlab.com/runner/executors/shell.html#running-as-unprivileged-user , which states these solutions:

  1. 移至 docker
  2. 授予用户 gitlab-runner 运行指定命令所需的权限。 gitlab-runner 可以在没有 sudo 的情况下运行 apt-get,他还需要 perms 才能安装 npm 和 npm 运行。
  3. 将 sudo nopasswd 授予用户 gitlab-runner。 将 gitlab-runner ALL=(ALL) NOPASSWD: ALL (或类似) 添加到安装了 gitlab-runner 的机器上的 /etc/sudoers 并将 apt-get update 行更改为 sudo apt-get update,这将作为特权执行它们用户(根)。
  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 插座的 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 执行器在 ubuntu 上使用本地安装的 gitlab-runner 时遇到了类似的问题(我在使用 docker 执行器时遇到了其他问题,无法在阶段之间进行通信)

$ docker build -t myapp .
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=myapp&target=&ulimits=null&version=1": dial unix /var/run/docker.sock: connect: permission denied
ERROR: Job failed: exit status 1

然后我打印了在 gitlab-ci.yml 文件中运行 docker 命令的用户,该文件是gitlab-runner

...

build:
  script:
    - echo $USER
    - docker build -t myapp .
...

然后我将gitlab-runner添加到 docker 组使用

sudo usermod -aG docker gitlab-runner 

这解决了我的问题。 不再有 docker 权限错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM