我正在开发一个 bash 脚本来自动克隆一些项目和开发虚拟机中的另一项任务,但我们在 Heroku 中有一个项目,存储库就在其中。在我的 .sh 文件中,我有:
> heroku login
这个提示输入凭据,我阅读了二进制文件和文档中包含的“帮助”指南,但我找不到任何自动插入用户名和密码的内容,我想要这样的东西:
> heroku login -u someUser -p mySecurePassword
是否存在类似的方式?
Heroku CLI 仅使用您的用户名和密码来检索您的 API 密钥,它将其存储在您的
~/.netrc
文件中(在 Windows 上为 %HOMEPATH%\_netrc
)。
您可以手动检索 API 密钥并将其添加到您的
~/.netrc
文件中:
登录 Heroku 网页界面
导航至您的帐户设置页面
向下滚动到API Key部分,然后单击Reveal按钮
复制您的 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
文件,您应该注意两个主要注意事项:
如果您打算使用
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>
$
运行
heroku authorizations:create
后,复制“Token”,然后运行以下命令:
set HEROKU_API_KEY=ddf4a0e5-9299-4c5f-8820-b51c52fce4f9
heroku run ls --app my-app
如果您的目标只是获取源代码,您可以使用简单的 git 客户端。您只需要 api 密钥。
使用此 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
我同意 Heroku 现在应该提供了一种使用其更高级别的 CLI 工具来执行此操作的方法。
您可以通过简单地使用 curl 和 Heroku 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.