GitHubは、エンジニアにとっては当たり前のサービスですが、CIツールで自動化も敷居が高いものです。 ここでは Gitの一連の流れ(commit > pushu > pull)を検証すべく 独自サーバー上にレポジトリを作成し、サーバー側でフックしてpost-script-mail および pullの自動化を検証してみることにします。
- sshの設定
- サーバー上に独自レポジトリーを作成
- [独自レポジトリ.git]/hooks/post-receive-emailの内容を検証
- 本番サイトへのpullの検証
sshの設定
ローカルホスト側での設定
$ vi ~/.ssh/config
HOST [git名] // 例) sample_git_host
Hostname gitserver.sample.com
Port 22
user sampleuser
IdentityFile /path/to/xxxx.key
$ chmod 600 .ssh/config
鍵ペアーの作成およびリモートホストに公開鍵をコピーする
$ ssh-keygen -t rsa // キーペアの作成
// ssh-copy-id, scp 等を利用してリモートホストに公開鍵をコピーする
// ex. ssh-copy-id -i /path/to/keyfile.pub user@host1
sshのログインに鍵による認証を行うように/etc/ssh/sshd_configを編集
注:設定するとキー入力以外ではログインできなくなるので 確実に鍵方式でログインを確認後に設定する。初めから認証鍵のみで提供のプロバイダーもあります。その場合は無視してください。
サーバー上に独自レポジトリーを作成
デフォルトのpost-receive-email確認およびシンボリックリンク
git configにパラメータ設定
hooks.mailinglist | push 時の送信先メールアドレス |
hooks. announcelist | git tag 作成時の送信先メールアドレス |
hooks.envelopesender | 送信元メールアドレス |
hooks.emailprefix | メールの件名の先頭につく文字列(default は [SCM]) |
hooks.showrev | メールにcommit差分(diff)を追加 |
Configの内容(原文 ソースコードより)
自動的に本番サイトに git pull
post-receive-email の main部分最終行に git pull を追加$ vi /usr/share/git-core/contrib/hooks/post-receive-email
以上で ローカルの開発環境で push するとメールが送信されデプロイ(git pullにて)されます。
実際のpushテストで届いたメールの一部分
git log や diff も記載されています。
実際の運用には定番の「Jenkins」等のCIツールを利用すると思いますが、今回はあくまでも hooksの検証とします。