Jenkins導入から運用⑥ ビルドログの取得+おまけ
Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳
の最後で書いた
ビルドして出力されたもの(exeとか)がほしい場合は
「Windowsバッチコマンドの実行」にコピーする内容やら場所やら書いとく必要がある
出力されたもの+ビルドログとかも欲しくなると思う
出力物は実行PCにあるけどビルドログはJenkinsが入ってるPCに出力される
だから取得する場合はそのディレクトリを指定すればいい
Jenkinsのディレクトリ(C:\Program Files\Jenkins)をネットワーク共有に設定して
Jenkins側の環境変数でビルド実行時間も用意されてるので(%BUILD_ID%)
\\[ドメイン名]\Jenkins\jobs\[プロジェクト名]\builds\%BUILD_ID%\Log
みたいな感じでビルドログの取得ができる
おまけ
ログファイルの取得は↑で書いた内容でいいんだけど
スレーブマシン上からマスターマシンのJenkinsフォルダを弄れると楽だったので少し設定を変更
シンボリックリンク
- 作成した先のディレクトリに飛べる
- ショートカットと違って飛ぶ前のディレクトリがパスに含まれる(重要)
左がショートカット、右がシンボリックリンク
作成するのにコマンドプロンプトを使うので
コマンドプロンプトを管理者実行で起動
mklink /d [作成するリンク名] [リンク先] ログの取得の場合 mklink /d [作成するリンク名] \\[ドメイン名]\Jenkins\jobs\[プロジェクト名]\builds\ ※Jenkinsのビルド中じゃないと実行時間の環境変数が取れないのでその手前にリンク作成
リンク先が無くても作成できるのでうち間違いに注意
リンク名を仮に C:\Projects\Log とすると
こんな感じ
見て分かるとおりリンク先が無くても作成できるので間違いに注意
他PCのファイルを自分のPC内にあるかの如くファイルが扱えるようになるので結構便利
多用し過ぎると実データの場所が分かりづらくなるので注意
で作成したリンクを使った形に直すと
C:\Projects\Log\%BUILD_ID%\Log
で取得できるようになる
おまけのほうが長くなったけどこんな感じで
Jenkins導入から運用⑤ スレーブノードの設定
Jenkinsには他のマシンにビルドを分散処理させるスレーブ機能がついてる
最初他のマシンのCPU借りて処理させて結果を受け取る仕組みがなのかと思ったのだけど
他のマシンで設定されたビルドを実行するってことでちょっと拍子抜け
つまりは同じ環境が入ったマシンが複数無いといけないわけなんだけど
1. ビルドしなくちゃいけないプロジェクトが複数ある
2. subversionとかでチェックアウトできる
3. 空いてるPCが複数台ある
みたいな感じだとスレーブ機能がアツい感じになる
ホスト側(Jenkins入ってるマシン)設定
- 「Jenkins」→「Jenkinsの管理」→「ノードの管理」へ
- 左サイドバーの「新規ノード作成」を選択
- ノード名を入れてダムスレーブを選択(好きな名前で)
で
- 説明 : 適当に
- 同時ビルド数 : マシンスペックに応じて
- リモートFSルート : スレーブマシン上のマスターノードのホームディレクトリ
("C:\jenkins"とかでいいと思う) - ラベル : 特定のOSが入ってるPCでのみビルド って感じの指定に使える
(windows_build_slaveとかmac_build_slaveとかついてるとわかりやすい)
起動方法は「JNLP経由でスレーブを起動」でOK で保存
Jenkinsが入ってるPC側の設定
- C:\Program Files\Jenkins\war のWEB-INFを右クリでプロパティ
- 共有タブ→詳細な共有 で このフォルダを共有するにチェック
スレーブ側の準備
- 適当な場所にバッチファイル作って
java -jar \\[※1]\WEB-INF\slave.jar -jnlpUrl http://[※1]//computer/[上で設定したノード名]/slave-agent.jnlp ※1 Jenkinsが入ってるPCのIPアドレス
を書いて保存しとく(名前は適当にconnect_slave.batとかで)
ノード名を○○_0~4とかにしとくと
for /l %%i in (1,1,4) do ( java -jar \\[※1]\WEB-INF\slave.jar -jnlpUrl http://[※1]//computer/○○_%%i/slave-agent.jnlp ) ※1 Jenkinsが入ってるPCのIPアドレス
こんな感じでfor文で回して空いてるスレーブに接続って感じで楽
バッチを作ったら他のスレーブにするマシンにもコピーして準備完了
接続
スレーブ側でさっき作ったバッチを実行すると
test_node_0の部分が接続中になるのでこれで完了
あとはビルドを走らせるとmasterとtest_node_0の2台で作業分担する
ただし一番最初に書いたとおり
他のマシンで設定されたビルドを実行する
ってだけなのでビルドして出力されたもの(exeとか)がほしい場合は
「Windowsバッチコマンドの実行」にコピーする内容やら場所やら書いとく必要がある
大体こんな感じで使えるようになるはず
Jenkins導入から運用① インストール~初期設定 - phaaaaantomのメモ帳
Jenkins導入から運用② プラグインの導入 - phaaaaantomのメモ帳
Jenkins導入から運用③ プロジェクトの作成 - phaaaaantomのメモ帳
Jenkins導入から運用④ ビルドパラメータの設定 - phaaaaantomのメモ帳
Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳
Jenkins導入から運用④ ビルドパラメータの設定
VCProjectのビルドの場合は必要ないけれどコマンドラインでの実行だと引数が欲しくなったりする
でもその度にビルド設定をいちいち変更するのもめんどくさいので ビルドの際にパラメータを設定してそれを引数にする
いざ設定
・プロジェクトを選択→左サイドバーの設定を選択
・「Rebuild Settings」→「ビルドのパラメータ化」→「パラメータの追加」
で、いろいろ種類があると思うけど今回は「文字列」
・名前 : パラメータの名前(環境変数名になる)
・デフォルト値 : 適当なものを
・説明 : 変数のコメント(ビルド時の前に表示される)
で
ビルドに設定、さっきのパラメータ名が環境変数になってるので%で囲って使う
ビルドボタン押してパラメータ設定画面 でビルド
プロジェクト左下のビルド履歴→コンソール出力でさっき入力した内容が表示されてればOK
ある程度引数の数が決まってる(3~6くらい?)なら
パラメータ追加時に「選択」で複数設定ができる
この場合ビルド時に
こうなるのでどれかを選択、選択されたものが環境変数に設定される
想定外の引数が入れられるのが怖いならこっちの設定のほうがいい
とりあえずこんな感じで
Jenkins導入から運用① インストール~初期設定 - phaaaaantomのメモ帳
Jenkins導入から運用② プラグインの導入 - phaaaaantomのメモ帳
Jenkins導入から運用③ プロジェクトの作成 - phaaaaantomのメモ帳
Jenkins導入から運用④ ビルドパラメータの設定 - phaaaaantomのメモ帳
Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳
Jenkins導入から運用③ プロジェクトの作成
ある程度準備ができたところでビルドプロジェクトの作成します
JenkinsTop画面左上の「新規ジョブ追加」を選択
プロジェクト名は仮でtest-projectとかにしときます
一番上の「フリースタイル・プロジェクトのビルド」を選択でOK
設定回りいろいろ
いろいろ項目があるけど
・ビルドを並列実行
・プロジェクトの高度なオプション
→ カスタムワークスペースを使用(プロジェクトがあるディレクトリを指定)
・Add timestamps to the console Output
それぞれににチェックor入力
ビルド設定
「ビルド」の項目の「ビルド手順の追加」でビルドしたいものを設定する
VCProjectのビルド
・「ビルド手順の追加」→「Build a Visual Studio ~~」を選択
・MSBuild Version : 設定したバージョン
・MSBuild Build File : .slnファイルのディレクトリ
・Command Line Arguments : ビルドオプション等々
コマンドラインで実行するタイプのプログラム
「ビルド手順の追加」→「Windowsバッチコマンドの実行」を選択
・普通にバッチファイルに書くみたいに記述
(コマンドラインで実行できる環境が入ってること前提)
「ビルド後の処理」の処理の追加で「Step Counter」を選択して
・ファイルパターンリストに検出したいファイル名の拡張子とか
(あくまでコメント的なものなので別に適当でもOK)
・ファイルパターンに検索する階層+拡張子
(program/**/*.cpp, program/**/*.h 的な感じで)
・除外設定等が無い場合はここはなくてOK
・解析後のエンコード指定はお好きなもので(UTF-8, CP932)
これで一通り設定完了、保存押して完了
ワークスペースの閲覧は1回ビルドしてから有効になるのでサイドバーの「ビルド実行」を選択
JenkinsTopに戻るとプロジェクトが1つできてて成功なり失敗なりしてると思う
ざっと説明したけど大体こんな感じ
Jenkins導入から運用① インストール~初期設定 - phaaaaantomのメモ帳
Jenkins導入から運用② プラグインの導入 - phaaaaantomのメモ帳
Jenkins導入から運用③ プロジェクトの作成 - phaaaaantomのメモ帳
Jenkins導入から運用④ ビルドパラメータの設定 - phaaaaantomのメモ帳
Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳
Jenkins導入から運用② プラグインの導入
Jenkinsのプラグイン
Jenkinsの強みは多種多様なプラグインがあること 無ければ作ればいいし的な感じで いろんな人がプラグインを作成しているため数が非常に豊富
そんなわけでビルドプロジェクトの作成の前に 実際に使ってみて便利だったプラグインの説明
左上のJenkinsから
Jenkinsの管理→プラグインの管理へ
利用可能タブを選択すると導入可能なプラグインが大量に出てくる
個人的によく使ってるプラグイン
Build Trigger Badge Plugin
ビルドの要因(ユーザーが実行or定期実行等)をビルド履歴に表示
MSBuild Plugin
Visual Studioで作成したプロジェクトをJenkins上でビルドできるようにする
1. 左上から Jenkins→Jenkinsの管理→システムの設定
2. 「MSBuild」から「インストール済みMSBuild」→「MSBuild追加」を選択
3. Pathは "C:\Windows\Microsoft.NET\Framework[バージョン]\MSBuild.exe"
4. Nameには好きな名前(↑のバージョンを入れとくとわかりやすい)
5. Default Paramは特に必要なし
Parameterized Trigger Plugin
ビルドパラメータを指定・設定してビルドができるようになる
Role Strategy Plugin (Role-based Authorization Strategy)
Jenkinsのアカウント毎に機能に制限をかけられる
(AはProjectAの操作とJenkinsの管理、BはProjectBだけ閲覧可等)
PegDown Formatter Plugin
プロジェクトのコメント等をmarkdown方式で書ける
(初期状態だとコメントに改行が使えない)
Sidebar Link
Jenkinsトップ画面左側のサイドバーに項目を追加できる
左上から Jenkins→Jenkinsの管理→システムの設定
1. 「追加のサイドバーリンク」項目の「リンクを追加」を選択
2. リンクURL、リンクテキスト、リンクアイコン を設定して保存
ThinBackup
Jenkinsのバックアップが手軽に作成できる
1. 左上から Jenkins→Jenkinsの管理→ThinBackup→Settings
2. 「Backup directory」にバックアップを保存する場所設定
3. 「Backup schedule for full backups」に定期バックアップの予定設定
(crontab形式で書くので 0 19 * * 1-5 みたいな感じで)
4. 「Max number of backup sets」にバックアップの最大保持数を
StepCounter Plugin
ビルドしたソースのステップ数、コメント率等を集計
Task Scanner Plug-in
ソース内の指定したキーワードを検出、集計 一定数以上検出でエラーにする等のオプション付き
Timestamper
ビルドにかかった時間をビルドログに表示するようになる
インストールしたいプラグインのチェックを入れたら 下の「ダウンロードして再起動後にインストール」を選択 で完了
各種プラグインは使う場面で細かい説明入れます
「こういうプラグインねーかな」で少し調べれば大体見つかるので これ以外にも自分でいろんなプラグインを入れてみると幸せになれるかも
感想などを教えてくれると僕がよろこびます
Jenkins導入から運用① インストール~初期設定 - phaaaaantomのメモ帳
Jenkins導入から運用② プラグインの導入 - phaaaaantomのメモ帳
Jenkins導入から運用③ プロジェクトの作成 - phaaaaantomのメモ帳
Jenkins導入から運用④ ビルドパラメータの設定 - phaaaaantomのメモ帳
Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳
Jenkins導入から運用① インストール~初期設定
最近Jenkinsに触る機会があったので導入から運用までの一連の流れを 使ったOSはwindows7 ultimate 32bit
まずは公式でwindows版パッケージをダウンロード
でもって解凍→インストール
インストールが完了すると勝手に起動するので少し待機
起動するとこんな画面に
ポートの変更(変更したい人は)
初期設定のままだとポートが8080のままなので
C:\Program Files\Jenkins\jenkins.xml を一旦適当な場所にコピー
コピーしたファイルの41行目
"--httpPort=8080" ← この部分を変更して元の場所に戻す
設定を有効にするために コントロールパネル→管理ツール→サービスを選択
Jenkinsを選択してサービスの再起動
これで変更したポートでアクセスできるようになる
Jenkins導入から運用① インストール~初期設定 - phaaaaantomのメモ帳
Jenkins導入から運用② プラグインの導入 - phaaaaantomのメモ帳
Jenkins導入から運用③ プロジェクトの作成 - phaaaaantomのメモ帳
Jenkins導入から運用④ ビルドパラメータの設定 - phaaaaantomのメモ帳
Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