Windows7上のJenkinsとGitを連携させ、GAE開発環境からプロダクション環境へのデプロイを自動化する

アドベントカレンダー用のネタを作っている中で、個人的な環境でも「GitへCommit→GoogleAppEngineのプロダクション環境へデプロイ」を自動化するものが欲しくなりました。
調べてみるとGitのコミットフックを使えばいろいろとできそうですが、せっかくなのでローカルにあるJenkinsと連携させてみることにします。


環境

Jenkinsの設定

JenkinsへGitプラグインの導入

JenkinsにはGitプラグインを入れていなかったため、以下にあるGitプラグインを導入します (Jenkins GIT plugin)。

Jenkinsの管理 > プラグインの管理 > 利用可能 > ソース管理システム > Git Plugin
JenkinsのGitプラグインの設定

JenkinsにGitの場所を設定します。
GitHub for Windowsを利用しているため、以下のような長いパスになりました(「xxx」部分は環境による)。


Jenkinsの管理 > システムの設定 > Git > インストール済Git

Name <任意の文字列>
Path to Git executable C:\Users\<ユーザー名>\AppData\Local\GitHub\PortableGit_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\bin\git.exe
Jenkinsプロジェクトの設定

以下の内容をプロジェクトに設定します。

ソースコード管理システム Git
Repository URL <リポジトリのパス(D:\path\to\repository)>
ビルド手順の追加 Windowsバッチコマンドの実行 (コマンド入力欄には、以下の内容を記載)


Jenkinsの実行環境ではパソコンに設定してある環境変数を認識しないため、Pythonへのフルパスを記載します。
なお、--passinでGoogleアカウントのパスワードを与えるため、以下を参考にパイプを利用して設定しました。
How to Save My User Account and Password in Google App Engine Launcher? - Stack Overflow


Windowsバッチコマンド

echo <Googleアカウントのパスワード> | C:\Python27\python.exe "C:\Program Files (x86)\Google\google_appengine\appcfg.py" --passin --email=<デプロイするGoogleアカウントのメールアドレス> update <Gitリポジトリのパス>
Gitリポジトリの設定

\.git\hooksに、以下の内容を「post-commit.bat」ファイルとして保存しておきます。

python -c "import urllib;urllib.urlopen('http://localhost:<Jenkinsのポート>/job/<プロジェクト名>/build?delay=0sec')"



以上の設定により、Gitへコミットすると、Jenkinsのジョブが走りGoogleAppeEngineのプロダクション環境へデプロイされるようになります。