X

Oracle Solaris, Oarcle ハードウェア製品に関する情報

Solaris 11.3 に Jenkins をインストールして SMF でサービス化してみる






Jenkins による継続的インテグレーションサーバの設定

本記事は、Automated Application Development and Deployment with DevOps on Oracle Solaris 11をベースに Jenkins のインストール方法について書かれた記事です。

Jenkins は、継続インテグレーションシステムを提供するオープンソースソフトウェアです。

ユーザは、継続的にビルドとテストソフトウェアによりソフトウェア開発を自動化でき、ビルドやビルドログを通して可観測性を提供します。

また、Jenkins は、分散コンピューティングのための能力をサポートする他、様々な組織の要件を満たすために、サードパーティ製のプラグインを追加して拡張することができます。

継続なんちゃらとか開発とかは気にせず、なんかいろいろと自動化するのに役に立ちそうくらいが気が楽で良いと思います。

なんかリッチな crontab とか誰か良いこと言ってた。


## 本文章の目的

この文章では、Oracle Solaris 11.3 上に Jenkins をインストールするとともに、SMF によるサービス化の方法を学習することを目的としています。


## Solaris 11.3 での SMF 新機能

Solaris 11.3 における SMF 関連の新機能をおさらいしてみます。

新たに追加された機能は、下記となりますが、今回はこれらの機能は使いません。


## Jenkins ユーザの作成

まず、Jenkins 環境を構成するために jenkins ユーザを作成します。

root@solaris:~# useradd -m jenkins
root@solaris:~# passwd jenkins
New Password:
Re-enter new Password:
passwd: password successfully changed for jenkins
root@solaris:~# su - jenkins

作成した jenkins ユーザでログインし、環境を確認してみましょう。

この記事の環境は、Solaris Kernel Zones であることがわかります。

Java がインストールされていないようであれば # pkg install jre-8 でインストールしておきましょう。

jenkins@solaris:~$ uname -a
SunOS solaris 5.11 11.3 sun4v sparc sun4v
jenkins@solaris:~$ virtinfo
NAME CLASS
kernel-zone current
logical-domain parent
non-global-zone supported
jenkins@solaris:~$ java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

## Jenkins のインストール

現在、Jenkins は Oralce Solaris 11.3 の Image Packaging System (IPS) では提供されないソフトウェアとなります。

そのため、Jenkins をインストールするために必要なファイル(この場合は、WAR ファイル) をブラウザやコマンドライン経由でダウンロードします。

 http://mirrors.jenkins-ci.org/war/latest/jenkins.war

継続的インテグレーションを提供するためには、Jenkins ビルドサーバが常に稼働している必要があります。 そこで、Oracle Solaris 11 が提供する Service Management Facility (SMF) を利用することにより、Jenkins は Oracle Solaris 11 のサービスとして統合することが可能になります。

この機能により、何からの理由によりサービスが停止したとしても、SMF が自動的に再起動するなどサービスの信頼性を向上させることが可能となります。


## Jenkins の SMF サービス化

そのためには、Jenkins のために SMF マニフェストを作成する必要があり、SMF マニフェストは、SMF サービへ登録するために必要になります。

このマニフェストの雛形を自動生成するためのツールである svcbundle (1M) ユーティリティが Solaris 11.1 で提供され、これを利用して簡単に作成することができます。 ここでは、Jenkins を依存関係をもたない新しいシングルインスタンスサービスとして作成します。

作成されたマニフェストの内容は WAR ファイルを実行するシンプルな内容となります。

jenkins@solaris:~$ svcbundle -o jenkins.xml -s service-name=site/jenkins \
-s model=child -s instance-name=default \
-s start-method="java -jar /export/home/jenkins/jenkins.war"

## SMF サービス化した Jenkins に環境変数を参照させて起動させる

svcbundle によりシンプルな SMF マニフェストを作成できましたが、Jenkins を実行するためにもう少し作業が必要です。

