Emi*_* C. 6 gitlab docker gitlab-ci-runner
在 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
Run Code Online (Sandbox Code Playgroud)
为了运行它,我使用与之前的 Gitlab CE 12 相同的过程配置我的 Gitlab Runner:
我拉取最后一个 Gitlab 运行程序图像:
docker pull gitlab/gitlab-runner:latest
Run Code Online (Sandbox Code Playgroud)
第一次尝试:
启动在本地卷上安装 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
Run Code Online (Sandbox Code Playgroud)
并注册跑步者
docker run --rm -t -i \
-v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
Run Code Online (Sandbox Code Playgroud)
注册跑步者时,我选择执行者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
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
启动在 Docker 卷上安装 GitLab Runner 容器
docker volume create gitlab-runner-config
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
docker run \
--rm -t -i \
-v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner register
Run Code Online (Sandbox Code Playgroud)
结果相同。
$ apt-get update -qq
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
ERROR: Job failed: exit status 1
Run Code Online (Sandbox Code Playgroud)
第三次尝试:
授予 gitlab-runner 权限
我最终阅读了In gitlab CI the gitlab runner select bad executor和https://docs.gitlab.com/runner/executors/shell.html#running-as-unprivileged-user,其中指出了这些解决方案:
- 移动到码头工人
- 授予用户 gitlab-runner 运行指定命令所需的权限。gitlab-runner 可以在没有 sudo 的情况下运行 apt-get,他还需要 npm install 和 npm run 的权限。
- 将 sudo nopasswd 授予用户 gitlab-runner。将 gitlab-runner ALL=(ALL) NOPASSWD: ALL (或类似)添加到安装了 gitlab-runner 的计算机上的 /etc/sudoers 并将 apt-get update 行更改为 sudo apt-get update,这将以特权身份执行它们用户(根)。
shellsudo usermod -aG docker gitlab-runnersudo nano /etc/sudoers、添加gitlab-runner ALL=(ALL) NOPASSWD: ALL和使用sudo apt-get update -qq,结果是bash: line 106: sudo: command not found我现在在这里很迷路。任何想法都会受到欢迎。
恕我直言,shell在已经安装了 Docker 套接字的 Docker 运行器上使用执行器并不是一个好主意。您最好使用dockerexecutor,它将处理所有事情,并且可能就是它应该如何运行。
或者,您可以使用自定义的 Docker 映像来允许使用具有root权限的 shell 执行器。首先,您需要创建一个Dockerfile:
FROM gitlab/gitlab-runner:latest
# Change user to root
USER root
Run Code Online (Sandbox Code Playgroud)
然后,您必须构建图像(在这里,我将其标记为custom-gitlab-runner):
FROM gitlab/gitlab-runner:latest
# Change user to root
USER root
Run Code Online (Sandbox Code Playgroud)
最后,您需要使用此图像:
$ docker build -t custom-gitlab-runner .
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17324 次 |
| 最近记录: |