Java8アップデート【2017.11】
仕事で長らくJava7で動かしていたサービスをJava8へとアップデートしました。
最初はJava9も正式リリースされたタイミングであったため、検討もしたのですが、諸々あって一旦Java8へとアップデートすることに決めました。
どのように作業していったか備忘録用に残しておきます。
ざっくりやったことを箇条書きにすると下記のような感じ
- 自分のローカル環境でJavaをアップデート
- chefのJavaをアップデート
- JenkinsのJavaをアップデート
- 各種開発環境(development, staging)のJavaをアップデート
- staging環境でチームメンバー全員で動作確認
- 本番リリース
- メンバーのローカル環境をJava8にしてもらうよう共有
- 新機能を積極的に使ってもらうための布教活動
自分のローカル環境でJavaをアップデート
普段の開発は各自のローカル環境で行っています。まずは自分の環境で正常に動作するかを確認しました。
chefのJavaをアップデート
サーバーの設定管理をchefで行っているのでchefをアップデートしました。会社共通のrecipeを使用しているようでしたが特にメンテされてなさそうだったので独自にrecipeを作成してそちらを使用するようにしました。chefでexportコマンドでJAVA_HOMEを設定しようとしたのですが、その後サーバーにsshしても反映が確認できず。最終的には下記のようなコマンドをchef実行時に実行するようにして解決しました。
alternatives --set java /usr/java/#{node['jdk_version']}/jre/bin/java
JenkinsのJavaをアップデート
CIツールにJenkinsを使用していて、プロジェクトのcompileをJenkins上で行っていたこともあり、Jenkinsサーバー上のJavaもアップデートする必要がありました。
こちらはchefで管理していなかったため、直接jenkinsサーバーに入ってyumでJava8をインストール。
その後Jenkinsの管理→システムの設定からJAVA_HOMEを変更して完了。
staging環境でチームメンバー全員で動作確認
1時間ほどチームメンバーのスケジュールを押さえて動作確認に協力してもらいました。バッチ処理やAPIの動作は見れる範囲で自分の方で確認しました。コレをやったおかげで幾つか問題に気づけました。
本番リリース
staging環境での動作確認が無事に終了したのでいよいよ本番にリリースしていきます。
作業はすぐに異常に気がつけるように常にサービスのログを監視しながら進めました。
当初はサービスの性質上月初に重めのバッチ処理が走るなどあり、月末リリースを避けてJavaのアップデートによるバグの発見のための期間を取ろうと12月頭リリース予定としていたが、年末年始にダウンされても困るので結局11月下旬に本番にあげることにした。
新機能を積極的に使ってもらうための布教活動
大した話じゃないけどせっかくバージョンアップしたんだしスキルアップ、保守性アップ等の観点から新しい機能は積極的に使っていきたいよね
ってことで当然自分で勉強して積極的に使っていくようにしてる
またwebで見つけた良かった記事なんかもシェアしていく