我正在尝试将映像从GitLab注册表推送到Heroku映像注册表,但无法登录GitLab ci。
首先,我能够在本地成功登录。我一直在遵循这个指南-https://devcenter.heroku.com/articles/container-registry-and-runtime#logging-在注册表中。登录成功:
docker login --username=_ --password=$HEROKU_API_KEY registry.heroku.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/dave/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
当我试图在我的gitlab-ci.yml文件中做同样的事情时,我收到了尝试这两个选项的错误消息:
script:
- docker login --username=_ --password=$HEROKU_API_KEY registry.heroku.com
或
script:
- echo $HEROKU_API_KEY | docker login --username=_ --password-stdin registry.heroku.com
错误消息:
Error: Cannot perform an interactive login from a non TTY device
Cleaning up project directory and file based variables
00:00
ERROR: Job failed: exit code 1
我应该使用其他方法通过gitlab ci登录Heroku图像注册表吗?
更新:HEROKU_API_KEY环境变量设置正确。它没有被屏蔽,没有受到保护,并且在所有环境中都可用。我以前甚至可以将它与另一个命令一起使用来进行部署,但这次我必须部署一个docker容器。使用的另一个命令:
- dpl --provider=heroku --app=my-app --api-key=$HEROKU_SECRET_KEY
话虽如此,我仍然需要一个解决方案来将容器从Gitlab注册表部署到Heroku注册表,但docker登录失败。
此问题源于ci中未配置或不可用的环境变量HEROKU_API_KEY
。
我认识到了这个问题,因为我遇到了完全相同的情况
错误消息显示";交互式登录不可能";因为它在stdin中接收到一个空输入。通常这是在shell中运行的,您可以手动填写密码,所以docker假设这是您想要做的,但是由于stdin关闭,它无法获取密码。好吧,这只是对你收到的信息的解释。
至于变量不可用的实际原因,有几种可能性:
- 也许您还没有在项目设置中配置变量
为此,请转到您的设置、CI部分、变量,然后输入带有名称和值的变量 - 也许变量是受保护的,而您正试图在无法使用受保护变量的管道中使用它。在这种情况下,您可以取消选中";"受保护";变量的状态,在与上述相同的菜单中
或者,您可以检查是否希望保留受保护的变量,但在可以使用受保护变量的设置中切换为仅使用该变量