2013年10月4日金曜日

Jenkinsで分散ビルド(mavenビルド編)

■概要
スレーブノードを一台追加してそのノードでビルドを実行してみます
ビルド内容はmavenビルドです
mavenビルドでできた成果物を保存するところまでやってみます

■環境
・マスタノード
CentOS 6.3
Jenkins 1.517
・スレーブノード
Java 1.7.0_17
Maven 3.1.0

■設定
1. スレーブノード追加
Jenkinsの管理→ノードの管理→新規ノード作成
ノード名:node001
ダムスレーブにチェックを入れてOKを押します

次に、ノードの設定です
適当でも大丈夫ですが、自分は以下のように設定しました
説明:mavenビルドを実行するためのノード
同時ビルド数:1
リモートFSルート:/var/tmp/jenkins_slave
ラベル:maven
用途:このマシンを特定ジョブ専用にする
起動方法:SSH経由でUnixマシンのスレーブエージェントを起動
ホスト:node001
認証情報:Manage Credentialsでnode001のSSHのログインユーザ名とパスワードを設定してからここで選択します、秘密鍵認証での設定も可能です
可能性:可能な限りオンラインのままにする

SSHユーザ名と秘密鍵では
Scope:秘密鍵
ユーザー名:root
秘密鍵:Jenkinsマスター上のファイルからでpemファイルのパスを指定、パスフレーズが必要な場合は高度な設定からパスフレーズを入力してからsave
このとき鍵に権限がないとsshのログインでエラーになるので誰でも読み込める権限(666)あたりにしておきます

転送するファイルは「slave.jar」です
slave.jarはJenkinの本体でる「jenkins.war」の中に存在しています
一度、unzip等で展開して抽出してください、抽出したslave.jarを転送すればOKです
転送するパスはノードを追加するときに設定したリモートFSルートのパス「/var/tmp/jenkins_slave」配下に配置します

saveを押下後、slaveに対してSSH経由で必要なjarファイルをリモートFSルートで設定したディレクトリ配下に配置します
エラーがでなければスレーブノードの追加完了です

slaveノードでは mvn コマンドを実行するのでインストールされていない場合は以下を参考にmavenをインストールしてください
http://kakakikikeke.blogspot.jp/2013/10/maven.html
slaveノードがmavenを実行するときに外部のmavenリポジトリからjarを取得する流れがあるのでグローバルにアクセスできるネットワークも必要となります

2. スレーブノードでビルドするジョブの作成
今回はスレーブノードでmavenビルドを実行するためのジョブを作成します
流れとして
①ソースコード転送→②mavenビルド→③成果物デプロイ
の流れを作りたいと思います

①ソースコード転送
はじめにスレーブノードに対してソースコードをコピーするジョブを作成します
自分はgitからソースをcloneしているのでそれをtarで固めたあとにnode001に転送しています
転送するときはcapistranoのuploadを使っています
この辺はやり方がいろいろありますが、とりあえず転送できればOKです
※scpでもsftpでもftpでもOKです

②mavenビルド
mavenビルド用のジョブを作成します
基本はいつも通り作成するので作成時のポイントだけ

「実行するノードを制限」の部分で先ほど作成したノードで実行するように制限します
今回は maven というラベルでノードを作成したので「maven」と入力します

ビルドで「Mavenの呼び出し」を選択してゴール、pom.xmlのパスを設定します
①のジョブが配置したpom.xmlの場所をフルパスで指定すれば大丈夫です
ただ、pom.xmlの中でソースファイルの場所等を相対的に指定している場所があるのならpom.xmlがあるパスまでcdしてからmvnを実行したほうが無難です

プロファイルの指定もしたい場合はゴールの部分に「-Phogehoge」プロファイルの指定をしちゃえば大丈夫です
また実際に作成されたjarファイルやwarファイルはビルドの設定で成果物を残すようにしておくと、リモートFSルート配下にworkspaceディレクトリができ、その配下のジョブ名ディレクトリ配下にできます

③成果物デプロイ
これもどんな方法でもいいですが、自分の場合はスレーブノードにcapistranoがインストールされていないので単純にscpでデプロイしました
デプロイする前にssh経由でバックアップを取得しておくといいでしょう
scpやsshの場合はノンパスのssh接続をできるようにしておくと、なお楽にはなります

あとはgitからcloneする場合はcloneするビルドを実行すればいいし
すでにcloneしてあるならソースを転送するビルドから実行すればmavenビルドが走って成果物ができデプロイされる流れとなります
mavenビルドのジョブのサンプルだけ載せておきます
※見せられないところはマスクしてます、ビルドの手順の設定のところなど参考にしてみてください

■参考サイト

0 件のコメント:

コメントを投稿