如何从 gitlab-ci 将 docker 图像发布到 docker hub
How to publish docker images to docker hub from gitlab-ci
Gitlab 提供了一个 .gitlab-ci.yml
模板,用于构建和发布图像到它自己的注册中心(在您的一个项目中单击 "new file",select .gitlab-ci.yml
和 docker
).该文件看起来像这样,开箱即用:)
# This file is a template, and might need editing before it works on your project.
# Official docker image.
image: docker:latest
services:
- docker:dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
build-master:
stage: build
script:
- docker build --pull -t "$CI_REGISTRY_IMAGE" .
- docker push "$CI_REGISTRY_IMAGE"
only:
- master
build:
stage: build
script:
- docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
except:
- master
但默认情况下,这将发布到 gitlab 的注册表。我们如何才能改为发布到 docker hub?
根本不需要更改 .gitlab-ci.yml
,我们只需要 add/replace 项目管道设置中的环境变量。
1。找到所需的注册表 url
使用 hub.docker.com
无效,您将收到以下错误:
Error response from daemon: login attempt to https://hub.docker.com/v2/ failed with status: 404 Not Found
默认 docker 集线器注册表 url 可以这样找到:
docker info | grep Registry
Registry: https://index.docker.io/v1/
index.docker.io 正是我要找的。
2。在gitlab settings
中设置环境变量
我想发布gableroux/unity3d images using gitlab-ci, here's what I used in Gitlab's project > Settings > CI/CD > Variables
CI_REGISTRY_USER=gableroux
CI_REGISTRY_PASSWORD=********
CI_REGISTRY=docker.io
CI_REGISTRY_IMAGE=index.docker.io/gableroux/unity3d
CI_REGISTRY_IMAGE
设置很重要
默认为 registry.gitlab.com/<username>/<project>
注册表 url 需要更新,因此请使用 index.docker.io/<username>/<project>
由于 docker hub 是使用 docker
时的默认注册表,您也可以改用 <username>/<project>
。我个人更喜欢冗长的内容,所以我保留了完整的注册表 url.
这个答案应该也涵盖其他注册表,只需相应地更新环境变量即可。
为了扩展 GabLeRoux 的回答,
我在 GitLab 的推送阶段遇到了问题 CI build:
denied: requested access to the resource is denied
通过将我的 CI_REGISTRY
更改为 docker.io
(删除 index.
),我能够成功推送。
Gitlab 提供了一个 .gitlab-ci.yml
模板,用于构建和发布图像到它自己的注册中心(在您的一个项目中单击 "new file",select .gitlab-ci.yml
和 docker
).该文件看起来像这样,开箱即用:)
# This file is a template, and might need editing before it works on your project.
# Official docker image.
image: docker:latest
services:
- docker:dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
build-master:
stage: build
script:
- docker build --pull -t "$CI_REGISTRY_IMAGE" .
- docker push "$CI_REGISTRY_IMAGE"
only:
- master
build:
stage: build
script:
- docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
except:
- master
但默认情况下,这将发布到 gitlab 的注册表。我们如何才能改为发布到 docker hub?
根本不需要更改 .gitlab-ci.yml
,我们只需要 add/replace 项目管道设置中的环境变量。
1。找到所需的注册表 url
使用 hub.docker.com
无效,您将收到以下错误:
Error response from daemon: login attempt to https://hub.docker.com/v2/ failed with status: 404 Not Found
默认 docker 集线器注册表 url 可以这样找到:
docker info | grep Registry
Registry: https://index.docker.io/v1/
index.docker.io 正是我要找的。
2。在gitlab settings
中设置环境变量我想发布gableroux/unity3d images using gitlab-ci, here's what I used in Gitlab's project > Settings > CI/CD > Variables
CI_REGISTRY_USER=gableroux
CI_REGISTRY_PASSWORD=********
CI_REGISTRY=docker.io
CI_REGISTRY_IMAGE=index.docker.io/gableroux/unity3d
CI_REGISTRY_IMAGE
设置很重要
默认为 registry.gitlab.com/<username>/<project>
注册表 url 需要更新,因此请使用 index.docker.io/<username>/<project>
由于 docker hub 是使用 docker
时的默认注册表,您也可以改用 <username>/<project>
。我个人更喜欢冗长的内容,所以我保留了完整的注册表 url.
这个答案应该也涵盖其他注册表,只需相应地更新环境变量即可。
为了扩展 GabLeRoux 的回答,
我在 GitLab 的推送阶段遇到了问题 CI build:
denied: requested access to the resource is denied
通过将我的 CI_REGISTRY
更改为 docker.io
(删除 index.
),我能够成功推送。