#フリースタイルビルドでのTips
Build Failerなんだけど?
Shellを実行する場合、終了コードが0以外だと、そのままではBuild Failed で終わってしまう。
たとえば、差分を検出して、結果をコンソールに出力しようとするだけのジョブの場合、
% diff test.txt test_hoge.txt
を実行し、差分があった場合、$? が1になって、Build Failerになってしまいます。
こういうときは、Shellの開始と終了で、set +e, set -e を挟むと良い。
マスタ/スレーブ構成の場合のTips
環境変数が変だなあ?
マスタ/スレーブ方式の場合、スレーブの環境変数がなんか違うって言うときは、ご注意を。
プロファイルは、/etc/bashrc とか、.bashrcを見る....。
なんでマスタでやるはずのジョブをスレーブで実行しているの?
Jenkinsがマスタ/スレーブの場合は、基本的にマスタは仕事せず、できるだけスレーブをこきつかうという、執事頭に昇格します。
特定の環境でしか実行できないジョブ/ビルドは、ちゃんと実行するノードを指定すること。でないと、Windowsサーバでシェルの作業が始まってたりします。
スレーブ同士で成果物をやりとり
スレーブAで作った成果物を、スレーブBに渡して処理させたい場合。直接(SSHとか)のつながりがなくとも、マスタが仲介してAからBに転送することが可能 :)
同一ホストで違う権限(ユーザ)でJenkins動かしたい場合
別アカウントで動くJenkinsスレーブをたくさんつくるのが良さげ。
別アカウントのマスタのJenkinsをたくさん作るんじゃなくて、マスタは1つ、スレーブという形で(同じホスト内であっても)違うユーザで動くスレーブノードを作ると良いかと思われます。
Cronの記録をメールじゃなくってJenkinsにためる
Javaも入ってないしんだけれど、Jenkinsに記録を溜めることって、できるの?
いわゆる、『外部ジョブの監視』。基本はjenkinsのjarを利用するのですが、別にJenkinsのAPIを使ってCronの結果をhttpでPOSTすればいいので、java入ってなくても大丈夫。
メールでCronの結果を受けるのも良いですが、Jenkinsにためてみましょう。
手前味噌で申し訳ないですが、この辺が参考に。
Windows Serverで使う場合
サービス化
サービス化しちゃいましょう。
サービスをドメインユーザで動かすと、ドメインに参加してるサーバに対してファイルシステム上のやりとりができるので、非常に便利。
複数サービス化 (同一ホストで複数スレーブのパターン)
Windowsでサービス化する場合、いったんJNLPでJenkinsのスレーブのサービスを立ち上げて、起動したJavaの画面から『サービス化』すると良い。
ただし、サービス化の場合のサービス名は、固定文字列になっちゃうので、別サービス名で複数のスレーブを登録したい場合は注意。
いったん作成した最初のJenkinsスレーブのサービス名を変更し、config.xml も調整すること。
たくさんあるジョブをまとめて有効化/無効化したい
CLIとかでフィルタしてコマンドから無効化/有効化できるんだろうけど...。
一括有効化/無効化対象のジョブは、特定のスレーブで実行するように設定し、あとはスレーブの停止/起動で対応...。
一部rootの処理をしたいとき
スレーブにしてもマスターにしても、sudoが結構ポイントだったり。
たとえば、バックアップに関わるコマンドとか、rsyncだけはsudoしてjenkinsにやらせたい時とかは、このあたりを調整。
# tty で怒られるのでコメントアウト
#Defaults requiretty
# jenkinsユーザでも実行させたいコマンドは定義
Cmnd_Alias BACKUP_TASK = /usr/bin/rsync, /usr/bin/ssh, /usr/bin/du
# jenkinsさんには上記タスクはroot権限で実施できるようにする
jenkins ALL = (root) NOPASSWD: BACKUP_TASK