多数の開発者の方に使ってもらう git の共有リポジトリを Amazon Linux 上に作成して、そのリポジトリの内容をステージング環境 (Apache+PHP) に自動で反映するようにした時のメモ。
この記事のやりたい構成と前提事項はこんな感じです。
セキュリティ的に少々緩めな点が有るので気を付けてください。
- 開発者はリポジトリを作る Amazon Linux にて他の作業も行う為、OS ユーザーとしてアカウントを追加していきます。シェルも bash 利用を許可しています。
(未確認ですが、たぶんシェルを git-shell にすればサーバーにログインはできないけど、リモートから git の利用をできるユーザーは作成できるはず…) - ステージング環境は /var/www/html に既に出来上がってて、git による管理対象のソースも既に置いてある状態です。
- ステージング環境の権限の関係で、sudo による git コマンド実行許可を追加しています。同じ事するならそこは要 root です。
ステージング環境への反映は、共有リポジトリの hook スクリプトを用いて実現します。
公式サイトのドキュメント がしっかりしててステキでした。このドキュメントしっかり読めばこちらの記事の内容はほぼ網羅できます。
グループの追加
共有リポジトリにアクセスするユーザーが所属する、dev グループを OS に追加します。
groupadd -g 1000 dev
ユーザーの追加、またはグループへの追加
上記で追加したグループに所属するユーザーを追加します。
usermod -G 1000 hoge
リポジトリ作成
共有のリポジトリを /var/repos/yskw.git として作成します。
dev グループのユーザーで共有できるように chown もしておきます。
cd /var mkdir -p repos/yskw.git cd /var/repos/yskw.git git init --bare --shared chgrp -R dev /var/repos/yskw.git
ステージング環境のリポジトリ化
ステージング環境 ( /var/www/html ) をローカルリポジトリとして初期化し、ファイル登録を行います。
cd /var/www/html git init --shared git add . git commit -m "Initial commit"
こちらも dev グループのユーザーが書き込みできるように権限を調整します。
chgrp -R dev /var/www/html chmod -R g+w /var/www/html
共用リポジトリを origin の名前で登録しておきます。
cd /var/www/html git remote add origin /var/repos/yskw.git
共用リポジトリに push
ステージング環境のファイルを共有リポジトリに登録します。
git push -u origin master
共有リポジトリからデータ取得してみる
任意のディレクトリに共有リポジトリから clone してみます。
ステージング環境と同じ環境ができる事を確認しておきます。
cd ~ git clone /var/repos/yskw.git
共有リポジトリとステージング環境の同期設定
記事冒頭に書いた通り、共有リポジトリの hook スクリプトで実現します。
具体的には、リポジトリに push された後に実行される post-receive スクリプトを設置します。
cd /var/repos/yskw.git/hooks vi post-receive # 新規作成
post-receive の内容はこんな感じ。
#!/bin/sh cd /var/www/html/business sudo /usr/bin/git --git-dir=.git pull origin master
作成したスクリプトの権限を調整。
chmod +x post-receive chmod g+w post-receive
sudo の設定
フック時の git pull を root 権限で実行させる必要が有った為、sudo の設定を行います。
visudo -f /etc/sudoers.d/git-command # 新規作成
dev グループのユーザーが root 権限で git pull をできるように設定を記述します。
## Git commands Cmnd_Alias GIT_PULL = /usr/bin/git --git-dir=.git pull origin master %dev ALL=(root) NOPASSWD: GIT_PULL
まとめ
hook スクリプトとそれにまつわる sudo の設定ができれば、後は公式ドキュメント通りなので結構簡単でした。
公式ドキュメントはそんなに量も無いし、何よりしっかり日本語なので、一通り目を通すことをオススメしておきます。