mac上で、特定のGitのブランチにcommitするときに、Jenkinsを使ってテストとデプロイをしたい。ローカルのJenkinsで実現する方法をまとめる。
環境
Jenkinsのインストール
Jenkinsを使ってみよう(Mac OS X&Linux)[Ruby、Rails] - Build Insiderを参考にする。
- インストールは以下でOK
brew install jenkins
- 起動
java -jar /usr/local/opt/jenkins/libexec/jenkins.war
- 起動後、ブラウザで http://localhost:8080 に接続する
デプロイ用のジョブを作成
- Gitにデプロイ用のブランチを作成
- デプロイ用のAntのタスクを作成
- Jenkinsにジョブを作成
- httpで呼び出せるようにする
- gitのhooksフォルダ内にpost-commitのシェルスクリプトを作成
Jenkinsにジョブを作成して、httpで呼び出せるようにする
- JenkinsでAntを使えるようにする
- Jenkinsの管理>システムの設定>Ant追加
- 名前に「ant」と入力して[保存]
- 既存WebアプリケーションもJenkinsで自動デプロイしたい!(ビルド・デプロイ基礎編) - Qiitaを参考にして、AntでFTPを使えるようにする
- Apache Commons Net - Download Commons Netから、commons-netの最新版のBinariesをダウンロードして解凍
- 解凍したフォルダを適当な場所に移動
- build.xmlでreplaceを利用していて、エンコードがUTF-8の場合は文字化けすることがあるので、replaceタグにencoding='UTF-8'を追加する
- 新規ジョブの作成
- ジョブ名を入力して、[フリースタイル・プロジェクトのビルド]を選択して、[OK]をクリック
- [ビルド]項目の[ビルド手順の追加]から、[Antの呼び出し]を選択
- 使用するAntに、作成したantを選択
- ターゲットを以下のようにする(アプリケーションフォルダは/Applications/で表せる)
-lib commons-net-x.x.jarへのパス build.xmlに登録してあるデプロイ用のターゲット名
- ビルドファイルに、build.xmlへのパスをコピーして入力
- [保存]
- [ビルド実行]で動作を確認する
httpで呼び出せるようにする
- Gitプッシュ時にJenkinsで自動ビルド - Devlogを参考に設定
- セキュリティのために、プロジェクトトークンを設定する
- プロジェクト>設定>ビルド・トリガ>リモートからビルドにチェック
- 認証トークンに適当な文字列を入力
- http://localhost:8080/job/JOBNAME/build?token=設定したトークン で実行。セキュリティ未設定の場合はbuild以降の「?token=」は不要
Gitのhookを利用する
hook用のスクリプト作成
- Git - Git フックを参考に、方針を確認する。
- pre-commitを利用する。
- 0以外の値を返すとコミットを中断する。
- 「git commit --no-verify」で回避。
- git hook 引用多めのため非公開を参考にして、スクリプトを作成。
- .git/hooks 内を確認すると、ファイルが何もなかったので、pre-commitを新規に作成する。
- devtestとreleaseブランチへのコミット前に特定のタスクを実行したい場合のスクリプト例。
#! /usr/bin/env ruby current_branch = `git branch | grep '*'`.chomp.sub('* ', '') case current_branch when "devtest" then `curl http://localhost:8080/job/devtestブランチのタスク名/build` when "release" then `curl http://localhost:8080/job/releaseブランチ用のタスク名/build` end
-
- コマンドを作成したら、chmodで実行属性を設定する
chmod +x pre-commit
EGitからのコミットは使えない
- EGitはhooksに対応していないらしい(2014/11/29現在)。
- Macでは、SourceTreeなどのGitクライアントを利用してコミットする。