在 ecs fargate 上将 docker dind 与 GitLab runner 一起使用

Use docker dind with GitLab runner on ecs fargate

我在 EC2 上设置了一个 GitLab runner,它在 Fargate ECS 集群上触发作业。 我一步步跟着这个教程:https://docs.gitlab.com/runner/configuration/runner_autoscale_aws_fargate

在 CI/CD 期间,我构建了 docker 图像,然后我想在 CI/CD 的其他阶段重用它们。 因此,当我使用共享跑步者时,我使用 docker dind:

  image: docker:stable
  services:
    - docker:dind

我的 config.toml 看起来像这样:

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "fargate-runner"
  url = "https://gitlab.com/"
  token = "KRGVsYCF-V-D1u7UvCjq"
  executor = "custom"
  builds_dir = "/opt/gitlab-runner/builds"
  cache_dir = "/opt/gitlab-runner/cache"
  [runners.custom]
    config_exec = "/opt/gitlab-runner/fargate"
    config_args = ["--config", "/etc/gitlab-runner/fargate.toml", "custom", "config"]
    prepare_exec = "/opt/gitlab-runner/fargate"
    prepare_args = ["--config", "/etc/gitlab-runner/fargate.toml", "custom", "prepare"]
    run_exec = "/opt/gitlab-runner/fargate"
    run_args = ["--config", "/etc/gitlab-runner/fargate.toml", "custom", "run"]
    cleanup_exec = "/opt/gitlab-runner/fargate"
    cleanup_args = ["--config", "/etc/gitlab-runner/fargate.toml", "custom", "cleanup"]

我应该如何在 CI/CD 期间使用 docker 命令并在所有阶段之间保留每个构建的 docker 图像?

docker:dind 需要特权执行。不可能在 Fargate 上使用特权容器,所以这不是直接可能的。

但是,您可以使用 kaniko 等无守护程序映像构建器来构建 docker 映像,并且可以选择将这些映像用作以后作业的构建映像。

您还可以探索替代方案,例如 using CodeBuild 使用 fargate 执行器构建映像。