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-lts
lang/openjdk8
www/apache-tomcat9
www/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フロントエンドが見れることを確認してください。