gitlab ci 找不到带有 shell 执行器的 docker buildx 命令

gitlab ci can not find docker buildx command with shell executor

我在让我的 gitlab-runner 执行 docker buildx 命令时遇到了一些麻烦。 我有一个配置如下的 gitlab-runner:

[[runners]]
  name = "Name"
  url = "https://gitlab.mypage.com/"
  token = "token"
  executor = "shell"
  shell = "powershell"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

以及触发的管道:

stages:
  - test
  - build

test_backend:
  stage: test
  script:
    - exit 0
  only:
    - merge_request
    - master

build:
  stage: build
  script:
    - docker login someregistry -u xxxx -p yyyy
    - docker buildx ls
  only:
    - merge_request
    - master
    - dev

我稍微混淆了代码。

我遇到的问题是,docker login 命令被正确执行,但 docker buildx 命令没有被正确执行。 我已经在机器上手动测试了命令并且成功了。

有人可以帮我吗?

根据我使用 docker 跑步者的经验,这里最可能出现的情况是,docker 跑步者没有启用实验性功能,只是因为 docker 基地拥有它。 . 我过去曾经历过类似的事情:runner 中的 docker 不是您托管 runner 的 docker!

您可能必须为此添加 DIND (Docker in Docker) 服务,因为据我所知,这个运行器系统只有来自您的主机的 docker与runner中的docker相连。

我们是这样做的:

  # gitlab-runner
gitlab-runner:
container_name: vivavis.gitlab-runner
image: gitlab/gitlab-runner:latest
restart: always
volumes: 
  - gitlab-runner:/etc/gitlab-runner
  - /var/run/docker.sock:/var/run/docker.sock // <<<<<< THIS IS THE IMPORTANT LINE
networks:
  - swp-infra-code

这里有一点警告:

激活它时,我们遇到了一个错误/没有很好地清理: 因为 GitLab Runner 现在与基础 docker 连接,将在 运行 a CI / CD 时创建的图像未正确删除:GitLab 没有实现该功能,它只是假设,当 gitlab-runner-container 消亡时,所有数据都会消亡。但是有了这个连接,这里的数据就不会消失,因为它不是在容器中创建的——它是在基础 docker.

中创建的

我找到了解决问题的办法。 要使用实验性功能,您可以设置环境变量。

$env:DOCKER_CLI_EXPERIMENTAL=enabled

此命令可用于 ci 管道。

看起来 shell 执行器中的 docker cli 与您可以在系统上使用的 docker cli 不同,如果您尝试的话。 很混乱。