我想在自动构建过程中将构建的docker映像推送到中央docker hub中。为此,我需要先登录,然后再进行推送。
.gitlab-ci.yml
文件的相关部分如下:
docker-deploy:
image: docker:latest
stage: deploy
before_script:
- echo $HUB_PW | docker login -u $HUB_USER --password-stdin
after_script:
- docker logout
script:
- docker push <mytag>:$CI_PIPELINE_ID
我在Gitlab CI中遇到以下错误
$ echo $HUB_PW | docker login -u $HUB_USER --password-stdin
Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password
正确设置了相关的环境变量$HUB_PW
和$HUB_USER
。
我试图在linux bash上做同样的事情,并使用docker,结果也一样。
但是,我能够以交互方式登录docker。
docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: <myusername>
Password:
Login Succeeded
注销后,我得到
docker logout
Removing login credentials for https://index.docker.io/v1/
无法在自动构建中进行交互式登录。而且我不了解集线器URL的区别,这取决于使用交互式登录名和附带密码的登录名。
有人知道如何使该设置正常工作吗?
答案 0 :(得分:0)
我有类似的问题,因为$ USERNAME包含$
字符。通过直接在.gitlab-ci.yml中使用带有转义字符的名称进行docker登录
example: robot\$myname
gitlab按预期连接到docker hub。
答案 1 :(得分:0)
其中带有 $
的 Gitlab 变量可以使用双美元符号进行转义,例如robot$$pusher
。
\$
在企业版 13.6.7-ee 上对我不起作用,但据我所知,至少从社区版 11.0.3 起,双美元转义语法就已经存在了