GROUPエンジニアブログです。2012年09月2012年09月27日10:14カテゴリGitブランチによるサーバ管理はじめまして。株式会社adingoのこんどう(@_zoo)と申します。今年の4月から新しいチームに配属され、チームのバージョン管理やリリースプロセスの整備をやっています。今回の記事ではリリースプロセスの課題解決について、チームで取り組んだ時に出てきたGitブランチの活用方法についてご紹介させていただきます。広告サービスの事例まず、簡略ですが環境毎のサーバ構成をご紹介します。DBやその他諸々のサーバも省略し、Webサーバとビルドサーバのみ記載しています。システム的な構成の紹介はざっくりこれだけにしておきます。システム構成図ではサーバ台数は一台ですがサーバが数十台に増えた時のことも考えました。1台2台のうちはいいけれど、台数が増えてくると各サーバの状態を確認という声もありました。数十台のサーバを運用している方からの意見だったので、かなり実感がこもっていました。それなら、下の図のようなものが有ればいいよね、というお話になりました。どこかで見たような図の気がします。お気づきの方もいるかもしれませんが、GitHubのNetwork図にちょっと似ています。(手書きで汚いのはご容赦を)GitHubだと、どのブランチがどのコミットを示しているかNetwork図で確認できます。各サーバの状態を示すブランチがあれば、下の図のようにNetwork図を見れば一目でサーバの状態がわかります。これは見やすい!ということで、サーバの状態を指し示すブランチの作成をすることなりました。チームで色々と議論した結果として、運用するブランチは2種類、常にあるブランチと必要になったら作成するブランチ、という形になりました。常に存在するブランチmasterdevweb-devpreweb-preproductionweb必要になったら作成するブランチt12345_rename_infotitle気づいた方もいると思いますが、常に存在するブランチがやたらと多いです。このやたらと多いブランチのそれぞれの役割を説明します。masterブランチプロダクトコードを扱うブランチ、継続的デリバリーでいうところの”商品”を指し示すブランチ。devブランチ開発環境にてビルド・デプロイ・テストが終了している状態を指し示すブランチ。web-devブランチ開発機の状態を指し示すブランチ。preブランチプレ環境にてビルド・デプロイ・テストが終了している状態を指し示すブランチ。web-preブランチプレ機の状態を指し示すブランチ。productionブランチ本番環境にてビルド・デプロイ・テストが終了している状態を指し示すブランチ。webブランチ本番機の状態を指し示すブランチ。tXXXXXブランチRedmineの作業チケットと紐づけられたチケットブランチ。次に、これらのブランチの取り扱い方です。実のところ開発者が直接コミットを行うのは、masterブランチとチケットブランチのみです。他のブランチはどうやってコミットを取り込んでいるかというと、たとえば開発環境への取り込みは下のような流れになっています。本番機の反映までは、下のような流れです。基本は同じことの繰り返しです。--hard)補足すると、最初に話した各サーバのブランチとは別に、各環境でテストが終了したコミットを取り込みブランチを作成することになりました。これはサーバが複数台あった場合に、プレには開発でテストされたものしか反映されない、本番にはプレでテストされたものしか反映されない、といった仕組みを実現するためにできたものです。結論をいうと、各サーバの状態がNetwork図を見れば一目でわかるようになりました。statusとか打たなくていい!ということで、Gitのブランチによるサーバ管理について紹介させていただきました。