めんどくさいからJenkinsのジョブにSVNコミットさせた話


私は怠惰です。
doma-genを使ってDaoを自動生成しているのですが、開発サーバのDBに変更が入るたびに自動生成を実施するのは人間様のやることじゃないなと思ってJenkinsおじさんにやらせましたメモ。
よしなに読み替えて、Jenkinsでいろいろなことをやらせてもいいと思います。

環境

  • 開発サーバOS:Linux
  • 構成管理:SVN
  • プロジェクト管理:maven
  • Jenkinsバージョン:2.46
  • doma-gen実行方法:antプラグイン

Jenkins設定

以下の設定をします。
1. ソースコード管理
コミット先のSVNリポジトリを指定します。

2. ビルド・トリガ
今回特にフックできるトリガがないので、日中1時間毎みたいな定義にしています。1時間毎に最新化されれば十分でした。

3. 前処理
(ローカル環境とサーバ環境でSVNバージョンが異なる場合)チェックアウトしてきた作業コピーのバージョンを合わせるために「svn upgrade」を実施します。


4. ビルド
mavenのantrunでdoma-genをキックします。

5. 後処理
本題。以下、画像につけている吹き出しの通りですが、Linuxの対話がやっかい。
こちらを参考にさせてもらいました→Linuxの対話がめんどくさい?そんな時こそ自動化だ!-expect編-

参考

コピペ用。

前処理
#!/bin/bash

# SVNのバージョンを合わせる。
cd $WORKSPACE/web
svn upgrade
後処理
#!/bin/bash

svn add ./web/src/* --force
svn status

expect -c "
set timeout 10
spawn env LANG=C /usr/bin/svn commit -m \"commit Comment\" --username \"jenkins\" --password \"password\"
expect \"(R)eject, accept (t)emporarily or accept (p)ermanently?\"
send \"p\n\"
expect \"Store password unencrypted (yes/no)?\"
send \"yes\n\"
expect \"$\"
exit 0
"

まとめ

たいしたことやってないし、シェルとかでがりがり書いたりしてもいいと思うんですけど、「SVNチェックアウトしてー、maven実行してー、コミットしてー、それをスケジューリングしてー」、とかいう細々した一連の作業を1画面でまとめてできたので、今回やりたいことをやるには一番楽でした。
ちょっとした「シェル実行フレームワーク」的なJenkinsの使い方でした。