AmazonLinux2023にJenkinsをインストールする

# 概要
これのAmazonLinux2023版です。

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

AmazonLinux2→AmazonLinux2023に乗り換えるにあたってローカルにAmazonLinux2023(以下AL2023)を立てて検証中なのでEC2で立てたとき用にメモ。

# 環境
- Windows 11 Pro
- VirtualBox 7.0.12
- Amazon Linux 2023
  - Operating System: Amazon Linux 2023.4.20240319
  - Kernel: Linux 6.1.79-99.167.amzn2023.x86_64

# 構築手順
## 1. JDKをインストールする
AL2023にはデフォルトでJavaは入っていないのでまずはJDKを入れます。

https://qiita.com/tamorieeeen/items/13c7f8ea7c38a0146325

## 2. Jenkinsのリポジトリを追加

searchしたけどさすがになさそうなのでリポジトリを追加します。

```console
$ dnf search jenkins
No matches found.

$ sudo dnf config-manager --add-repo=https://pkg.jenkins.io/redhat-stable/jenkins.repo
Adding repo from: https://pkg.jenkins.io/redhat-stable/jenkins.repo

$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
```

相変わらず接続先のbaseurlがhttpなのでhttpsに変更しておきます。

```console
$ cat /etc/yum.repos.d/jenkins.repo 
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat-stable
gpgcheck=1

$ sudo vi /etc/yum.repos.d/jenkins.repo

baseurl=https://pkg.jenkins.io/redhat-stable
```

## 3. Jenkinsをインストールする

```console
$ sudo dnf -y install jenkins
Jenkins-stable                                                                                                22 kB/s |  28 kB     00:01    
Dependencies resolved.
=============================================================================================================================================
 Package                         Architecture                   Version                                Repository                       Size
=============================================================================================================================================
Installing:
 jenkins                         noarch                         2.440.2-1.1                            jenkins                          82 M

Transaction Summary
=============================================================================================================================================
Install  1 Package

Installed:
  jenkins-2.440.2-1.1.noarch

$ rpm -qa | grep jenkins
jenkins-2.440.2-1.1.noarch
```

## 4. Jenkinsを起動する
`Starting jenkins : [  OK  ]`みたいな表示が何も出なかったからstatus確認したらちゃんと起動してました。

```console
$ sudo systemctl start jenkins
$ systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
     Loaded: loaded (/usr/lib/systemd/system/jenkins.service; disabled; preset: disabled)
     Active: active (running) since Mon 2024-04-08 15:40:19 JST; 10s ago
   Main PID: 1846 (java)
      Tasks: 46 (limit: 1099)
     Memory: 517.8M
        CPU: 30.558s
     CGroup: /system.slice/jenkins.service
             └─1846 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
```

## 5. Jenkinsの初期設定をする

`http://(IP address):8080`にアクセスして画面に従って初期設定をします。

### Unlock Jenkins

初期パスワードを確認して入力します。

```console
$ sudo less /var/lib/jenkins/secrets/initialAdminPassword
```

### Customize Jenkins

`Select plugins to install`を選択して必要なプラグインのみインストールします。後からでもインストールできるのでとりあえず必要そうなものだけ選びます。

- Folders
- OWASP Markup Formatter
- Build Timeout
- Credentials Binding
- Timestamper
- Workspace Cleanup
- Git
- GitHub
- Locale

### Create First Admin User

管理者ユーザーを登録します。

- ユーザー名：ログインする際のユーザーID
- パスワード：ログインする際のパスワード
- パスワードの確認：パスワードを再度入力
- フルネーム：表示名
- メールアドレス：メールアドレス

### Instance Configuration

デフォルトは`http://(IP address):8080/`なので、JenkinsのURLを変更したい場合は入力します。私は`http://(IP address):8083/jenkins/`に変更しました。

### 設定ファイルを変更して再起動する

```console
$ sudo vi /usr/lib/systemd/system/jenkins.service

Environment="JENKINS_PORT=8083"
Environment="JENKINS_PREFIX=/jenkins"

$ sudo systemctl daemon-reload
$ sudo systemctl restart jenkins
```

`http://(IP address):8083/jenkins/`にアクセスして初期設定で入力した管理者ユーザーでログインできればOK！

## 6. tmpdirの変更

tmpdirの容量が足りないとノードがオフラインになってしまってビルドできないのでJenkinsの管理 > Nodes でmasterノードの状態を確認して足りなかったら変更します。

私の環境では空きテンポラリ容量の不足でノードがオフラインになっていたので変更しました。ちなみに、Jenkinsの管理 > システム情報 で`java.io.tmpdir`に出ているのが現在のtmpdirです。

### tmpdirの作成

```console
$ sudo mkdir /var/lib/jenkins/tmp
$ sudo chown jenkins:jenkins /var/lib/jenkins/tmp
$ ls -l /var/lib/jenkins/ | grep tmp
drwxr-xr-x.  2 jenkins jenkins     6 Apr 22 14:48 tmp
```

### tmpdirを変更する

`JAVA_OPTS`に`-Djava.io.tmpdir=$JENKINS_HOME/tmp`を追加します。

```console
$ sudo vi /usr/lib/systemd/system/jenkins.service

Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.io.tmpdir=$JENKINS_HOME/tmp"

$ sudo systemctl daemon-reload
$ sudo systemctl restart jenkins
```

# 参考
- [Jenkins Redhat Packages](https://pkg.jenkins.io/redhat-stable/)
- [【 dnf 】コマンド（応用編その7）――リポジトリを追加する](https://atmarkit.itmedia.co.jp/ait/articles/2001/31/news006.html)
- [【Linux】systemctl daemon-reloadだけでは環境変数は反映はできまてん！](https://zenn.dev/tochisuke/articles/c24980c7cfabaa)