phaaaaantomのメモ帳

業務や趣味で弄ったプログラム、ツールのメモ。間違い等ありましたらご指摘お願いします。

Jenkins導入から運用⑥ ビルドログの取得+おまけ

Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳
の最後で書いた

ビルドして出力されたもの(exeとか)がほしい場合は
「Windowsバッチコマンドの実行」にコピーする内容やら場所やら書いとく必要がある

出力されたもの+ビルドログとかも欲しくなると思う

出力物は実行PCにあるけどビルドログはJenkinsが入ってるPCに出力される
だから取得する場合はそのディレクトリを指定すればいい

Jenkinsのディレクトリ(C:\Program Files\Jenkins)をネットワーク共有に設定して
Jenkins側の環境変数でビルド実行時間も用意されてるので(%BUILD_ID%)

\\[ドメイン名]\Jenkins\jobs\[プロジェクト名]\builds\%BUILD_ID%\Log

みたいな感じでビルドログの取得ができる

おまけ

ログファイルの取得は↑で書いた内容でいいんだけど
スレーブマシン上からマスターマシンのJenkinsフォルダを弄れると楽だったので少し設定を変更

シンボリックリンク

  • 作成した先のディレクトリに飛べる
  • ショートカットと違って飛ぶ前のディレクトリがパスに含まれる(重要)
    左がショートカット、右がシンボリックリンク f:id:phaaaaantom:20131223024714p:plain

作成するのにコマンドプロンプトを使うので
コマンドプロンプトを管理者実行で起動

mklink /d [作成するリンク名] [リンク先]
ログの取得の場合
mklink /d [作成するリンク名] \\[ドメイン名]\Jenkins\jobs\[プロジェクト名]\builds\
※Jenkinsのビルド中じゃないと実行時間の環境変数が取れないのでその手前にリンク作成  

リンク先が無くても作成できるのでうち間違いに注意

リンク名を仮に C:\Projects\Log とすると f:id:phaaaaantom:20131223021718p:plain こんな感じ
見て分かるとおりリンク先が無くても作成できるので間違いに注意

他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とかついてるとわかりやすい) f:id:phaaaaantom:20131119003458p:plain

起動方法は「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」→「ビルドのパラメータ化」→「パラメータの追加」

で、いろいろ種類があると思うけど今回は「文字列」
・名前 : パラメータの名前(環境変数名になる)
・デフォルト値 : 適当なものを
・説明 : 変数のコメント(ビルド時の前に表示される)
f:id:phaaaaantom:20131117203000p:plain

ビルドに設定、さっきのパラメータ名が環境変数になってるので%で囲って使う
f:id:phaaaaantom:20131117203157p:plain

ビルドボタン押してパラメータ設定画面 でビルド
f:id:phaaaaantom:20131117203309p:plain

プロジェクト左下のビルド履歴→コンソール出力でさっき入力した内容が表示されてればOK f:id:phaaaaantom:20131117203422p:plain

ある程度引数の数が決まってる(3~6くらい?)なら
パラメータ追加時に「選択」で複数設定ができる
f:id:phaaaaantom:20131117203620p:plain

この場合ビルド時に
f:id:phaaaaantom:20131117203705p:plain

こうなるのでどれかを選択、選択されたものが環境変数に設定される
想定外の引数が入れられるのが怖いならこっちの設定のほうがいい

とりあえずこんな感じで

Jenkins導入から運用① インストール~初期設定 - phaaaaantomのメモ帳
Jenkins導入から運用② プラグインの導入 - phaaaaantomのメモ帳
Jenkins導入から運用③ プロジェクトの作成 - phaaaaantomのメモ帳
Jenkins導入から運用④ ビルドパラメータの設定 - phaaaaantomのメモ帳
Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳

Jenkins導入から運用③ プロジェクトの作成

ある程度準備ができたところでビルドプロジェクトの作成します

JenkinsTop画面左上の「新規ジョブ追加」を選択

f:id:phaaaaantom:20131104030124p:plain プロジェクト名は仮でtest-projectとかにしときます

一番上の「フリースタイル・プロジェクトのビルド」を選択でOK

f:id:phaaaaantom:20131104032900p:plain

設定回りいろいろ

いろいろ項目があるけど ・ビルドを並列実行
・プロジェクトの高度なオプション
  → カスタムワークスペースを使用(プロジェクトがあるディレクトリを指定)
・Add timestamps to the console Output
それぞれににチェックor入力 f:id:phaaaaantom:20131106233219p:plain

ビルド設定

「ビルド」の項目の「ビルド手順の追加」でビルドしたいものを設定する

VCProjectのビルド

・「ビルド手順の追加」→「Build a Visual Studio ~~」を選択
MSBuild Version : 設定したバージョン
MSBuild Build File : .slnファイルのディレクトリ
・Command Line Arguments : ビルドオプション等々

コマンドラインで実行するタイプのプログラム

「ビルド手順の追加」→「Windowsバッチコマンドの実行」を選択
・普通にバッチファイルに書くみたいに記述
(コマンドラインで実行できる環境が入ってること前提) f:id:phaaaaantom:20131117202020p:plain


「ビルド後の処理」の処理の追加で「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の管理→プラグインの管理へ f:id:phaaaaantom:20131104034618p:plain

利用可能タブを選択すると導入可能なプラグインが大量に出てくる

個人的によく使ってるプラグイン

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版パッケージをダウンロード

http://jenkins-ci.org/

でもって解凍→インストール

インストールが完了すると勝手に起動するので少し待機

起動するとこんな画面に

f:id:phaaaaantom:20131104022455p:plain

ポートの変更(変更したい人は)

初期設定のままだとポートが8080のままなので C:\Program Files\Jenkins\jenkins.xml を一旦適当な場所にコピー コピーしたファイルの41行目 "--httpPort=8080" ← この部分を変更して元の場所に戻す f:id:phaaaaantom:20131104023254p:plain

設定を有効にするために コントロールパネル→管理ツール→サービスを選択

Jenkinsを選択してサービスの再起動

これで変更したポートでアクセスできるようになる

Jenkins導入から運用① インストール~初期設定 - phaaaaantomのメモ帳
Jenkins導入から運用② プラグインの導入 - phaaaaantomのメモ帳
Jenkins導入から運用③ プロジェクトの作成 - phaaaaantomのメモ帳
Jenkins導入から運用④ ビルドパラメータの設定 - phaaaaantomのメモ帳
Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