是的,这会奏效。Heroku 有一个临时可写文件系统,它允许您从测功机写入数据。但是,当您重新启动测功机或启动新的测功机时,数据将消失(因为它是短暂的)。但是,如果你同时拉和推,那将不是问题。
可能有问题的一件事是设置您的权限。如果您希望 dyno 能够访问私有存储库,则必须在 Heroku 上设置您的私钥或用户名和密码。
一种方法是使用GitHub 部署密钥。设置一个部署密钥以在 Heroku 应用程序上使用,并设置类似于heroku config:set PRIVATE_KEY=ABCD123...
私钥的内容。部署密钥也必须存在于您要部署到的任何服务器上。这可能在您的Heroku 帐户中,或者在~/.ssh/authorized_keys
服务器上。
然后,有两种方法可以将此密钥放入正在运行的 Hubot 实例中。
使用初始化程序创建 ~/.ssh/id_rsa
在您的应用程序运行之前,将数据$PRIVATE_KEY
从~/.ssh/id_rsa
在您的应用程序运行之前,使用初始化程序或其他一些启动脚本这可能可以通过自定义 Hubot 插件来完成,我将研究如何完成。
在构建时使用自定义构建包创建 ~/.ssh/id_rsa
对于更高级的设置,您可以使用自定义 buildpack 在编译期间使用user-env-compile功能、多 buildpack buildpack 和内联 buildpack将密钥复制到 ssh 目录中。
启用用户环境编译。
heroku labs:enable user-env-compile
配置您的应用程序以使用多构建包。
heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
将内联 buildpack 和您的原始 buildpack 添加到.buildpacks
.
cat > .buildpacks << BUILDPACKS
https://github.com/kr/heroku-buildpack-inline.git
https://github.com/heroku/heroku-buildpack-nodejs.git
BUILDPACK
最后,为自定义 buildpack 创建脚本。
在 bin/release 中,
echo '--- {}'
在 bin/检测
echo 'custom'
在 bin/编译
mkdir ~/.ssh
chmod 700 ~/.ssh/
cat > ~/.ssh/id_rsa << KEY
-----BEGIN RSA PRIVATE KEY-----
$PRIVATE_KEY
-----END RSA PRIVATE KEY-----
KEY
chmod 400 ~/.ssh/id_rsa
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
现在发生的情况是,当您的应用程序被推送到 Heroku 时,multi buildpack 将运行内联 buildpack。内联 buildpack 将从bin/{compile,detect,release}
. 此自定义 buildpack 将$PRIVATE_KEY
环境变量复制到~/.ssh/id_rsa
并生成公钥。$PRIVATE_KEY
可用,因为 user-env-compile 功能已打开。最后,multi buildpack 运行原始的 Node.js buildpack,一切都应该顺利运行。
注意事项
如果您使用此 buildpack 方法,使用 更新您的私钥heroku config:set PRIVATE_KEY=mynewkey
,您的应用程序将重新启动,但不会重新构建。您将需要推送一个空提交,如下所示:
git commit -m "Rebuild private key." --allow-empty && git push heroku master
或者等到下一次部署 Heroku 自动重建密钥。