在CI环境中编写“heroku login”脚本

时间:2016-09-18 06:10:50

标签: heroku jenkins continuous-integration travis-ci

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

1 个答案:

答案 0 :(得分:5)

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

方法1:通过CLI登录

第一个是authenticate via Login&Password(bleh)。知道输入格式 - 在一行登录,在另一行登录 - 我们可以catecho中的数据:

通过安全env vars:

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

Travis CI settings screen showing secure env vars

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

或通过加密文件:

在repo root中准备一个名为.heroku_cred的文件:

pdoherty926@gmail.com
IAmPdohertyAndThisIsMyPasswordIWorkHereWithMyOldMan

然后加密它:

travis encrypt-file .heroku_cred

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

cat .heroku_cred | heroku login

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

方法2:环境变量

下一种方法是使用the HEROKU_API_KEY env var,这可能会干扰auth命令的正常运行,但这并不重要,因为您没有进行身份验证反正其他方式。

执行此操作不需要更改.travis.yml,只需要包含

输出的名为HEROKU_API_KEY的安全环境变量
heroku auth:token

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

Travis CI settings screen showing secure env var

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

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

方法3:直接写入令牌存储文件

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

此步骤的步骤类似于1.2:

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

machine api.heroku.com
  login me@example.com
  password c4cd94da15ea0544802c2cfd5ec4ead324327430
machine git.heroku.com
  login me@example.com
  password c4cd94da15ea0544802c2cfd5ec4ead324327430

然后,要加密它,请运行:

travis encrypt .heroku-netrc

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

cat .heroku-netrc >> $HOME/.netrc