Gitlab Docker-in-Docker CI\CD 方案:如何传递卷

pet*_*hka 5 deployment volumes gitlab docker gitlab-ci-runner

假设我在 Gitlab 上有存储库并遵循以下部署方案:

  1. 在主机服务器上使用 docker 执行器设置 docker 和 gitlab-runner。
  2. .gitlab-ci.yml设置 docker-compose 中,与依赖项一起构建和建立我的服务。
  3. 通过将提交推送到分支来设置要触发的管道production

正如Gitlab 指南中建议的那样,我放置了/etc/gitlab-runner/config.toml以下几行:

  executor = "docker"
  [runners.docker]
    image = "alpine"
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
Run Code Online (Sandbox Code Playgroud)

但我的书docker-compose.yml完全被忽略了。假设我有具有以下结构的 git 存储库:

.gitlab-ci.yml
docker-compose.yml
user_conf.d/app.conf
Run Code Online (Sandbox Code Playgroud)

并有卷:./user_conf.d:/etc/nginx/user_conf.d. 当我检查/etc/nginx/user_conf.d容器内部时,我发现一个空文件夹而不是app.conf里面的文件夹。

所以问题是:如何正确地将卷传递到从 Gitlab runner 的 docker 执行器启动的 docker 容器。

PS配置如下:

.gitlab-ci.yml

.gitlab-ci.yml
docker-compose.yml
user_conf.d/app.conf
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

image:
  name: docker/compose:latest

services:
  - docker:dind
stages:
  - deploy

deploy:
  stage: deploy
  only:
    - production
  script:
    - docker image prune -f
    - docker-compose build --no-cache
    - docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

swi*_*mer 8

我在等效设置上遇到了同样的问题(自托管 docker 执行器,类似.gitlab-ci.yml,通过 Docker compose 安装卷)。

[runners.docker]我通过对以下部分进行以下两项更改解决了这个问题config.toml

  1. 翻到privileged = falseprivileged = true
  2. 添加"/builds:/builds"volumes

我从这个 GitLab 问题中获得了这两项更改的灵感。

config.toml作为参考,这是更改后的完整内容:

# config.toml

concurrent = 4

[session_server]
  session_timeout = 1800

[[runners]]
  name = "..."
  url = "..."
  token = "..."
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
  [runners.docker]
  tls_verify = false
  image = "docker:20.10.17"
  privileged = true
  disable_entrypoint_overwrite = false
  oom_kill_disable = false
  disable_cache = false
  volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock", "/builds:/builds"]
  shm_size = 0
Run Code Online (Sandbox Code Playgroud)