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 不同,如果您尝试的话。
很混乱。
我在让我的 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 不同,如果您尝试的话。 很混乱。