我使用带有自定义执行器的 gitlab-runner,它可以在 KVM 管理程序上创建和销毁虚拟机。安装和配置与此示例非常相似:https://docs.gitlab.com/runner/executors/custom_examples/libvirt.html
在单个 CI 步骤中(因此在干净的 CentOS 7 上),我想要:
- 安装 docker(守护进程和 CLI)
- 将用户添加
gitlab-runner
到组docker
- 使用 gitlab-runner 用户运行一些 docker 程序
一个(非工作)示例.gitlab-ci.yml
是:
docker:
before_script:
- sudo yum install -y docker-ce containerd.io # And whatever else is required for this line to succeed.
- sudo usermod -aG docker gitlab-runner
- newgrp docker
script:
- docker run hello-world
tags:
- vm
前面的示例因 而失败,permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
因为后面的命令newgrp
是在原始 shell 会话中执行的,而不是在 创建的会话中执行的newgrp
。
将所有权更改/var/run/docker.sock
为root:gitlab-runner
可能是一个(未经测试的)解决方案,但感觉非常错误。
有趣的是,该部分中的任何内容after_script
都会在新的 SSH 会话中执行,因此会更新组信息。不幸的是,before_script
和script
似乎被连接在一起并放在一个块中提供给run_exec
脚本。
有没有办法gitlab-runner
在同一个 CI 步骤中“刷新”用户的组,或者允许同一个用户使用 docker 而不将其添加到组中docker
?