Linuxに立てたJenkinsを新しいバージョンにアップデートする

# 概要

Amazon Linux2に立てたJenkinsをバージョンアップしたい。warを入れ替えるだけだから、と軽い気持ちで始めたら色々とエラーで引っかかったので備忘録。

# 環境

- Amazon Linux2
  - java-1.8.0-openjdk.x86_64
- Jenkins 2.282

ちなみにJenkinsを立てた時の話はこちら。

https://qiita.com/tamorieeeen/items/15d90adeebbf8b408c78

# 手順

## 新バージョンのダウンロードURLを確認

左側メニューの「Jenkinsの管理」を確認すると、新しいバージョンのダウンロード案内が出ていると思うので、そのダウンロードリンクのURLをメモします。
※赤いゾーンは警告なので、これが出る前にアップデート推奨です(笑)
![jenkins_update.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265229/2ca2e516-8206-49b2-56d7-c93ea5971f41.png)

```
https://updates.jenkins.io/download/war/2.365/jenkins.war
```

## Jenkinsを停止する

```
$ sudo systemctl stop jenkins
$ sudo systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
   Active: inactive (dead) since Mon 2022-08-29 15:14:13 JST; 14s ago
```

## 現在のJenkinsをバックアップ用にリネームする

```
$ cd /usr/share/java/
$ sudo mv jenkins.war jenkins.war.bak_2.282
$ ls -l
total 70208
-rw-r--r-- 1 root root 71890854 Mar  2  2021 jenkins.war.bak_2.282
```
※2023/03/29追記
warファイルの場所が`/usr/lib/jenkins/`から`/usr/share/java/`に移動したみたいなので変更しました。
参考：[Default location of Jenkins war](https://community.jenkins.io/t/default-location-of-jenkins-war/1999)

## 新しいバージョンのJenkinsをダウンロードする

```
$ sudo wget https://updates.jenkins.io/download/war/2.365/jenkins.war
```

### SSL証明書のエラーが出たら

Let's Encryptの証明書を使っているサイトにアクセスした際にSSL証明書のエラーが発生することがあるらしい。

```
--2022-08-29 15:19:48--  https://updates.jenkins.io/download/war/2.365/jenkins.war
Resolving updates.jenkins.io (updates.jenkins.io)... 52.202.51.185
Connecting to updates.jenkins.io (updates.jenkins.io)|52.202.51.185|:443... connected.
ERROR: cannot verify updates.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
  Issued certificate has expired.
To connect to updates.jenkins.io insecurely, use `--no-check-certificate'.
```

調べたところ、証明書をアップデートするといけるらしい。

```
$ sudo yum update ca-certificates
$ sudo wget https://updates.jenkins.io/download/war/2.365/jenkins.war

$ ls -l
total 161496
-rw-r--r-- 1 root root 93475434 Aug 23 22:19 jenkins.war
-rw-r--r-- 1 root root 71890854 Mar  2  2021 jenkins.war.bak_2.282
```

無事にダウンロードできました。

## Jenkinsを起動する

```
$ sudo systemctl start jenkins
$ sudo systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
   Active: active (exited) since Mon 2022-08-29 15:42:22 JST; 24s ago
```

### 起動はしたが接続できない場合

statusはactiveになっていますが、ブラウザからつながらない。statusの文をよく見るとこんな文字が。

```
Jenkins requires Java versions [17, 11]
```

Javaのバージョンが古いことに原因がありそうなので、OpenJDKディストリビューションのAmazon Corretto 11を入れます。
※その前にJenkinsは一旦停止させます

```
$ sudo yum install java-11-amazon-corretto-headless
$ java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)

$ sudo alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.amzn2.0.1.x86_64/jre/bin/java)
   2           /usr/lib/jvm/java-11-amazon-corretto.x86_64/bin/java

Enter to keep the current selection[+], or type selection number: 2
$ java -version
openjdk version "11.0.16.1" 2022-08-12 LTS
OpenJDK Runtime Environment Corretto-11.0.16.9.1 (build 11.0.16.1+9-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.16.9.1 (build 11.0.16.1+9-LTS, mixed mode)
```

再びJenkinsを起動すると、無事にブラウザから接続できました。

# 参考
- [LetsEncryptのROOT証明書の期限が切れたら古いOSからアクセスできなくなって困った](https://beyondjapan.com/blog/2021/10/letsencrypt-dst-root-ca-x3-expiration/)
- [EC2 インスタンスの Let's Encrypt 証明書の有効期限切れエラーを解決するにはどうすればよいですか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-expired-certificate/)
- [Amazon Corretto 11 Amazon Linux2 のインストール手順](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/amazon-linux-install.html)