JenkinsにはOracle JDKを自動インストールする機能があります。
複数スレーブがあるときに特に便利で、各スレーブに手動インストールしなくて済みます。
Jenkinsで自動インストールできるOracle JDKは9までとなっています。
この記事ではOpenJDK11を自動インストールする方法を紹介します。
今回例に使ったJenkinsのバージョンは ver. 2.163 です。
UIはバージョンアップにより変わる可能性があるので注意してください。
設定方法
Global Tool Configuration を開く
※要管理権限
- Jenkinsの管理 を開く
- Global Tool Configuration を開く
- インストール済みJDKを押す
インストールするJDKを設定する
- JDK追加 を押す
- JDKの名前を入力する。(自分がわかりやすい名前)
- インストーラの削除 を押し、「java.sun.com からインストール」を消す
- インストーラの追加 から 「.zip/.tar.gz展開」を選ぶ
- アーカイブダウンロードURL と アーカイブを展開するサブディレクトリ を入力する(入力内容は後述)
- Save を押して設定を保存する。
アーカイブダウンロードURL と アーカイブを展開するサブディレクトリ はOSにより下記のように入力します。
ラベルは空欄にします。ただし、異なるOSのノードがある場合はラベルを使用します。(後述)
アーカイブダウンロードURL | アーカイブを展開するサブディレクトリ | |
---|---|---|
Linux | https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz |
jdk-11.0.2 |
Mac | https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_osx-x64_bin.tar.gz |
jdk-11.0.2.jdk/Contents/Home |
Windows | https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_windows-x64_bin.zip |
jdk-11.0.2 |
ダウンロードURLは https://jdk.java.net/11/ から取得しました。
今回の例では JDK 11.0.2 を使いました。
アーカイブを展開するサブディレクトリは実際に解凍してみたときに bin/java
があるディレクトリを指定します。
以上で設定は完了です。
実際に使用してみる
ジョブの設定で先程設定したJDKを選びます。
※2つ以上JDKを設定しないと選択できないようです。
Jenkins pipelineでやる場合
pipeline {
agent any
tools {
jdk 'JDK11'
}
stages {
// ...
}
}
実際に実行してみると自動で解凍してパスを通してくれてます。
アーカイブを展開するサブディレクトリ の設定が間違えているとうまくいかないので注意です。
Started by user Admin
Building on master in workspace /var/jenkins_home/workspace/test-job
Unpacking https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz to /var/jenkins_home/tools/hudson.model.JDK/JDK11 on Jenkins
[test-job] $ /bin/sh -xe /tmp/jenkins3984802891567537123.sh
+ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
Finished: SUCCESS
異なるOSのノードがある場合の設定
スレーブの登録がなく単一ノードだけしかない場合や、すべてのスレーブが同じ種類のOSならば以上の設定で大丈夫ですが、
異なるOSのノードがある場合は以下の設定でOSごとにインストールするアーカイブを切り替える必要があります。
「.zip/.tar.gz展開」を複数追加し、それぞれの設定を入れます。
OSを自動判別はしてくれないため、各ノードに設定したラベルで切り替えるようにします。
各ノードのラベルは Jenkinsの管理 > ノードの管理 > (ノード名)(※ master等) > 設定 で設定したものを使います。