すごくない仕事もできるJenkins

[Jenkins CI Advent Calendar 2013](http://qiita.com/advent-calendar/2013/jenkinsci) 13日目の記事です。
前回は[kensei_kick](http://qiita.com/kensei_kick)さんの[Jenkinsとgithub連携時のパスワード問題](http://firespeed.org/diary.php?diary=kensei-351)でした。

## JenkinsはCIサーバーですが、製品のビルド以外でも働いてくれます。

CIサーバーとしてビルドしテストし各種メトリクスを測定してグラフ化してたりするJenkinsですが、しょぼい作業もちゃんとたのむとしてくれます。

私の場合は Windows を使用しているので、しょぼい作業のバッチファイルを書いてそれを呼ぶだけです。副作用として作業忘れがなくなります。
Jenkinsをすごいことに使わなくてもいいので、みんなも地味な作業ガンガンJenkinsにたのんでのんびり仕事しましょう。

## 作業依頼手順
1. 定期的に行うものは定期的に実行するにスケジュールを登録
 - 作業のトリガー大体決まっているのでテキトーに合せます。

    ![crn.png](https://qiita-image-store.s3.amazonaws.com/0/30116/6ea609e2-ce01-427e-d934-d34b90a92931.png)
2. ビルド部分にWindowsバッチコマンドの実行を登録して、作ったバッチファイルをたたくように記述します。

    ![bat.png](https://qiita-image-store.s3.amazonaws.com/0/30116/be2a01e8-8178-9c90-c2c8-40ba51c8543b.png)
3. ビルド後のプロセスに
 - 失敗したら自分にメールするよう登録します。
 - Emotional Jenkins を登録します。

    ![mail.png](https://qiita-image-store.s3.amazonaws.com/0/30116/fb03f5e6-fe5f-f663-51e2-380c89bf5bf8.png)

Emotional Jenkins は日々の業務の中で潤いを与えてくれるので入れます。

## 依頼後の作業者の作業
- 出社後自分のPCを起動するとノラJenkinsとして黙々と作業をしてくれるので、PCを起動してJenkinsを起動するだけです。
- Jenkinsからメールが届いたら依頼した作業手順がおかしかったりしたときなので確認して修正しましょう。

## 依頼例

### 工数入力
一応毎日入力することになっている工数入力。
共有フォルダにあるExcelファイル開いて入力しなければいけない。
やたら業務内容が細分化されているし、開くの遅いし、入力忘れるし。
そういう作業はJenkinsに頼む。

スクリプトを作ってバッチで呼ぶ。

- 共有フォルダにアクセスするのにユーザーとパスワードを入力
- Excelを開いて今日の日付の部分の
 - 細分化されてる項目部分へ工数を入力
  - 今日の作業時間ファイルがあればそれを読んで書き込んで、そのファイルをrename
  - なければデフォルト値を書き込む
- Excelを保存して終了

Windowsバッチコマンドの実行に `ipy.exe manhour.py`とか書いて、呼び出す。
IronPythonで書いた。.NET使えるなら楽かなと使ってみた。

日々更新してくれて助かっているが、工数集計の〆をする直前に、〜の項目の前に××というプリフィックス付けてとかアナウンスが出たりするのでその時は泣きながら手で直す。
入力をしばらくしていない人にWARNINGも送れるけど、よけいなことはしないよ。

### 残業申請を送る
送らないとちょっと怒られるので忘れないようにJenkinsに送ってもらうようにした。
定時後15分残っていたら自動的に送るようにしている。

残業申請とか意味分からないけどそこは考えない。申請がメールでOKになったので、Jenkinsに申請代行を頼めるようになった。

残業するかしないかの判定は定時後15分残っているかいないかで判定している。
残業なんてする気がないので、定時になったら即PCを落して帰る。

フォーマットはそこそこ決まっているので、そのテンプレートを埋めSMTPをたたくスクリプトを書いてWindowsバッチコマンドの実行に `python.exe zangyo.py` を書いている。
Pythonで書く必要はなくて私が節操がないだけ。JScriptやPowerShell書いたっていいけど今作り直すならGroovyで書いてしまうかな。

### サーバーの監視
単に動かしているウェブを使用したサービスが生きているか死んでいるか見るだけ。
サーバーを監視する高機能なツールがあるが、そんなのは使わない。
しかもサーバーが落ちていたら、担当者に口頭で「再起動よろしく」とお願いする。

wget.exe インストールしておいて、Windowsバッチコマンドの実行に`wget.exe -t 1 -q -O /dev/null` してるだけ。

### バックアップ
データベースのバックアップをサービスを止めてダンプしてサービス再開というのがめんどうなのでJenkinsにやらせている。普通だね。

### ドキュメントの発行
Wordとかで作成した文書をWeb経由で登録しなければいけないけどめんどくさいんだよね。

WatiN 使って登録するスクリプト作っておいて、ファイルやファイル名称や登録カテゴリはJenkinsのJOBにビルドパラメータとして渡ようにしたので、クリックする作業が大幅に減って大助かり。

### 内線番号検索
whoisとか昔はあったけど、Webのシステムに変わり、事故があってからはより一層使いにくくなったのでこれもWeb操作をするスクリプト書いた。IEを開かないといけないし、もぐる階層が3段ぐらいあって検索しに行くまでが大変。その上GUIのリソース名取るのを難しくしてあるんでウィンドウの左上からの相対座標クリック操作で動かしている。
それをPython + pywinauto で書いてWindowsバッチコマンドの実行に`python.exe denwa.py %NAME%` と書いている。環境変数のNAMEはJOBにビルドパラメータとして渡している。
問題は一度に表示される人数がめちゃ少ないので、同名が多い人の場合はしぼれないけど、そこからはあきらめて手動にしている。

### VMware Playerの起動
Windowsバッチコマンドの実行内でvmrunとかで起動すると、JenkinsのJOBが終了すると同時にほぼ必ずVMware Playerも消滅するので困ったが、スクリプトでマウス操作してcmd.exe起動してその中でvmrunコマンドたたいて目的のVM立ち上げている。
[こんな風](http://qiita.com/naghbIQtIqHom/items/6e15795a80132d0c1be0)にして立ち上げている。

ESXi とか使いたい…。

## VMware Player内でのGUI操作
開発がない時は、立ち上げた後いつも同じテストを定期的に動かすので、そのスクリプトも書いてWindowsバッチの中に`nunit-console.exe FooTest.dll`とか書いといてGUI動かすテスト回したりしている。

## まとめ
大変なのはすごくない仕事をするスクリプトを書く作業でした。しかし一度作ってしまえばあとは電源を落すまでJenkinsが働いてくれます。
特になにかしなくてもJenkinsが実行履歴やバッチの出力したログも残しておいてくれ、ウェブブラウザのみで確認できます。

難しそうだと思って敬遠してる人や、開発と関係ないしというかたも、http://jenkins-ci.org/ からJenkinsをインストールしてたらバッチ書いてたたくだけで日々の作業を代行してくれるのでためしてみてください。

-------
次は [Lewuathe](http://qiita.com/Lewuathe) さんです。