GitHub Enterpriseの運用体制
GHEは、GitHubをオンプレミスな環境で利用できるようにしたプロダクトです。 クラウドサービスではなく、VMware[4]またはVirtualBox[5]上で動作するイメージとして提供されるため、GHEを安定稼働させるためには運用し続けるための体制が重要となります。
Ameba事業本部では、全ての開発プロジェクトを横断的に支援する部署Ameba Dev. CenterがGHEを運用しています。 定期的なバージョンアップ、障害対応、アカウント管理、Organization管理など、安定稼働に必要な作業を一手に引き受けてくれています。 また、快適に利用できるように、次のような運用ルールも取り決めています。
- プロジェクトリソースのバージョン管理以外の用途は禁止(バックアップ、DBのダンプ保存、パッケージやコンパイル後のコード保存)
- 大きなメディアファイルやPhotoshopファイル(.psd)の登録は禁止[6]
- リポジトリは最大1GBを目安にする[7]
- プロジェクトに関わるものは全てOrganizationを利用
こうした取り決めの下でGHEを利用することで、安定運用を続けることができています。
また、Ameba Dev. CenterではJIRA[8]やHipchat[9]など、システム開発に必要な様々なツールを提供しており、GHEとの連携もサポートしてくれています。 至れり尽くせりで非常にありがたいです!
[6] これらのファイルは共有ディレクトリやSVNを推奨しています。
[7] 1GBを超えるとパフォーマンスにも影響があります(GitHub Help「What is my disk quota?」を参照)。
[8] 米Atlassianが提供している課題・プロジェクト管理ツール。
リポジトリの利用方法
Gitリポジトリの利用方法は、プロジェクトの内容や特性によって異なってきます。 ここでは社内のプロジェクトを例に、リポジトリ管理の対象や採用している開発フローについて説明します。
リポジトリ管理対象
多くのプロジェクトでは、次のような対象をリポジトリ管理しています。
Webサービスやネイティブアプリ、ライブラリなどのソースコード管理
これらは、後述する開発フローを利用しているケースがほとんどです。
管理画面、Jenkins[10]、バッチなどで利用しているスクリプトファイル
これらも運用に合わせて頻繁に変更されるため、リポジトリ管理しています。
開発環境や本番環境などの、環境別の設定ファイル
ソースコードと分離することで、開発フローと関係なく設定を任意のタイミングで変更できるメリットがあります。パスワードやシークレットキーなど、セキュリティ上考慮が必要な情報に関しては、リポジトリ管理からは除外しているケースもあります。
公開用コンテンツ管理(画像や音声ファイルなど)
そのまま公開可能なコンテンツをリポジトリ管理しています。Illustrator(.ai)やPhotoshop(.psd)などの作業中のファイルは、リポジトリの容量がすぐに肥大化してしまうため、Git上ではあまり管理していません。
プロジェクトの設計資料
一部のプロジェクトでは、設計資料などもMarkdown[11]などのテキスト形式でリポジトリ管理しています。バイナリファイルは競合すると綺麗なマージができませんので、テキスト形式のファイル以外は無理にリポジトリ管理せず、共有ディレクトリなどを利用しているケースも多いです。
Chef[12]リポジトリ
プロジェクトごとのChefリポジトリや、インフラチームが構築している共通Chefリポジトリなどがあります。
Jenkinsジョブ
Jenkinsのジョブも運用に合わせて変更することがありますので、バックアップに近い位置付けでリポジトリ管理しています。
もちろん、ここで挙げた以外にも、リポジトリ管理している対象はたくさんあります。
[10] OSSの継続的インテグレーション(CI)ツール。
[11] 文書を記述するための簡易マークアップ言語。GitHubのReadmeファイルでも利用されています。
[12] 米chefが提供しているインフラ環境の構成管理ツール。