自动化 Heroku CLI 登录

问题描述 投票:0回答:4

我正在开发一个 bash 脚本来自动克隆一些项目和开发虚拟机中的另一项任务,但我们在 Heroku 中有一个项目,存储库就在其中。在我的 .sh 文件中,我有:

> heroku login

这个提示输入凭据,我阅读了二进制文件和文档中包含的“帮助”指南,但我找不到任何自动插入用户名和密码的内容,我想要这样的东西:

> heroku login -u someUser -p mySecurePassword

是否存在类似的方式?

bash heroku command-line-interface
4个回答
25
投票

Heroku CLI 仅使用您的用户名和密码来检索您的 API 密钥,它将其存储在您的

~/.netrc
文件中(在 Windows 上为
%HOMEPATH%\_netrc
)。

您可以手动检索 API 密钥并将其添加到您的

~/.netrc
文件中:

  1. 登录 Heroku 网页界面

  2. 导航至您的帐户设置页面

  3. 向下滚动到API Key部分,然后单击Reveal按钮

  4. 复制您的 API 密钥

  5. 使用您最喜欢的文本编辑器打开或创建

    ~/.netrc
    文件

  6. 添加以下内容:

     machine api.heroku.com
       login <your-email@address>
       password <your-api-key>
     machine git.heroku.com
       login <your-email@address>
       password <your-api-key>
    

    <your-email@address>
    替换为在 Heroku 中注册的电子邮件地址,并将
    <your-api-key>
    替换为您从 Heroku 复制的 API 密钥。

这应该手动完成

heroku login
自动执行的操作。 但是,我不建议这样做。 跑步
heroku login
更容易完成同样的事情,并且犯错误的机会更少。

如果您决定在计算机或帐户之间复制

~/.netrc
文件,您应该注意两个主要注意事项:

如果您打算使用

heroku login
以外的任何机制登录 Heroku,请务必小心。


13
投票

您可以生成一个不过期的 OAuth 令牌,然后通过环境变量将其传递给 CLI。如果您需要从调度程序无限期地运行 Heroku CLI 命令并且不希望登录过期,这非常有用。这样做(顺便说一句,这些不是实际的令牌和 ID):

$ heroku authorizations:create
Creating OAuth Authorization... done
Client:      <none>
ID:          80fad839-876b-4ea0-a41e-6a9a2fb0cf97
Description: Long-lived user authorization
Scope:       global
Token:       ddf4a0e5-9294-4c5f-8820-b51c52fce4f9
Updated at:  Fri Aug 02 2019 21:26:09 GMT+0100 (British Summer Time) (less than a minute ago)

从该授权中获取令牌(不是 ID)并将其传递给您的 CLI:

$ HEROKU_API_KEY='ddf4a0e5-9294-4c5f-8820-b51c52fce4f9' heroku run ls --app my-app
Running ls on ⬢ my-app... up, run.2962 (Hobby)
<some file names>
$

顺便说一句,这也解决了当您在 Heroku 帐户上启用了 MFA 但您的计算机没有 Web 浏览器时如何使用 Heroku CLI 的问题,例如,如果您通过 SSH 在 EC2 盒子上工作:

$ heroku run ls --app my-app
heroku: Press any key to open up the browser to login or q to exit:
 ›   Error: quit
$ HEROKU_API_KEY='ddf4a0e5-9299-4c5f-8820-b51c52fce4f9' heroku run ls --app my-app
Running ls on ⬢ my-app... up, run.5029 (Hobby)
<some file names>
$

编辑:对于 Windows 机器

运行

heroku authorizations:create
后,复制“Token”,然后运行以下命令:

set HEROKU_API_KEY=ddf4a0e5-9299-4c5f-8820-b51c52fce4f9
heroku run ls --app my-app

1
投票

如果您的目标只是获取源代码,您可以使用简单的 git 客户端。您只需要 api 密钥

获取API密钥的步骤

  • 登录 Heroku 网页界面
  • 导航至您的帐户设置页面
  • 向下滚动到 API 密钥部分,然后单击“显示”按钮
  • 复制您的 API 密钥

使用git下载源代码

使用此 url 模板进行 git 克隆

https://my_user:[email protected]/name_of_your_app.git

在我的例子中,user值是我的电子邮件,没有domain

Example : 
if mail is **[email protected]**
user for heroku auth will be **duke**

最后就像任何其他 git 存储库一样克隆它:

git clone https://duke:[email protected]/name_of_your_app.git

1
投票

我同意 Heroku 现在应该提供了一种使用其更高级别的 CLI 工具来执行此操作的方法。

您可以通过简单地使用 curlHeroku API 来避免极端的解决方案(而且您应该这样做,就像 Chris 在他的 answer 中提到的那样)。 Heroku 允许您使用 API 令牌(可通过 Heroku 仪表板上的用户设置/个人资料页面获取)。

然后,您可以使用 API 来实现您想要使用命令行工具执行的任何操作。

例如,如果我想获取应用程序的所有配置变量,我会编写一个执行如下操作的脚本:

-H "Accept: application/vnd.heroku+json; version=3" \
-H "Authorization: Bearer YOUR_TOKEN```

If *YOUR_APP_NAME* had only one config variable called *my_var* the response of the above call would be 

    { 
        "my_var": some_value
    }

I've found using this all the time in CI tools that need access to *Heroku* information / resources.

© www.soinside.com 2019 - 2024. All rights reserved.