AWSのEC2でjenkinsの環境構築_自力でインストールしてみよう

# 目次
1. 前置き
2. 環境
3. EC2の操作
4. jenkinsの準備＆動作確認
5. まとめ
6. 余談

# 1. 前置き
この記事ではEC2にjenkinsをインストールしてhello worldの確認をする。
Linuxの勉強を兼ねてるので無駄に自力で環境構築するが、手っ取り早く環境構築したいだけなら「6.余談」を参照すること。
AWS・jenkinsの用語や知識は解説しないので他の記事を参照すること。

# 2. 環境
今回構築したEC2の環境は以下

```
OS : Ubuntu 22.04
インスタンスタイプ : t2.micro
java : 11.0.15
jenkins : 2.332.3
```

途中でコマンドラインからEC2のサーバーにアクセスしますが、その環境はWindows 10です。

# 3. EC2の操作

以下の3ステップでクラウド上にUbuntuの仮想環境を構築する。

## 3-1. AWSのアカウントを作成

アカウントの作成は特段難しいことはないと思うので割愛。IAMユーザーは今回使用しないので、ルートユーザーでログインする。IAMの権限によってはEC2が実質使えないこともあるようなので上手くいかない場合は確認すること。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/6e213ef8-d44e-4e6b-c44a-2095c12cc459.png)


## 3-2. EC2のインスタンスを作成
EC2のページに入ると、左側のメニュー欄にインスタンスがあるのでクリックし、インスタンスの一覧を表示する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/cfd85e6d-923e-c259-f0f2-fbbefae42b77.png)

インスタンスの一覧の右上に「インスタンスを起動」があるのでクリックし、インスタンスの設定画面に移動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/b8aea242-cecd-c4a1-27e3-bd47db098887.png)

ここからサーバーの設定をするが、基本的にはデフォルトのままにする。まずはサーバーの名前を設定。
※インスタンスを作成するためにのUIが新しくなってて、ネットの過去情報が使いにくいものになってしまってた...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/7612599c-545c-3d8f-30ba-0feb648bf7cd.png)

続いてOSの選択。ここではUbuntuを選ぶ。2022/5/19現在だとデフォルトの設定が22.04になっているので、そのまま22.04を使用する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/49b1326d-23f5-1e47-08e7-ec78073003a5.png)

インスタンスタイプの選択はデフォルトのままにする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/fc759af9-931f-4ce0-ccfc-3783a4adb29f.png)

キーペアの作成は、事前に作ってあるならプルダウンから選択。無いなら「新しいキーペアの作成」から暗号鍵を作成すること。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/8aa170f5-0f00-f014-683b-a348c00de1b9.png)

ネットワークの設定は、jenkinsの準備だけなら特に必要ないのでデフォルトのままにする。後々HTTP接続したくなった時は、後述するセキュリティグループで設定すればよい。鍵情報が洩れなければ特に問題ないが、アクセスの許可を任意の場所から特定の場所に変更するとセキュリティ的により安全になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/a34f2b34-e61a-a09f-2c44-ee1ddb91b883.png)

ストレージの設定と高度な詳細もデフォルトのままにして、インスタンスを起動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/4bbacffc-9b15-428a-5392-bd3d92f6351f.png)

少し時間を置いてインスタンスの一覧を見ると以下のように状態が実行中になっているのが確認できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/646dfa76-b737-e09e-2d71-5eeb9462fb30.png)

## 3-3. セキュリティグループの設定

簡単に言うとポート解放みたいなもの。以下画像のように8080のポートだけ解放する必要があるので設定すること。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/6a6f1317-9153-c903-4799-32ad71bd04e4.png)

以上でEC2側の準備が完了した。ここからEC2で構築したLinuxにjenkinsをインストールする。

# 4. jenkinsの準備＆動作確認

以下の3ステップでjenkinsの動作確認をする。

## 4-1. EC2で作成したlinuxにアクセスする
以下のインスタンスIDの欄にリンクがあるのでクリックする。（画像では白塗りで消されてます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/cf4c8b45-512e-abc1-aef3-d9c5791c6fce.png)

インスタンスの概要ページに飛ぶので、右上にある接続をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/db4a8315-6500-b0d6-c5dd-2868d9051d53.png)

SSH接続をするためのコマンドが例：の下の□マークをクリックするとコピーできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/895b3e2f-f66c-8424-31b8-8aa9d5bfa4ed.png)

## 4-2. コマンドを打ってjenkinsをインストールする

**プライベートキーファイルがあるフォルダ**のコマンドプロンプト(以下、cmd)を開いて、コピーしたコマンドを張り付ける。
※キーがないフォルダでコマンド打っても、エラー吐かれます。

