2022年9月からJenkinsはJava11以上が必須になるようなので、/usr/local/java17以下にJava17を入れてそちらでJenkinsを動かすことにした。
AmazonLinux2やUbuntu20.04, 22.04などパッケージで入れたJenkinsはたぶんsystemdで管理されているはず。今回はsystemdで管理されているJenkinsが/usr/bin/javaを使わず、/usr/local/java17/bin/javaを使うようにする方法。
パッケージで入れたJenkinsはsystemdで扱うファイルとして
/usr/lib/systemd/system/jenkins.service
がある。
それとは別に、
/etc/systemd/system/multi-user.target.wants/jenkins.service
があって、これは/usr/lib/systemd/system/jenkins.serviceへのシンボリックリンクとなっている。このシンボリックリンクはランレベルを管理するための配置。
設定方法は2パターンあるが、今回はsytemctl editを利用する方法を先に書く。おすすめしない方法として/etc/systemd/system/以下にファイルをコピーして修正する方法も残す。
設定方法
sytemctl editを起動するとnanoエディタになるためvimに変更する
export SYSTEMD_EDITOR=vim
こちらを実行するか、.bashrcなどに記載しておく。
systemctl edit jenkins.service を実行するとエディタが立ち上がるため変更したい差分だけを記載する。
[Service] # The Java executable. When left empty, JAVA_HOME and PATH are consulted. Environment="JENKINS_JAVA_CMD=/usr/local/java17/bin/java"
エディタで保存して終了すると自動的に差分ファイルが
/etc/systemd/system/jenkins.service.d/override.conf
に作成されて、systemctl daemon-reloadが実行され設定が読み込まれる。
念のためsytemctl cat jenkins.serviceを実行すると出力の最後に
# /etc/systemd/system/jenkins.service.d/override.conf [Service] # The Java executable. When left empty, JAVA_HOME and PATH are consulted. Environment="JENKINS_JAVA_CMD=/usr/local/java17/bin/java"
となっていて、/etc/systemd/system/jenkins.service.d/override.confが読み込まれているのが確認できる
最後に、systemctl restart jenkins.serviceを実行すると/usr/local/java17以下のjavaで起動されているのが確認できる。
設定方法(おすすめしない)
最初にこの方法をとったが、systemctl editの方がシンプルで差分管理もできるためそちらを推奨する。この方法はメモとして残す。
オリジナルのファイルをコピー
cp /usr/lib/systemd/system/jenkins.service /etc/systemd/system/
/etc/systemd/system/jenkins.serviceを編集する。
Environment="JENKINS_JAVA_CMD=/usr/local/java17/bin/java"
として保存。
systemctl daemon-reload
してsystemctlが読み込んでいる設定をリロード。(これが重要)
systemctl restart jenkins
でJenkinsを再起動するとJava17で起動する。
どの設定ファイルを読み込んでいるか、読み込んだ内容を表示するには
systemctl cat jenkins
でできる。
補足
systemdの全体像の把握はこの資料が分かりやすかった。systemctl editの話もある。
パッケージで入れたソフトはsystemdの設定ファイルとして/usr/lib/systemd/system/以下にファイルを置く。これはパッケージのアップデートで変更される可能性が高い。
ユーザ側で設定ファイルを上書きするには
/etc/systemd/system/以下にファイルを置く。置いたり修正したあとは systemctl daemon-reload で設定ファイルをリロードする。
systemdの設定ファイルについてはこちらの記事が分かりやすかった