在CI环境中编写"heroku login"脚本

pdo*_*926 3 continuous-integration heroku jenkins travis-ci

是否有制裁的方式来编写脚本或绕过Heroku Toolbelt的登录提示?我遇到了许多声称提供解决方案的黑客(期望,环境变量,插入环境变量在.netrc等),但我真的想找到一个稳定的解决方案.

наб*_*эли 8

从我在文档中看到的,有三种方法可以解决这个问题.

第一个是通过登录和密码(bleh)进行身份验证.知道输入格式 - 在一行登录,在另一行登录 - 我们可以catecho在以下数据:

通过安全env vars:

(
  echo "$HEROKU_CREDENTIALS_EMAIL"  # or you can plaintext it, if you're feeling adventurous
  echo "$HEROKU_CREDENTIALS_PASSWORD"
) | heroku login
Run Code Online (Sandbox Code Playgroud)

Travis CI设置屏幕显示安全环境变量

突出显示重要部分(变量名称和安全性).

或者通过加密文件:

准备.heroku_credrepo根目录中指定的文件:

pdoherty926@gmail.com
IAmPdohertyAndThisIsMyPasswordIWorkHereWithMyOldMan
Run Code Online (Sandbox Code Playgroud)

然后加密它:

travis encrypt-file .heroku_cred
Run Code Online (Sandbox Code Playgroud)

这将给你两件事:一个.heroku_cred.enc在repo root中命名的文件和一个在Travis上解密文件的命令.git add加密文件(小心不要意外地抓取未加密的文件!)并将命令添加到before_install.然后,到想要使用Heroku进行身份验证的地方添加:

cat .heroku_cred | heroku login
Run Code Online (Sandbox Code Playgroud)

现在,这种方法很糟糕有两个原因:首先,你使用的是文字密码,这很糟糕,因为如果它泄漏了你100%性交,如果你改变它,你的构建将开始虚假失败.

下一个方法是使用HEROKU_API_KEY的环境变量,这可能会"与AUTH命令的正常运转干扰",但是,这并不重要,因为你没有用其他方式验证反正.

这样做不需要更改.travis.yml,只需要一个名为HEROKU_API_KEY包含输出的安全环境变量

heroku auth:token
Run Code Online (Sandbox Code Playgroud)

跑到您的机器上(您可能已经过身份验证).

Travis CI设置屏幕显示安全的env var

突出显示重要部分(变量名称和安全性).

此方法结合了安全性(使用的OAuth令牌,可以撤销)和简单的设置.

还有第三种方式:使用~/.netrc,它将与整个生态系统合作,就好像您通过CLI使用用户名和密码进行身份验证(但您使用的是OAuth令牌,这样更好).

遵循这一步骤的步骤类似于1.2:

首先创建一个名为的文件.heroku-netrc,其中包含~/.netrc负责使用Heroku进行身份验证的部分(详细信息),如下所示:

machine api.heroku.com
  login me@example.com
  password c4cd94da15ea0544802c2cfd5ec4ead324327430
machine git.heroku.com
  login me@example.com
  password c4cd94da15ea0544802c2cfd5ec4ead324327430
Run Code Online (Sandbox Code Playgroud)

然后,要加密它,运行:

travis encrypt .heroku-netrc
Run Code Online (Sandbox Code Playgroud)

您将获得一个解密命令(将其添加到before_install).heroku-netrc.enc,您应该git add(注意不要添加未加密的.heroku-netrc).然后,将此添加到install步骤:

cat .heroku-netrc >> $HOME/.netrc
Run Code Online (Sandbox Code Playgroud)

  • 哇,这太难了。为什么`heroku auth:token <some token>` 不做繁重的工作? (2认同)
  • 第一种方法现在打开浏览器而不是从 cli 接受,您可以将 -I 添加到登录名以使其获取用户名和密码,但当我玩弄时,我无法将两者都可靠地传递给它睡眠可能会有所帮助。 (2认同)