Jenkins では、設定ファイルや作業ファイルを保存する場所(ホームディレクトリ)を環境変数 JENKINS_HOME で指定できますが、 この環境変数を SMF マニフェストに追加し、Jenkins 起動時に参照されるようにします。

この設定は、SMF マニフェストの method_context にて行います。

例として JENKINS_HOME を jenkins ユーザのホームディレクトリに設定してみます。

jenkins@solaris:~$ gdiff -c jenkins_orig.xml jenkins.xml
*** jenkins_orig.xml Wed Dec 9 00:38:45 2015
--- jenkins.xml Wed Dec 9 00:39:27 2015
*** 15,21 ****
<service_fmri value="svc:/milestone/multi-user"/>
</dependency>
<exec_method timeout_seconds="60" type="method" name="start"
! exec="java -jar /export/home/jenkins/jenkins.war"/>
<!--
The exec attribute below can be changed to a command that SMF
should execute to stop the service. See smf_method(5) for more
--- 15,29 ----
<service_fmri value="svc:/milestone/multi-user"/>
</dependency>
<exec_method timeout_seconds="60" type="method" name="start"
! exec="java -jar /export/home/jenkins/jenkins.war">
! <method_context>
! <method_credential group='nobody'
! privileges='basic,net_privaddr' user='jenkins'/>
! <method_environment>
! <envvar name='JENKINS_HOME' value='/export/home/jenkins'/>
! </method_environment>
! </method_context>
! </exec_method>
<!--
The exec attribute below can be changed to a command that SMF
should execute to stop the service. See smf_method(5) for more

## SMF マニフェストの検証

作成された SMF マニフェストをサービスとして実行する前に、マニフェストが正しく記述されているか検証することをお勧めします。

SMF マニフェストの検証には、svccfg validate コマンドを実行します。

jenkins@solaris:~$ svccfg validate jenkins.xml
jenkins@solaris:~$

エラーを返さずコマンドが終了したので、マニフェストには構文間違えなどないことがわかりました。


## SMF サービスへの登録

それでは、作成した SMF マニフェストをサービスとして登録するために、サイト固有のディレクトリに配置します。

jenkins@solaris:~$ sudo cp jenkins.xml /lib/svc/manifest/site/
Password:
jenkins@solaris:~$

そして、 サイト固有のディレクトリに配置された SMF マニフェストを取り込むための SMF サービスである、manifest-import:default サービスを再起動します。

jenkins@solaris:~$ sudo svcadm restart manifest-import:default

この操作で、作成した SMF サービスは Jenkins サービスとして SMF に登録が完了しました。

Jenkins に限らず、従来 /etc/init.d や rc2.d などに配置していたサービス起動用スクリプト(Solaris 11.3 でも利用可能。legacy service として扱われます)を SMF にすることで、サービスの並列起動、サービス・リスターターや他サービスとの依存関係を持たせることなどが可能になります。


## SMF サービスの確認

それでは、Jenkins の SMFサービスがオンラインになっていることを確認してみましょう:

jenkins@solaris:~$ svcs jenkins
STATE STIME FMRI
online 18:10:24 svc:/site/jenkins:default

SMF サービス site/jenkins が存在し、STATE が online になっていればサービスとして稼働しています。


## Jenkins ダッシュボードへのアクセス

それでは Jenkins ダッシュボードへアクセスしてみましょう。

Web ブラウザから http://localhost:8080 にアクセスすることで Jenkins のダッシュボードへアクセスすることができます。

Jenkins ダッシュボード画面 図1. Jenkins ダッシュボード画面

ここまでの作業で、Jenkins が稼働する環境を手にいれることができました。

アクセス制御などのセキュリティ設定や様々なプラグインも提供されますので、サイトにあったカスタマイズが必要になります。

次のステップは、Jenkins をベースとしたアプリケーションのビルド環境を構築して行くことになります。

(続く・・・かな・・・


参考情報



Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.