2009-09-28 15 views
28

Git + Heroku(Ruby on Rails)で使用するのに適したデプロイメント戦略は何ですか?ヘロクを使ったブランチ戦略を使った良いGitデプロイメントですか?

現時点では、私の起源をGitリポジトリと連携させています。すべての機能(または「ストーリー」)は、まずブランチとしてチェックアウトされ、マスターとマージされ、起点にプッシュされます。

origin/masterにプッシュされたものはすべて、新しいレールコードをステージング領域(単純なレールウェブサーバ)にプルするスクリプトをトリガします。

新しい生産バージョンをHerokuにプッシュするときは、新しいブランチ(production_version_121と呼ばれる)を作成して何とかHerokuにプッシュする必要がありますか?

理想的には、以前の開発バージョンのどの機能をプロダクションブランチに含めるかを選択してテストし、Herokuにプッシュすることをお勧めします。

たとえば、最新のコードをすべてプロダクションにプッシュしたくない場合があります。フィーチャー "a"を作っていて、 "c"というフィーチャーが何とかプロダクションにマージされ、より多くのデバッグが必要な実験的なフィーチャー "b"が含まれていなくてもいいかもしれません。

N.B.私は最初にカピストラーノを避け、手作業で何かを手に入れようとします。

思考?ベストプラクティス?

答えて

32

Gemcutterプロジェクトでは、単にproductionというブランチがあります。私たちは、生産現場で見てみたいすべての変更は、そのブランチにマージし、その後に展開されます:

git push heroku production:master 

stagingブランチは(もHerokuの上)ステージングサイトエヴァー

+0

ありがとうDavid!もし誰かがそれをやっていたら私は不思議だった。私はちょうど私のリモート "マスター"をプロダクションとして使用しています。デプロイするには、git push heroku(時が来るとき) 問題は、私が望む機能がまだありませんプロダクションデプロイメントに組み込むことを選択して選択する必要があります。その場合、リモートgitサーバーで正当な "プロダクション"ブランチを開始する必要があります。私はそれを試して次回:git push heroku production:master私はそれが不平と仮定し、herokuが追跡していたものを投げ捨てるように "force"フラグを使用する必要がありますか? – Zaqintosh

+0

私の唯一の他の質問は、何かのためにあなたのリモートマスターを使用していますか?または、ブランチで作業し、100%ブランチに/ブランチを展開/マージしますか? – Zaqintosh

+0

強制する必要があるかどうかは、「本番」が現在リモートマスタに存在するものの直系子孫であるかどうかによって決まります。 Gemcutterは、トランクとして「master」ブランチを使用します。それはすべての最新の変更が行く場所です。フィーチャーブランチが作成され、その後トランクにマージされます。個々のコミットやフィーチャーブランチがプロダクションブランチにマージされることがあります。マスターが必要な場合は、マスターが直接マージされることもあります。 –

7

これについてはさまざまな方法がありますが、実際には好みによって異なります。

私はあなたの頭の上から1つの可能性のある戦略を提供します:マスターを使用する自動ステージングセットアップを既にお持ちの場合、私は「プロダクション」ブランチを作成することをお勧めします。フィックス/フィーチャーをプロダクションにプロモートする場合は、トピックブランチを 'プロダクション'ブランチにマージします。

git checkout production 
git pull . my-topic-branch 
(resolve any conflicts) 

本番サーバに実際にプッシュそのコードへの準備ができたら、あなたは(おそらくタイムスタンプ付き)固有の名前を使って枝をtag必要があります。次に、生産拠点をHerokuにプッシュするだけです。

git checkout production 
git tag release-200910201249 

私は一貫性のある命名規則を使用することが重要であるため、タイムスタンプのためのタグ付けを自動化するスクリプトまたはgitのエイリアスを作成することをお勧めしたいです。私は、タイムスタンプ付きのリリースをタグ付けしたい場合、私はちょうどgit dtagを入力しないことを可能にする

git config alias.dtag '!git tag release-`date "+%Y%m%d%H%M"`' 

:私はこのようなものを使用します。

git tagを使用してタグを表示し、git show release-1234を使用して表示できます。タグの詳細については、git help tagを実行してください。タグ付けに役立つGithub guideもあります。また、他の人のワークフロー(ここではa nice writeup)を読んで、あなたに適したものを選んで選択することをお勧めします。

+0

返信いただきありがとうございます! タグ付けや実際の操作に慣れていません...(主に)あなたのアドバイスを理解していますが、gitコマンドを使用してプロセスの簡単な例や実行を行うとよいでしょう。 もう一度おねがいします! – Zaqintosh

+0

タグ付けのコマンドと、これまで使用していた便利なエイリアスを追加しました。これらはローカルリポジトリ用であることに注意してください。 'git push --tags'を使ってタグを別のレポにプッシュすることができます。 –

+0

それで、リリース-xxxxxxxxを(git push heroku production:master'を使って)プッシュし、それがボンクスするとします。最後に知られた良いリビジョンにどのようにロールバックしますか?つまり、どのように特定のタグをプッシュしますか? – brittohalloran

16

のための同様の目的を果たします私はVincent DriessenのA successful Git branching modelを読んだので、私は夢中になった。私の会社全体(8人)がこのモデルで標準化しました。私が相談したいくつかの場所でも、このモデルを使用し始めました。

私がそれを示したほとんどの人は、すでに似たようなことをしていて、適応するのが非常に簡単だと言います。

一言で言えば、恒久的な2つの支店(マスターと開発)があります。ほとんどの場合、開発の分岐を作り、それらを統合して開発に移すだけです。プロダクションのリリースや修正を行うときには少し複雑になりますが、ポストを数回読んだ後は彫刻されます。

git-flowというコマンドラインツールもあります。

関連する問題