1

Heroku は、アプリが内部的にgit clone(単純な bash スクリプトを介して) ローカルのリモート リポジトリにアクセスし、利用可能な他のリモートにプッシュすることを許可していますか?

自動化された(ただし手動でトリガーされた)hubotスクリプトを作成することを考えています。

これを行うには、Heroku で次のことができる必要があります。

  1. コマンドの実行 (例: git)
  2. クローンしたリポジトリをファイルシステムに保存

ありがとう。

アップデート

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

1 に答える 1

1

はい、うまくいきます。Heroku には一時的な書き込み可能なファイルシステムがあり、dyno からデータを書き込むことができます。ただし、dyno を再起動するか、新しい dyno を開始すると、データは失われます (一時的なものであるため)。ただし、引っ張ると同時に押す場合は問題ありません。

問題になる可能性があることの 1 つは、アクセス許可の設定です。dyno がプライベート リポジトリにアクセスできるようにする場合は、Heroku でプライベート キーまたはユーザー名とパスワードを設定する必要があります。

1 つの方法は、GitHub デプロイ キーを使用することです。Heroku アプリで使用するデプロイ キーをセットアップheroku config:set PRIVATE_KEY=ABCD123...し、秘密鍵などを設定します。デプロイ キーは、デプロイ先のサーバーにも存在する必要があります。これは、Heroku アカウントまたは~/.ssh/authorized_keysサーバー上にある可能性があります。

次に、このキーを実行中の Hubot インスタンスに取得する方法が 2 つあります。

~/.ssh/id_rsa を初期化子で作成する

アプリを実行する前に、初期化子またはその他の起動スクリプトを使用してからデータを$PRIVATE_KEY入れます。~/.ssh/id_rsaこれはおそらく、カスタムの Hubot プラグインを使用して実行できます。その方法を検討します。

カスタム ビルドパックを使用してビルド時に ~/.ssh/id_rsa を作成する

より高度なセットアップの場合、カスタム ビルドパックを使用して、 user-env-compile機能、マルチ ビルドパック ビルドパック、およびインライン ビルドパックを使用したコンパイル中にキーを ssh ディレクトリにコピーできます。

user-env-compile を有効にします。

heroku labs:enable user-env-compile

multi buildpack を使用するようにアプリを構成します。

heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git

インライン ビルドパックと元のビルドパックを に追加します.buildpacks

cat > .buildpacks << BUILDPACKS
https://github.com/kr/heroku-buildpack-inline.git
https://github.com/heroku/heroku-buildpack-nodejs.git
BUILDPACK

最後に、カスタム ビルドパックのスクリプトを作成します。

ビン/リリースでは、

echo '--- {}'

ビン内/検出

echo 'custom'

ビン/コンパイルで

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 にプッシュされると、マルチ ビルドパックがインライン ビルドパックを実行するようになります。インライン ビルドパックは、カスタム ビルドパックを から実行しますbin/{compile,detect,release}。このカスタム ビルドパックは、$PRIVATE_KEY環境変数をコピーし~/.ssh/id_rsaて公開鍵を生成します。$PRIVATE_KEYuser-env-compile 機能がオンになっているため、使用できます。最後に、マルチ ビルドパックが元の Node.js ビルドパックを実行し、すべてがスムーズに実行されるはずです。

注意事項

この 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 に答える