読者です 読者をやめる 読者になる 読者になる

C4SAをGithubと連携させて、最新版コードが自動で反映されるようにする

Git php サーバ

ニフティのC4SAは、アプリケーションの開発から運用までが簡単にできる便利なクラウド環境です。
標準でGithub連携機能があるのですが、C4SA上のリポジトリにGithubにpushされた最新版コードを反映する作業を自動にしたかったので、解決方法を探してみました。

C4SAのキャンバスとGithubのリポジトリを連携させる

Git連携機能の設定をします。
f:id:kuro_m88:20130830001445p:plain

最新版コードが自動で反映されるようにする

この状態でも、Githubから最新版コードが持ってこれますが、Gitリポジトリの更新ボタンを管理画面から押さないと更新されないので、これを自動化にしてみたいと思います。

Web上に公開されるルートディレクトリ(public_html直下等)に、以下のようなスクリプトを設置します。今回は、phpで、git-pull.phpとしました。

<?php
echo nl2br(`git reset --hard; git pull`);

こうすると、http://hogehoge.c4sa.net/git-pull.php (hogehogeは各自のC4SAのサブドメインに読み替えてください)にアクセスがあると、自動でgit pullが行われます。
次に、Githubの自分のリポジトリの設定ページのService Hooksという項目を開きます。
その中のWeb Hook Urlsの項目に、http://hogehoge.c4sa.net/git-pull.phpを追加し、Update Settingsボタンを押します。
f:id:kuro_m88:20130830003145p:plain
これで、GithubにpushするとC4SAのキャンバス上で自動でgit pullされるようになりました。

ちなみに

知らない人が誰でも任意のタイミングでgit pullできるのはいい気がしないので、git-pull.phpを推測されにくい長いファイル名にするとか、何かしらの形でアクセス制限するとかするといいかもしれないです。

C4SAの管理画面のシェルを用いて開発用のキャンバスはdevelopブランチに、本番用のキャンバスはmasterブランチに切り替えておいて、上記の方法をした上でそれぞれのURLをGithubに登録しておくと、環境によって反映されるブランチが変えられてさらに便利だと思います。