jenkins学習メモ1 インストール～環境構築

## はじめに
船井総研デジタルのoswです。業務でjenkinsに触れることになったので学習記録を残します。参考になる方がいらっしゃれば幸いです。

## このシリーズのゴール
下記をゴールとします。
- 閉じたLAN環境にあるマシンにjenkins環境を構築（別マシンからjenkinsにアクセス）
- 手動でジョブを起動し、githubリポジトリをクローン / 単体テストを走らせる

## 学習環境
- Windows 11 (WSL2 Ubuntu)
- Rocky Linux 9.1
- jenkins 2.375.3

環境は Ubuntu --- ssh --> Rocky で接続し、Rocky上にjenkinsを構築します。
ただ、Rocky自体は既にファイルサーバとして使っているため、jenkinsのインストール先の環境構築は終了しているものとします。

## jenkinとは
CI/CDを実現するOSS。各種CI/CDツールを世界と日本のトレンドで比較してみると全体的な傾向は変わらないものの、jenkinsは2011年リリースから着実に地位を確立しています。一方で日本ではGithub Actionsが急速に伸びているようです。Github Actionsは2019年にリリースされた新しいものではありますが、凄まじい勢いです。

業務ではjenkinsを使う現場が多いイメージですので仕事ではjenkins、プライベートでGithub Actionsを使って両方の知見を蓄積しておくと良いかもしれないですね。

### 世界のトレンド
![世界のトレンド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/e85edfc4-466b-0dd3-2607-d3a3475bfd3e.png)

### 日本のトレンド
![日本のトレンド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/603d8750-d8a5-653a-43d9-73731befeae3.png)


## jenkinsのインストール
### Javaのインストール
jenkinsはjavaが必須、かつ[java11以降を要求](https://www.jenkins.io/blog/2022/06/28/require-java-11/)するようです。私はRockyにjavaを入れていないのでインストールから始めます。
```bash:javaのインストール
❯ sudo dnf -y install java-11-openjdk
...(略)...
❯ java -version                                                                                                                                     openjdk version "11.0.18" 2023-01-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.18.0.10-2.el9_1) (build 11.0.18+10-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.18.0.10-2.el9_1) (build 11.0.18+10-LTS, mixed mode, sharing)
```

### jenkinsをインストール
jenkinsをインストールするにはyumレポジトリの追加、及び署名チェックのための公開鍵をインストールする必要があります。
下記でレポジトリ、公開鍵、jenkinsを順にインストールします。[公式サイト](https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos)のコマンドをそのまま実行しています。
```bash:jenkinsのyumrレポジトリをインストール
❯ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
❯ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
❯ sudo dnf -y install jenkins
```

## jenkinsへアクセス
### ファイアウォールの設定
今回はjenkins用のマシンを用意し、それにブラウザでアクセスしていじる構成にしています。
また、jenkinsはデフォルトで8080ポートを使うようですので、ファイアウォールを次のように設定します。
（jenkinsをインストールするマシンとブラウザを起動するマシンが同じならファイアウォールの設定は不要です）
```bash:ファイアウォールの設定を変更
❯ sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
❯ sudo firewall-cmd --reload
```

### jenkinsの自動起動
私の環境はあくまで学習用で、Rockyはもともとファイルサーバとして稼働しているので普段からjenkinsが動いている必要はありません。
そのため、自動起動は設定しませんがお好みで設定してください。
```bash:OS起動時にjenkinsを起動させる
❯ sudo systemctl enable jenkins
```

### jenkinsを起動してアクセスする
```bash:jenkinsを起動する
❯ sudo systemctl start jenkins
```

jenkins起動後、ブラウザで`<jenkinsを実行しているPCのIP>:8080`へアクセスします。インストール、アクセス先が同じマシンなら`localhost:8080`にアクセスします。

## jenkinsの設定
### 初回ログイン
jenkinsへ初回アクセスすると下記画像の画面が表示されます。指示通り、`/var/lib/jenkins/secrets/initialAdminPassword`を開き、中のパスワードをUIに入力します。
![Getting Started.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/21d124b0-2734-5606-ce6b-580248f0092f.png)

### 初回ログイン時のプラグインインストール
[Install suggested plugins]を選択します。
![プラグインの選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/d6aa497a-9a54-325b-f418-de1fea78e0fe.png)

プラグインのインストールが完了するまで待ちます。
![プラグインのインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/c351a176-2d34-de1d-16de-ab3dc18716a0.png)

### 初回ログイン時のユーザの設定
jenkinsにログインするためのユーザ情報を設定します。
![ユーザの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/93233ba1-dab9-6da9-fcae-acee31439745.png)

`Instance Configuration`はそのまま「Save and finish」をクリックしてjenkinsの初回ログイン設定は完了です。

### ログイン後にプラグイン追加
[ダッシュボード] -> [Jenkinsの管理] -> [プラグインの管理]を選択するとプラグインマネージャが開きます。

#### 補足
ダッシュボード画面右上に赤で通知が表示されていますが、今回これは無視します。jenkins（プラグインなどを含む）が動く単位をノードと呼ぶらしく、jenkins本体を実行するノードとビルドなどを実行するノードを分けた方が良い、という内容のようです。
これについては用語なども含め、整理した上で別の記事にします。

![ダッシュボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/f083e4b3-603f-e484-de66-4891804d3fa5.png)
![jenkinsの管理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/5f31090a-2d3e-47b4-b759-0d638ff63057.png)

プラグインマネージャの[Available plugins]を選択し、テキストボックスに下記プラグイン名を入力、全てを選択後、[Download now and install after restart]をクリックします。

1. Run Condition
1. Run Condition Extras
1. Build Keeper
1. Conditional BuildStep
1. Flexible Publish

![プラグインの追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/b60e9f06-acdd-3628-dfdf-744cc8f319d4.png)

### 再起動
画面遷移後、「インストール完了後、ジョブがなければJenkinsを再起動する」にチェックを入れると自動的に再起動されます。
![jenkinsリロード画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/e666c398-0aca-7c50-0c6a-275d6c961b4f.png)

## おわりに
jenkinsの環境構築はこれで完了です。