如何在同一个 gitlab CI 步骤中安装和使用 docker?

如何在同一个 gitlab CI 步骤中安装和使用 docker?

我使用带有自定义执行器的 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.sockroot:gitlab-runner可能是一个(未经测试的)解决方案,但感觉非常错误。

有趣的是,该部分中的任何内容after_script都会在新的 SSH 会话中执行,因此会更新组信息。不幸的是,before_scriptscript似乎被连接在一起并放在一个块中提供给run_exec脚本。

有没有办法gitlab-runner在同一个 CI 步骤中“刷新”用户的组,或者允许同一个用户使用 docker 而不将其添加到组中docker

相关内容