AWS CodeBuildで手動インストールしたJDKを利用する
発生は稀だと思いますが、Javaアプリケーションのbuildで利用しているJDKをAWS Codebuildのimageに手動インストールする必要が生じました。
英語文献も含めていくつか記事があったのですが、AWS公式の処理を真似た点において、本記事が一番確実な方法と思われます。(2024/12時点)
過去の同様の内容にトライしている記事
利用したimageは以下です
aws/codebuild/amazonlinux2-x86_64-standard:5.0
前提)AWS Codebuild imageのpre install されているJDK
利用するimageによって異なりますが、AWSの提供するCodebuild imageでは以下のruntimeが利用できます。(2024/12時点)
- corretto8
- corretto11
- corretto17
- corretto21
利用するruntimeは、build定義(一般的にはbuildspec.yml
ファイル)に記載します。
version: 0.2
phases:
install:
runtime-versions:
java: corretto15
これらのruntime以外のJDKを今回は利用します。
CodeBuildでのruntimeの利用の動作
当初独自JDKを利用する時に指定がうまくいきませんでした。
そこで、default runtimeを指定時のCodeBuildのログを確認すると、以下のような処理を実行していました。
[Container] 2024/11/11 10:30:03.958011 Running command echo "Installing corretto(OpenJDK) version 8 ..."
Installing corretto(OpenJDK) version 8 ...
[Container] 2024/11/11 10:30:03.962886 Running command export JAVA_HOME="$JAVA_8_HOME"
[Container] 2024/11/11 10:30:03.967415 Running command export JRE_HOME="$JRE_8_HOME"
[Container] 2024/11/11 10:30:03.971473 Running command export JDK_HOME="$JDK_8_HOME"
[Container] 2024/11/11 10:30:03.975638 Running command for tool_path in "$JAVA_HOME"/bin/*;
do tool=`basename "$tool_path"`;
if [ $tool != 'java-rmi.cgi' ];
then
rm -f /usr/bin/$tool /var/lib/alternatives/$tool \
&& update-alternatives --install /usr/bin/$tool $tool $tool_path 20000;
fi;
done
このログを参照して、結局AWSの方でも特定のruntimeのJDKPATHを指定して切り替えているのだと理解し、以下の通り実行しました。
version: 0.2
phases:
install:
commands:
# 利用するJDKを揃えるため内部利用のJDKを手動でインストール
- echo "===== check the default java version(to be changed) ====="
- java -version
- tar -xzf /opt/[target_jdk].tar.gz -C /opt/
- echo "configure java command"
- export JAVA_HOME=/opt/[target_jdk]
- echo $JAVA_HOME
- export PATH=$JAVA_HOME/bin:$PATH
- export JRE_HOME="$JAVA_HOME"
- echo $JRE_HOME
- export JDK_HOME="$JAVA_HOME"
- echo $JDK_HOME
- java -version
# システム全体で手動インストールしたjavaを利用するように変更
- |-
for tool_path in "$JAVA_HOME"/bin/*;
do tool=`basename "$tool_path"`;
if [ $tool != 'java-rmi.cgi' ];
then
rm -f /usr/bin/$tool /var/lib/alternatives/$tool \
&& update-alternatives --install /usr/bin/$tool $tool $tool_path 200;
fi;
done
- java -version
- javac -version
この方法で、独自に指定したJDKをCodeBuildで利用できるようになりました。
補足) alternativesコマンドについて
今回初めて知ったのですが、利用するライブラリのversionを切り替えに利用する alternatives
コマンドがあります。
JDKの切り替え処理でもこのコマンドを利用しています
【Java】複数バージョンのJavaを切り替えて使う方法 #Linux - Qiita
alternatives経由でJavaを使うならjavacも指定しよう #Linux - Qiita
alternativesコマンドでJavaのバージョンを切り替える@Java - tanakahdaのプログラマ手帳
javaのalternatives切り替えメモ - nori3tsu's blog
Discussion