1

Heroku 是否允许应用程序在内部git clone(例如,通过简单的 bash 脚本)本地远程存储库并推送到其他可用的远程?

我正在考虑编写一个自动(但手动触发)的 hubot 脚本

为此,在 Heroku 上,您应该能够:

  1. 运行命令(例如,git
  2. 将克隆的存储库保存在文件系统中

谢谢。

更新

根据本杰明的回答,我尝试如下,但这似乎并没有在会话之间保留文件。有任何想法吗?

$ 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 .
    .
4

1 回答 1

1

是的,这会奏效。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 自动重建密钥。

于 2013-09-05T16:00:08.517 回答