概要
JenkinsのJavaの対応バージョンがEOLを迎えるのでJavaのバージョンを上げたい。
しかし、同じサーバー上でビルドしているタスクは別途検証が必要なので一旦今までのバージョンで動かしたい。
そこで、JenkinsはJava 21にバージョンアップしつつ、ビルドタスクはJava 17のままにしたので、その方法を備忘録としてメモ。
環境
- Amazon Linux 2023
- 2023.6.20250317
- Java 17
- OpenJDK 17.0.14
- Jenkins
- 2.492.3
JenkinsでJava 17をJDKとして設定する
Jenkinsの管理 > Tools > インストール済みJDK > JDK追加
ここで現在使っているJava17を設定するので、サーバーに入ってJavaの実体を確認する。
$ java -version
openjdk version "17.0.14" 2025-01-21 LTS
OpenJDK Runtime Environment Corretto-17.0.14.7.1 (build 17.0.14+7-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.14.7.1 (build 17.0.14+7-LTS, mixed mode, sharing)
$ which java
/usr/bin/java
$ ls -l /usr/bin/java
lrwxrwxrwx. 1 root root 22 Apr 17 2024 /usr/bin/java -> /etc/alternatives/java
$ ls -l /etc/alternatives/java
lrwxrwxrwx. 1 root root 52 Apr 17 2024 /etc/alternatives/java -> /usr/lib/jvm/java-17-amazon-corretto.x86_64/bin/java
JAVA_HOME
にはディレクトリパスを入れる必要があるので/bin/java
を除いて入力します。
Java 21をインストールする
$ dnf list --available "java-21*corretto*"
Last metadata expiration check: 0:01:15 ago on Fri Apr 11 16:25:12 2025.
Available Packages
java-21-amazon-corretto.x86_64 1:21.0.6+7-1.amzn2023.1 amazonlinux
java-21-amazon-corretto-debugsymbols.x86_64 1:21.0.6+7-1.amzn2023.1 amazonlinux
java-21-amazon-corretto-devel.x86_64 1:21.0.6+7-1.amzn2023.1 amazonlinux
java-21-amazon-corretto-headless.x86_64 1:21.0.6+7-1.amzn2023.1 amazonlinux
java-21-amazon-corretto-javadoc.x86_64 1:21.0.6+7-1.amzn2023.1 amazonlinux
java-21-amazon-corretto-jmods.x86_64
$ sudo dnf -y install java-21-amazon-corretto-devel
====================================================================================================================================
Package Architecture Version Repository Size
====================================================================================================================================
Installing:
java-21-amazon-corretto-devel x86_64 1:21.0.6+7-1.amzn2023.1 amazonlinux 150 k
Installing dependencies:
java-21-amazon-corretto-headless x86_64 1:21.0.6+7-1.amzn2023.1 amazonlinux 96 M
Transaction Summary
====================================================================================================================================
Install 2 Packages
Installed:
java-21-amazon-corretto-devel-1:21.0.6+7-1.amzn2023.1.x86_64 java-21-amazon-corretto-headless-1:21.0.6+7-1.amzn2023.1.x86_64
Complete!
$ java -version
openjdk version "21.0.6" 2025-01-21 LTS
OpenJDK Runtime Environment Corretto-21.0.6.7.1 (build 21.0.6+7-LTS)
OpenJDK 64-Bit Server VM Corretto-21.0.6.7.1 (build 21.0.6+7-LTS, mixed mode, sharing)
Jenkinsを再起動する
$ sudo systemctl restart jenkins
再起動後にJenkins上で冒頭のEOL表示が消えていればJava 21で動いているはずですが、念のため確認します。
$ sudo alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
1 /usr/lib/jvm/java-17-amazon-corretto.x86_64/bin/java
*+ 2 /usr/lib/jvm/java-21-amazon-corretto.x86_64/bin/java
Enter to keep the current selection[+], or type selection number:
$ java -version
openjdk version "21.0.6" 2025-01-21 LTS
OpenJDK Runtime Environment Corretto-21.0.6.7.1 (build 21.0.6+7-LTS)
OpenJDK 64-Bit Server VM Corretto-21.0.6.7.1 (build 21.0.6+7-LTS, mixed mode, sharing)
切り替えなくてもデフォルトでインストールしたJava 21が有効になるようです。ちなみにJenkinsの設定でも確認できます。
Jenkinsの管理 > システム情報 > システムプロパティ
ここのjava.home
が/usr/lib/jvm/java-21-amazon-corretto.x86_64
になっていればOKです。
ビルドタスクごとに使用するJDKを設定する
どうやらインストール済みJDK
が複数設定されていないとJDKを選択するプルダウンが出てこないようなので、Java 17と同様にJava 21もインストール済みJDKとして登録します。
そうするとタスクの設定でJDKを選択することができます。
デフォルトは(System)
になっているので、これをJava17にすることで、
Jenkins本体 -> Java 21
ビルドタスク -> Java 17
と2種類のJavaバージョンを使い分けることができます。
追記:(System)
ではダメでした
(System)
=Jenkinsを動かしているJDK=Java21だと思っていたので、Java21でビルドしたいタスクを(System)
で実行したところエラーでした。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project sample-project: Fatal error compiling: error: release version 21 not supported -> [Help 1]
明示的にJava21
を選択したら正常に動きました。(System)
だと何が使われるんでしょうか…ご存じの方がいたら教えてください。
Mavenを使っている場合はmvnのバージョンも確認
$ mvn --version
Apache Maven 3.8.4 (Red Hat 3.8.4-3.amzn2023.0.5)
Maven home: /usr/share/maven
Java version: 17.0.14, vendor: Amazon.com Inc., runtime: /usr/lib/jvm/java-17-amazon-corretto.x86_64
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "6.1.130-139.222.amzn2023.x86_64", arch: "amd64", family: "unix"
どうやらalternatives
でJava 21を指定していてもダメなようなので、JAVA_HOME
にJava 21を設定してあげます。
$ sudo vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-21-amazon-corretto.x86_64
export PATH=$JAVA_HOME/bin:$PATH
※mvn
コマンドを実行するのはjenkins
ユーザー(=nologin
ユーザー)のため.bash_profile
がないので/etc/profile
内で読み込まれるように/etc/profile.d/java.sh
を作りました。
$ source /etc/profile
$ mvn --version
Apache Maven 3.8.4 (Red Hat 3.8.4-3.amzn2023.0.5)
Maven home: /usr/share/maven
Java version: 21.0.6, vendor: Amazon.com Inc., runtime: /usr/lib/jvm/java-21-amazon-corretto.x86_64
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "6.1.130-139.222.amzn2023.x86_64", arch: "amd64", family: "unix"
ビルドタスクごとにJavaのバージョンを設定できれば本番環境は旧バージョン、テスト環境では検証したい新バージョンで動かすことも可能なのでぜひお試しください。