heroku CLI 通过令牌进行身份验证
Posted
技术标签:
【中文标题】heroku CLI 通过令牌进行身份验证【英文标题】:heroku CLI auth by token 【发布时间】:2020-07-17 03:56:58 【问题描述】:每次从 Gitlab 注册表构建 docker 映像并将其推送到 Heroku 注册表后,我都需要执行 heroku container:release web
到 Heroku 运行映像(发布),但我想自动执行此操作
我将 heroku CLI 工具安装添加到 gitlab-ci-yml
,但我无法通过令牌验证 heroku CLI
当我尝试设置 HEROKU_API_KEY=token 并运行 heroku login
时出现错误 Error: Cannot log in with HEROKU_API_KEY set
还尝试使用 HEROKU_DEBUG 执行此操作,但调试器信息无法帮助我
我不能使用~/.netrc
有什么方法可以验证 heroku CLI 或自动在 heroku 中发布 docker 映像?
当前 gitlab-ci.yml:
before_script:
- apt install snapd
- snap install --classic heroku
- HEROKU_API_KEY=$HEROKU_API_TOKEN heroku login
- docker login -u $REGISTRY_UNAME -p $REGISTRY_PWD registry.gitlab.com
- docker login --username=_ --password=$HEROKU_PWD registry.heroku.com
script:
# a lot of tag & push lines
- heroku container:release web
【问题讨论】:
我可能遗漏了一些东西。如果您已经设置了 API 密钥,为什么还要登录? 【参考方案1】:如果您设置了HEROKU_API_KEY
环境变量,则不必再次登录。 API 密钥将用于 Heroku CLI 命令(如果存在)。
确保使用heroku authorizations:create
创建永不过期的令牌。查看this 了解详细说明。
参考:https://github.com/heroku/cli/issues/502#issuecomment-309099883
请注意,git
等 git push heroku master
命令不会使用 API 密钥。请参阅this 了解更多信息。
【讨论】:
不,我不使用 heroku 的 git。我只是在 gitlab CI 中构建我的图像,然后 gitlab 的 CI 将它交付给 heroku。但是在我执行heroku container:release web
之前,heroku 不会开始运行图像。我为身份验证创建了 heroku 令牌,但 gitlab 的运行器无法在 heroku 中进行身份验证(执行heroku container:release web
),错误为Error: Cannot log in with HEROKU_API_KEY set
@sula 正如我在回答中提到的,如果您已经拥有 API 密钥,则无需执行 heroku login
。
尝试运行 HEROKU_API_KEY=never-expiring-token heroku container:release web
时遇到错误:提供的凭据无效。错误:无法使用 HEROKU_API_KEY 设置登录 命令失败:heroku 登录。尝试运行 export HEROKU_API_KEY=never-expiring-token
然后 heroku container:release web
得到同样的错误。也尝试使用永不过期的令牌并得到相同的错误【参考方案2】:
通过更改导致令牌更改和重新创建新令牌的帐户密码解决了问题
然后再次运行HEROKU_API_KEY=token heroku container:release web
成功
【讨论】:
以上是关于heroku CLI 通过令牌进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章
通过令牌进行身份验证,如果令牌失败,则通过会话进行身份验证,使用 Passport?
JWT 身份验证:使用 UI 令牌对 Graphene/Django (GraphQL) 查询进行身份验证?