アドベントカレンダー用のネタを作っている中で、個人的な環境でも「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リポジトリの設定
python -c "import urllib;urllib.urlopen('http://localhost:<Jenkinsのポート>/job/<プロジェクト名>/build?delay=0sec')"
以上の設定により、Gitへコミットすると、Jenkinsのジョブが走りGoogleAppeEngineのプロダクション環境へデプロイされるようになります。