このエントリは、CloudStack Advent Calendar 12月6日分のエントリです。

前回のエントリに引き続きCloudStackの開発方法について書いていきます。前回のエントリではIntelliJ IDEAを使って、CloudStackのコードを手元でビルド出来るところまでセットアップする方法を紹介しました。ただビルドするだけではなく、パッケージとして纏めるところまで出来たら、自分でコードの変更を加えたCloudStackをインストールしてテストするときに便利だよね、ということで、今日はamd64版向けのdebパッケージを自分でビルドしてみましょう。そして、debパッケージをビルドするだけではなく、今回はJenkinsでビルドサーバーを立てて、Jenkinsでdebパッケージをビルドしてみることを目指します。

Jenkinサーバーのセットアップ

debパッケージをビルドするため、前回のエントリで使っていたWindows+IntelliJ IDEA環境から離れて、今日はUbuntu ServerにJenkinsをインストールしてみましょう。今回は12.04 LTSを使用しました。

Javaの開発環境のインストール

まずはJavaの開発環境のセットアップから。Oracle JDKをインストールしていきます。標準ではOracle JDKは入らないので、ppaを使用して、以下のようにインストールします。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
sudo bash -c "echo \"JAVA_HOME=/usr/lib/jvm/java-7-oracle/\" >> /etc/profile" 
sudo bash -c "echo \"export JAVA_HOME" >> /etc/profile"
sudo bash -c "echo \"JAVA_HOME=/usr/lib/jvm/java-7-oracle/\" >> /etc/default/tomcat6" 

add-apt-repositoryが見つからないと起こられる場合は、以下のコマンドでインストールできます。あるいは自分でレポジトリを追加してもよいでしょう。

sudo apt-get install python-software-properties

つづいてMavenのインストール

sudo apt-get install maven

状況確認。ちゃんとインストールされてますね。

mvn -v                                                                                                       
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-oracle/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.8.0-34-generic", arch: "amd64", family: "unix"

パッケージビルド用のツールのインストール

パッケージビルド時に必要となるツールを、以下のコマンドでインストールしましょう。

sudo apt-get install debhelper tomcat6 genisoimage python-mysqldb

Jenkinsのインストール

そしてJenkinsを以下のコマンドでインストールしましょう。今回はパッケージからインストールを行います。

sudo apt-get install jenkins-tomcat

では、JenkinsのWeb UIにアクセスしてみましょう。デフォルトで、ポート8080番で立ち上がっています。

image

本当はここでちゃんとユーザーや認証の設定などをするべきなのですが、今回はCloudStackをビルドすることに絞って説明を行います。

まずは、「Jenkinsの管理」->「システムの設定」からMavenを追加します。3.0.4をパッケージからインストールしてあるので、そのパスをMAVEN_HOME欄に設定します。

image

続いて、プラグインの追加画面から、Git Pluginの追加を行います。プラグインの追加が終わったら、有効化するために、Jenkinsを再起動する必要があります。

image

debパッケージのビルド

image

さて、いよいよパッケージのビルドをするために、Jenkinsのジョブのセットアップを行いましょう。Jenkinsのトップから、「新規ジョブ作成」を選択し、適宜名前をつけてジョブを作成してください。

image

ジョブの設定画面では、ソースコード管理システムはGitを選択し、Repository URLには使用しているレポジトリのURLを入力してください。
ビルドの項は、「ビルド手順の追加」から「シェルの実行」を選択し、以下の内容を貼り付けてください。

cd $WORKSPACE
VERSION=`(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version) | grep '^[0-9]\.'`
rm -rf dists
mkdir -p $WORKSPACE/dists/debian
tar --transform s,^\./,cloudstack-${VERSION}/, -c -z -f dists/debian/cloudstack-${VERSION}.tgz --exclude .git --exclude dists .
cd $WORKSPACE/dists/debian
tar -xzf cloudstack-${VERSION}.tgz
cd $WORKSPACE/dists/debian/cloudstack-${VERSION}
dpkg-buildpackage -uc -us
cd $WORKSPACE/dists/debian
mkdir -p $WORKSPACE/dists/debian/main/binary-amd64
mv *.deb *.changes *.dsc main/binary-amd64
cd $WORKSPACE
dpkg-scanpackages dists/debian/main/binary-amd64 /dev/null | tee $WORKSPACE/dists/debian/main/binary-amd64/Packages | gzip -9 > $WORKSPACE/dists/debian/main/binary-amd64/Packages.gz

以上で、Jenkinsのジョブのセットアップは完了しました。これでジョブを実行すれば、以下のようにビルドに成功する筈です。

image

そして、ワークスペースのdists/debian/main/binary-amd64/ディレクトリ配下には、debパッケージとPackagesファイルが生成されている筈です。

image

このdebパッケージを使えば、ビルドされたCloudStackをDebian/Ubuntu環境にインストールすることが出来ます。また、同時に生成されたPackagesファイルは、そのディレクトリ配下にあるパッケージの情報を含んだメタデータファイルであり、aptコマンドがそのディレクトリをレポジトリとして扱うことを可能にします。Jenkinsはワークスペースの内容をデフォルトでインターネットに対して公開してくれるので、そのURLを対象のサーバーにレポジトリとして登録すれば、Jenkinsサーバーをレポジトリとして使用することが出来ます。

sudo add-apt-repocitory 'http://<domain>:8080/jenkins/job/<jobname>/ws/dists/debian main'

CloudStackの実際のインストール手順については、CloudStack Installation Guideを参照されると良いかと思います。

以上、CloudStackのdebパッケージをビルドするためのJenkinsジョブセットアップ手順でした。明日のAdvent Calenderの担当は・・・誰なんだろう。。

Trackbacks : 3

Trackback URL for this entry
http://blog.sharplab.net/blog/2013/12/06/cloudstack%e9%96%8b%e7%99%ba%e3%81%93%e3%81%a8%e3%81%af%e3%81%98%e3%82%81-2%e3%83%93%e3%83%ab%e3%83%89%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%81%ae%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83/trackback/

Listed below are links to weblogs that reference this entry

ピンバック from CloudStack開発ことはじめ (4)結合テスト –marvinでCloudStackの結合テストを自動化してみよう– - SharpLab. 15-06-13 09:56:04 UTC

[…] (2) […]

トラックバック from Piano Naruto Sadness And Sorrow 15-06-28 02:22:11 UTC

Piano Naruto Sadness And Sorrow…

… – The person can get bitter, jealous, angry, afraid, lethargic, and hold a pet. Come on, snap out of bed in the morning and feel awkward and helpless. They are focusing on the p… CloudStack開発ことはじめ (2)ビルドサーバーのセットアップ – SharpLab. ……

トラックバック from Yankee Doodle 17-01-11 04:20:59 UTC

Yankee Doodle

CloudStack開発ことはじめ (2)ビルドサーバーのセットアップ –JenkinsでCloudStackのdebパッケージをビルドしてみよう– – SharpLab.