初心者向けCI/CD実践 - Part2 - CI/CDツール構築編

# CI/CD環境を構築
本連載は、「CI/CDを実践してみたい」という超初心者向けの内容となっています
enterpriseレベルやproductionレベルの導入に際して、「CI/CDとは？」という感覚をつかむものとなれば幸いです。
利用するツール等はこちらで選定していますので、別のツールを利用する場合は、適宜お調べください。
大まかな内容としては、以下のようなフローとなります

>1. 環境構築
2. **CI/CDツールの構築<-今回はここを説明**
3. 開発プロジェクトの準備
    - GitHubにプロジェクトデータを登録
    - Jenkins Pluginのインストール
    - 手動ビルド
4. CI/CDツールとその他ツールの併用例
    1. VCSとの協調
    2. テストツールとの協調
    3. インスペクションツールとの協調
5. pipelineの実現

## <font color="Red">概要</font>
>- Jenkinsコンテナの実行
- Jenkins初期設定
- gmailを用いてビルド結果を自動通知
- JDK/Ant/Mavenの自動インストール

### CI/CDツールの構築
CI/CDツールには、以下のようなものがある
>- Jenkins
- Drone
- CircleCI
- AWS CodeBuild
>- Tekton　

今回は```Jenkins```を導入する

### Jenkinsコンテナの実行
Jenkinsの[公式](https://www.jenkins.io/doc/book/installing/docker/#customizing-jenkins-with-plugins)を参考にJenkinsコンテナを実行し、初期設定を行う

最初にnetworkおよびvolumeの設定を行う

```
$ docker network create jenkins
$ docker volume create jenkins-docker-certs   //Dockerデーモンに接続するために必要なDockerクライアントのTLS証明書を共有
$ docker volume create jenkins-data   //データ永続化に利用
$ docker network ls   //新規作成されたbridge network及びdefaultの3つのnetworkがある
$ docker volume ls
```

続いて、jenkinsコンテナとして```jenkinsci/blueocean```を実行

```
$ docker container run --name jenkins-blueocean --rm --detach \
  --network jenkins --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
  --publish 8080:8080 --publish 50000:50000 jenkinsci/blueocean
```

これで、jenkinsが実行される

### jenkins dashboardへの初回ログイン
jenkinsのdashboardに入るためには、ブラウザ上で```http://localhost:8080/```と入力
passwordとして、コンテナを実行した際の値を入力
もしくは、下記コマンドを実行し初期パスワードを確認

```
$ docker exec jenkins-blueocean cat /var/jenkins_home/secrets/initialAdminPassword
```

続いて、pluginのインストールとユーザの作成を行う
Customizing Jenkins with pluginsにて以下のどちらかを選択
　　　```Install suggested plugins```（基本的にこちら）
　　　```Select plugins to install```

ユーザの作成では、以下のようにadmin権限を持った新規ユーザを作成

![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/beb9f47b-0120-c8a7-c20b-3f472767ada6.png)

これで初回ログイン時の設定は終了

### jenkinsの初期設定
初期設定では、以下の2点に関して設定を行う
>- ビルド結果のメール通知
- CI実現に必須なツールのインストール

初めに、「ビルド結果のメール通知」を設定
dashboard > 左ペインの```Jenkinsの管理``` > 中央ペインの```システムの設定``` > 

Jenkins Locationにて```Jenkins URL```,```System Admin e-mail address```を入力
```System Admin e-mail address```は通知メールの差出人

![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/23dc28b0-4a9e-6074-66b6-9fea64c403f2.png)


E-mail Notificationにて以下のように設定
test mailの宛先を入力した後、```Test configuration```をクリック

![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/9656072e-567f-b024-8f85-e6ddaa6c5ae7.png)

クリック後に```Email was successfully sent```と表示されればメールが届いている
もし、```Failed to send out e-mail```

```
javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8  https://support.google.com/mail/?p=BadCredentials q14sm9594426pjp.43 - gsmtp

~~
```

と表示された場合、Googleアカウントの「安全性の低いアプリのアクセス」が```無効```（defaultは無効）
有効にする場合は、[こちら](https://qiita.com/miriwo/items/7c5a451a35cecdd72085)を参考にしてください


続いて、「CI実現に必須なツールのインストール」を設定
dashboard > 左ペインの```Jenkinsの管理``` > 中央ペインの```Global Tools Configuration``` >

以下の通り入力しsave

![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/db340aa5-1dfa-6b25-fac3-3b9792b082df.png)

JDKのインストールに当たって、Oracleアカウントが必須なため、リンク先からユーザ名とパスワードを入力（入力前は"I agree to the Java SE ~~"付近にエラーが表示されている）
もしアカウントを持っていない場合、そこからアカウント作成が可能

![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/670f07c2-b0d7-ac96-9f2b-25bd2ed76ad1.png)