NetBSDにJenkinsをインストールする
JenkinsはMITライセンスのFLOSSです。おもにシェルやGroovyスクリプトでタスクを定義し、その実行を自動化できるソフトウェアです。
本稿ではJenkinsのインストール対象をNetBSD 9.0/amd64とします。
pkgsrcからJenkinsをインストールする
通常版かLTS版か
通常版(devel/jenkins)とLTS版(devel/jenkins-lts)いずれかのJenkinsをpkgsrcからインストールできます。通常版のJenkinsは2020年9月時点では週次でリリースされます。いっぽうLTS版は12週間に一度、通常版から選ばれたリリースをもとにテストやパッチのバックポートを経てリリースされます。
どちらを選ぶかは運用方針や好み次第ですが、現実的にはLTS版(devel/jenkins-lts)を選ぶのが良いでしょう。pkgsrc-stableは1年に4回リリースされるため、Jenkins LTS版の更新を追いかけるスケジュールに無理はありません。しかし毎週リリースされる通常版を——裏を返せば年に4回しか更新されないpkgsrc-stableで——選んだとしても、3ヶ月以上前の比較的不安定なリリースを使わされるだけです。また仮にpkgsrc-currentを使っていたとしても、パッケージメンテナが毎週リリースされるJenkinsの更新に追いつけなければ通常版を選ぶ利点はありません。pkgsrcの更新頻度とパッケージメンテナの負担を考慮すれば通常版を選ぶ利点は少なく、消極的な理由ではありますがLTS版を選ぶのが無難という結論になります。
インストール
pkgsrcからインストールしたJenkinsを運用するには次の4つのパッケージが必要になるでしょう。
devel/jenkins-ltslang/openjdk8www/apache-tomcat9www/apache24
それぞれのパッケージをmake installでインストールしてください。またpkginを使うのなら以下のようにインストールできます。pkgin searchからJenkins LTS版のバージョンを調べ、次にそのバージョンを明示してpkgin installに渡しています。
pkgin search jenkins
jenkins-2.73 Open source continuous integration server (weekly release)
jenkins-2.60.2 Open source continuous integration server (LTS release)
p5-Digest-JHash-0.10nb3 Perl extension for 32 bit Jenkins Hashing Algorithm
=: package is installed and up-to-date
<: package is installed but newer version is available
>: installed package has a greater version than available package
pkgin install apache apache-tomcat openjdk8 jenkins-2.60.2
設定
Tomcatの設定
Jenkinsパッケージのインストール時やpkg_info -D jenkinsで表示されるメッセージにしたがって/usr/pkg/share/tomcat/conf/server.xmlを編集します。ただし、ContextタグのdocBaseにはjenkins.warへの絶対パスを渡します。
したがってConnectorタグの変更はメッセージどおり以下のようにします。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
いっぽうHostタグの中に追加するContextタグは以下のように書きます。
<Context path="/jenkins" docBase="/usr/pkg/share/jenkins/jenkins.war"
debug="0" reloadable="true">
</Context>
Jenkinsホームディレクトリの作成
標準では/usr/pkg/share/tomcat/.jenkinsがJenkinsのホームディレクトリです。jenkinsパッケージインストール時にはこのディレクトリは自動で作成されないため、手動で作りパーミッションを適切に設定しなければなりません。
mkdir /usr/pkg/share/tomcat/.jenkins
chown tomcat:tomcat /usr/pkg/share/tomcat/.jenkins
Jenkinsのホームディレクトリのパスは変更できます。/usr/pkg/share/tomcat/conf/server.xmlを編集し、Contextタグの中で環境変数JENKINS_HOMEの値を設定してください。当該パスは上記のようにパーミッションの設定を忘れずにおこなってください。以下はJENKINS_HOMEを/usr/pkg/share/jenkins/homeに設定する例です。
<Context path="/jenkins" docBase="/usr/pkg/share/jenkins/jenkins.war"
debug="0" reloadable="true">
<Environment name="JENKINS_HOME" value="/usr/pkg/share/jenkins/home"
type="java.lang.String"/>
</Context>
デーモンの設定と起動
ApacheとTomcatのRCスクリプトを/etc/rc.dへコピーします。
cp /usr/pkg/share/examples/rc.d/apache /etc/rc.d
cp /usr/pkg/share/examples/rc.d/tomcat /etc/rc.d
JenkinsのバージョンによってはOpenJDK 11はサポートされていません。Jenkinsのバージョンが2.73以下の場合はOpenJDK 8を代わりに使う必要があります。そのため次に示す差分のとおり/etc/rc.d/tomcatを編集します。
--- /etc/rc.d/tomcat 2020-09-22 09:14:25.404229833 +0900
+++ /usr/pkg/share/examples/rc.d/tomcat 2020-07-19 01:00:05.000000000 +0900
@@ -30,7 +30,7 @@
if [ -z "${JAVA_HOME}" ]
then
- JAVA_HOME="/usr/pkg/java/openjdk11"
+ JAVA_HOME="/usr/pkg/java/openjdk8"
export JAVA_HOME
fi
システム起動時にデーモンが自動で実行されるよう/etc/rc.confに以下を追加します。
apache=YES
tomcat=YES
serviceからApacheとTomcatを動かします。
service apache start
service tomcat start
Webブラウザから、http://IPアドレス:8080/jenkinsへアクセスします。あとは画面どおりにセットアップを完了させてください。
なおJenkinsのバージョンが古い場合、Jenkinsが推奨するプラグインのインストールにすべて失敗する可能性があります。
httpsに対応するには
Jenkins WebフロントエンドへはID/パスワードでログインします。そのためTLSでサーバ・クライアント間の通信を暗号化したい場合もあるでしょう。本稿ではApacheのプロキシでJenkinsへのアクセスを受けて、Apache側でTLS通信することによりJenkinsそのものを設定することなくhttps化する例を紹介します。ここではサーバ証明書はすでに発行されているものとして進めます。
はじめに/usr/pkg/etc/httpd/httpd.confを編集し、次のモジュールを有効にします。これらのモジュールはwww/apache24パッケージですべて提供されているので別途のインストールは必要ありません。
- socache_shmcb_module
- proxy_module
- proxy_http_module
- ssl_module
/usr/pkg/etc/httpd/httpd-ssl.confを編集し、秘密鍵(SSLCertificateKeyFile)やサーバ証明書(SSLCertificateFile)、中間CA証明書(SSLCertificateChainFile)、ルートCA証明書(SSLCertificateFile)へのパスを設定します。ルートCAを自己署名で構築したなら、中間CANONとルートCAは同一でしょう。そしてVirtualHostタグの中に以下の設定を追加します。https://IPアドレス/jenkinsへアクセスするとローカルホストの8080番ポートを経由して/jenkinsへ飛ばすようプロキシの設定をしています。
ProxyPass /jenkins http://localhost:8080/jenkins nocanon
ProxyPassReverse /jenkins http://localhost:8080/jenkins
ProxyRequests Off
AllowEncodedSlashes NoDecode
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
<Proxy http://localhost:8080/jenkins*>
Order deny,allow
Allow from all
</Proxy>
この設定が終わったあと、/usr/pkg/etc/httpd/httpd.confに戻り/usr/pkg/etc/httpd/httpd-ssl.confをインクルードするよう設定します。最終的に、/usr/pkg/etc/httpd/httpd.confには次のような変更が加わります。
--- /usr/pkg/etc/httpd/httpd.conf.orig 2020-08-24 04:54:56.000000000 +0900
+++ /usr/pkg/etc/httpd/httpd.conf 2020-09-22 13:21:21.239037438 +0900
@@ -88,7 +88,7 @@
#LoadModule cache_module lib/httpd/mod_cache.so
#LoadModule cache_disk_module lib/httpd/mod_cache_disk.so
#LoadModule cache_socache_module lib/httpd/mod_cache_socache.so
-#LoadModule socache_shmcb_module lib/httpd/mod_socache_shmcb.so
+LoadModule socache_shmcb_module lib/httpd/mod_socache_shmcb.so
#LoadModule socache_dbm_module lib/httpd/mod_socache_dbm.so
#LoadModule socache_memcache_module lib/httpd/mod_socache_memcache.so
#LoadModule socache_redis_module lib/httpd/mod_socache_redis.so
@@ -127,10 +127,10 @@
LoadModule setenvif_module lib/httpd/mod_setenvif.so
LoadModule version_module lib/httpd/mod_version.so
#LoadModule remoteip_module lib/httpd/mod_remoteip.so
-#LoadModule proxy_module lib/httpd/mod_proxy.so
+LoadModule proxy_module lib/httpd/mod_proxy.so
#LoadModule proxy_connect_module lib/httpd/mod_proxy_connect.so
#LoadModule proxy_ftp_module lib/httpd/mod_proxy_ftp.so
-#LoadModule proxy_http_module lib/httpd/mod_proxy_http.so
+LoadModule proxy_http_module lib/httpd/mod_proxy_http.so
#LoadModule proxy_fcgi_module lib/httpd/mod_proxy_fcgi.so
#LoadModule proxy_scgi_module lib/httpd/mod_proxy_scgi.so
#LoadModule proxy_uwsgi_module lib/httpd/mod_proxy_uwsgi.so
@@ -145,7 +145,7 @@
#LoadModule session_dbd_module lib/httpd/mod_session_dbd.so
#LoadModule slotmem_shm_module lib/httpd/mod_slotmem_shm.so
#LoadModule slotmem_plain_module lib/httpd/mod_slotmem_plain.so
-#LoadModule ssl_module lib/httpd/mod_ssl.so
+LoadModule ssl_module lib/httpd/mod_ssl.so
#LoadModule dialup_module lib/httpd/mod_dialup.so
#LoadModule http2_module lib/httpd/mod_http2.so
#LoadModule lbmethod_byrequests_module lib/httpd/mod_lbmethod_byrequests.so
@@ -512,7 +512,7 @@
</IfModule>
# Secure (SSL/TLS) connections
-#Include etc/httpd/httpd-ssl.conf
+Include etc/httpd/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
設定後、apacheデーモンを再起動します。Webブラウザからhttps://IPアドレス/jenkinsへアクセスし、https化された状態でJenkins Webフロントエンドが見れることを確認してください。