自动化Heroku CLI登录

20

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

> heroku login

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

而这个提示要求输入凭据,在二进制和文档中的“帮助”指南中,我找不到任何自动插入用户名和密码的信息。我希望可以实现以下功能:

> heroku login -u someUser -p mySecurePassword

有类似的方法吗?


不要将Heroku用作您的代码仓库! Heroku目前允许用户从其Git界面克隆,但这是作为礼貌提供的。 Heroku不是代码存储库,它是一个平台即服务主机。 您应该使用代码仓库服务来托管您的存储库。 - Chris
哇哇,谢谢,我只是按照他们的指示操作。我有一个问题...当我运行 heroku git:clone -a myapp 命令时,这个命令是在 git 文件夹(myapp)内部吗?结果是什么?改变了 git 的 URL 吗?(对不起,我的问题可能有点多,因为文档写得太笼统了) - Cami Rodriguez
现在我有点困惑。如果您已经有一个名为 myapp 的文件夹包含您的应用程序,那么运行 heroku git:clone -a myapp 就没有意义了。您想要实现什么目标? - Chris
1
你想要实现什么目标?:我想在不需要输入电子邮件和密码的情况下登录Heroku。 - Cami Rodriguez
4个回答

27
Heroku CLI只使用您的用户名和密码来获取您的API密钥,然后将其存储在您的~/.netrc文件(Windows上为%HOMEPATH%\_netrc)中。
您可以手动获取您的API密钥并将其添加到您的~/.netrc文件中:
  1. 登录Heroku网页界面

  2. 导航到您的账户设置页面

  3. 向下滚动到API密钥部分,然后点击显示按钮

  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,请务必非常小心。

另一方面,据我所知,这是在 CI/CD 环境中使用 heroku CLI 的唯一方法。 - Marcello Romani
这对我非常有帮助,因为我没有意识到我可以直接从https://dashboard.heroku.com/account提供我的API密钥作为`heroku login`的"密码"(即使不使用.netrc,出于你所说的原因)。看起来Heroku命令行界面应该更清楚地说明这一点... - undefined

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浏览器(例如,如果您正在通过SSH在EC2盒子上工作)时如何使用Heroku CLI的问题。

$ 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

你用heroku authorizations:create生成的API密钥和https://dashboard.heroku.com/account上的API密钥有什么区别吗?例如,仪表板上的密钥是否更频繁过期? - undefined

1
我认为Heroku应该通过他们更高级的CLI工具提供一种方法来实现这一点。您可以避免极端解决方案(就像Chris在他的答案中提到的那样),只需使用curl和Heroku API即可。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.


1
如果您的目标只是获取源代码,您可以使用简单的git客户端。您只需要api密钥。
获取api密钥的步骤:
1.登录Heroku Web界面
2.导航到您的帐户设置页面
3.向下滚动到API密钥部分并单击“显示”按钮
4.复制您的API密钥
使用git下载源代码的步骤:
使用此url模板进行git克隆。
https://my_user:my_password@git.heroku.com/name_of_your_app.git

在我的情况下,用户值是我的电子邮件地址,不包括域名
Example : 
if mail is **duke@gmail.com**
user for heroku auth will be **duke**

最后,就像其他 Git 仓库一样,只需克隆即可:
git clone https://duke:my_password@git.heroku.com/name_of_your_app.git

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接