Heroku是否允许内部的应用程序git clone
(例如,通过一个简单的bash脚本)本地远程存储库并推送到其他可用的远程数据库?
我正在考虑编写一个自动(但手动触发)hubot script。
要做到这一点,在Heroku上,您应该能够:
git
)感谢。
更新
基于Benjamin’s answer,我尝试如下,但即使在会话之间,这似乎也不会保留文件。有什么想法吗?
$ heroku create
Creating obscure-river-7652... done, stack is cedar
http://obscure-river-7652.herokuapp.com/ | git@heroku.com:obscure-river-7652.git
$ heroku run --app obscure-river-7652 bash
Running `bash` attached to terminal... up, run.4427
$ find .
.
$ mkdir -p foobar
$ touch foobar/README
$ find .
.
./foobar
./foobar/README
$ exit
$ heroku run --app obscure-river-7652 bash
Running `bash` attached to terminal... up, run.5463
$ find .
.
答案 0 :(得分:1)
是的,那会有效。 Heroku有一个ephemeral writable filesystem,它允许你从dyno写入数据。但是,当您重新启动dyno或启动新数据时,数据将会消失(因为它是短暂的)。但是,如果你同时拉动和推动,它就不会成为问题。
可能存在的一个问题是设置权限。如果您希望dyno能够访问私有存储库,则必须在Heroku上设置私钥或用户名和密码。
一种方法是使用GitHub deploy keys。设置部署密钥以在Heroku应用程序上使用,并使用私钥设置heroku config:set PRIVATE_KEY=ABCD123...
之类的内容。部署密钥也必须出现在您部署到的任何服务器上。这可以在您的Heroku account或服务器上的~/.ssh/authorized_keys
中。
然后,有两种方法可以将此密钥放入正在运行的Hubot实例中。
在您的应用运行之前,请使用初始化程序或其他启动脚本将$PRIVATE_KEY
中的数据放入~/.ssh/id_rsa
。这可以通过自定义Hubot插件完成,我将研究如何完成。
对于更高级的设置,您可以使用自定义buildpack在编译期间使用user-env-compile功能,multi buildpack buildpack和inline buildpack将密钥复制到ssh目录中。
启用user-env-compile。
heroku labs:enable user-env-compile
配置您的应用以使用多个buildpack。
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 / detect
中echo 'custom'
在bin / compile
中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时,多buildpack将运行内联buildpack。内联buildpack将从bin/{compile,detect,release}
运行您的自定义buildpack。此自定义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时自动重建密钥。