```
C:\Users\キーがあるフォルダ>ssh -i "キー名" ubuntu@白塗りの部分

途中で確認が求められるのでyesをする
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
```

成功すると以下のようにパスがubuntuになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/36949c65-d070-5012-545c-28b88e95e0b6.png)

ここからUbuntuにjavaとjenkinsをインストールする。（jenkinsを使うにはjavaのインストールが必須です）
```
【Javaのインストール】
sudo apt update
sudo apt install openjdk-11-jre
java -version

【jenkinsのインストール＆起動】
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt-get update
sudo apt-get install jenkins
sudo systemctl enable jenkins
sudo systemctl start jenkins

【jenkinsの初期ログインパスワードを入手】
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

```

jenkinsのインストールについて参考にしたのは[jenkinsの公式ページ](https://www.jenkins.io/doc/book/installing/linux/#debianubuntu)になります。
初期ログインパスワードは後で使用するので事前に取得しておきます。

この後ブラウザからJenkinsにログインするために、インスタンスのpublic IP addressを入手します。インスタンスの概要からコピーしてください（以下画像の赤塗り）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/53422741-06ab-766f-f592-59edec0dae18.png)

その後、適当なブラウザのタブで以下の入力をする。
```
http://(public IP address):8080
```
成功すると、jenkinsの初期画面が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/abf74e47-08f1-5524-8f8c-fffadd47e01b.png)


## 4-3. jenkinsでHello worldを表示する

jenkinsの細かい設定のことはここで解説しません。なるべく最小手順でHello worldを表示するようにします。
まずは推奨されているプラグインをインストールします（左側の四角）。ダウンロードはそれなりに時間かかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/2d474c15-039a-1a89-51d8-4830a8a479f1.png)

ダウンロードが終了するとadminユーザー作成ができるようになります。適宜入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/68b96973-aa08-7f44-4d0b-7863abf307e5.png)

以下の画面でますが、右下のSave and finishをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/54747fc7-2dc4-b568-cb84-ed049299523f.png)

以下の画像の画面が出てくれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/1e879c56-2269-e2d2-5230-2bdead7d183a.png)

JenkinsのHello Worldは検索すると、いくらでも出てくるので簡略化します。
新規ジョブ作成 > Job名記入 > フリースタイル・プロジェクトのビルド > OK
をすると、ビルドの設定画面が出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/8939fb68-7c9b-a3ac-7ff6-df431088d21a.png)

hello worldを出すためのコマンドを記入します。
ビルド > ビルド手順の追加 > シェルの実行 > シェルスクリプト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/19de5bf7-bc2a-8e6f-6981-192225d90411.png)

最後に保存するとプロジェクトが生成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/b97d33e5-7ce3-ae41-2949-ee124f594b26.png)

あとはビルド実行をして、実行履歴からコンソール出力の内容を見て、"Hello world"が出ていれば成功です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/dae48e64-512e-0329-c522-28a48de847cc.png)

# 5. まとめ
今回はLinuxの練習をするためにjenkinsをダウンロードしてHello worldを出力しました。
さらっと流してますが、Jenkinsをダウンロードするためのコマンドは、ネットの情報が古かったりしてかなり引っ掛かりました。その点AWSは人気も相まって詰まる点はなかったです（強いて言えば専門用語を勉強しなきゃ意味不明だったことくらい）。Linux環境を簡単に準備できるようになったのは、AWSなどのクラウドサービス様様だなぁと思います。

# 6. 余談

EC2でjenkinsの環境構築するのに最も簡単な手段は、サードパーティーが用意してくれてるAMIを選ぶことが最適だと思います（以下画像）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2635057/b7e87efc-b7fd-0c1a-81cf-bccfb5620847.png)

検索すれば使い方出てくるので、ぜひそっちを参照してね[（例）](https://mseeeen.msen.jp/build-jenkins-on-aws/)。

話変わるけど、クラウドサービスを使う理由はLinuxを弄るのに仮想環境をローカルで作ってたらPCの容量足りなくなってクラウドサービスに手を出すことにしました。AWSを使わなくても良かったけど、有名だからやってみようくらいの気持ちで手を出しました。AWSは1年しか無料期間ないので、永続的に無料なGCPのクラウドサービス使うことになるかも。あとクラウドは実家帰った場合でも簡単にログインできて遊べるから便利だよね。
ただこれを書いている辺りでWSL2を使えば実は自分の使い方的に問題なかったのでは？と思っているのでWSL2に挑戦してみようかなと考えている