我正在开发一个bash脚本来自动克隆开发虚拟机中的一些项目和另一个任务,但我们在Heroku中有一个项目,并且存储库在其中。在我的.sh文件中,我有:
> heroku login
这个输入凭据的提示,我阅读了二进制文件和文档中包含的"帮助"指南,但我找不到任何自动插入用户名和密码的内容,我想要这样的东西:
> heroku login -u someUser -p mySecurePassword
存在任何类似方式吗?
Heroku CLI 仅使用您的用户名和密码来检索您的 API 密钥,该密钥存储在您的~/.netrc
文件中(在 Windows 上$HOME_netrc
)。
您可以手动检索 API 密钥并将其添加到~/.netrc
文件中:
- 登录 Heroku 网页界面
- 导航到"帐户设置"页面
- 向下滚动到API 密钥部分,然后单击显示按钮
- 复制您的 API 密钥
- 打开您的
~/.netrc
文件,或使用您喜欢的文本编辑器创建它 -
添加以下内容:
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
文件,则应注意两个主要注意事项:
- 此文件由许多其他程序使用;请注意仅复制所需的配置节。
- 您的 API 密钥提供对帐户的完全编程访问权限。您应该像保护密码一样强烈地保护它。
如果您打算使用除heroku login
以外的任何机制登录 Heroku,请非常小心。
您可以生成未过期的 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
后,复制"令牌",然后运行以下命令:
set HEROKU_API_KEY=ddf4a0e5-9299-4c5f-8820-b51c52fce4f9
heroku run ls --app my-app
如果你的目标只是获取源代码,你可以使用一个简单的 git 客户端。你只需要api 密钥。
获取 api 密钥的步骤
- 登录 Heroku 网页界面
- 导航到"帐户设置"页面
- 向下滚动到 API 密钥部分,然后单击显示按钮
- 复制您的 API 密钥
使用 git 下载源代码
将此网址模板用于 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
我同意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.