初心者向けCI/CD実践 - Part3 - 開発プロジェクトの準備編

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

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

## <font color="Red">概要</font>
>- ```GitHub```のリモート、ローカルレポジトリの設定 
- Jenkins Pluginの自動インストール
- ジョブの作成、実行、結果の確認

### GitHubにプロジェクトデータの登録
CI/CDツールの利用例を理解するにあたって、[Jenkins実践入門](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E7%AC%AC3%E7%89%88-Jenkins%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E2%80%95%E2%80%95%E3%83%93%E3%83%AB%E3%83%89%E3%83%BB%E3%83%86%E3%82%B9%E3%83%88%E3%83%BB%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%82%92%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%99%E3%82%8B%E6%8A%80%E8%A1%93-PRESS-plus/dp/4774189286)のモデルプロジェクトを利用させていただく

最初にプロジェクトデータの登録を行う
（事前にGitHubアカウントの作成とログインを済ませておく）
下図の通り、リンク先で右上```Fork```ボタンをクリック
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/ac9e8d48-4f6e-239c-dc9c-74e9839473c6.png)

すると、自分のレポジトリ内に```<GitHubアカウント>/Jenkins_Practical_Guide_3rd_Edition```が現れる
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/12820c90-0da4-5692-32bb-7688fddb2cff.png)


続いて、プロジェクトデータをローカルレポジトリで取得する

リモートレジストリ上で```<GitHubアカウント>/Jenkins_Practical_Guide_3rd_Edition```をクリックした後、リモートレジストリ上のブランチを指すリンクをコピーする

![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/d7c6e20b-5e0f-a86b-199a-0dc2fd60bc14.png)

terminal上で以下のコマンドを実行

```
$ pwd
$ mkdir <demo用directory>   //demo開発用のdirectryを適宜作成
$ cd <demo用directory>
$ git clone https://github.com/tem-individual/Jenkins_Practical_Guide_3rd_Edition.git sampleproject
```

以下のようになっていれば、成功

```
$ cd sampleproject
$ ls -a
.  ..  .git  Jenkinsfile  LICENSE  build.gradle  config  pom.xml  readme.md  src
$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<GitHubアカウント>/Jenkins_Practical_Guide_3rd_Edition.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
```

### Pluginのインストール
今回のdemo開発では、下記4つのpluginをインストールします
>- JaCoCo Plugin
- Checkstyle Plugin
- FindBugs Plugin
- StepCounter Plugin

Jenkins Pluginのインストール方法は2通りあります
>- アップデートサイトを経由したインストール
- 自分でダウンロードしてインストール

**注意**
>「自分でダウンロードしてインストール」を実施する際は、インストールするJenkins Pluginの依存性を確認する必要性がある。
「アップデートサイトを経由したインストール」では、依存性のあるその他のPluginも考慮して自動でインストールしてくれるので、基本的には前者を選択

インターネットアクセスが可能な環境なので、前者で実施
手順はこちら
1. Jenkins dashboard
2. 左ペインの```Jenkinsの管理```
3. 中央ペインの```Pluginの管理```
4. ```利用可能```タブの選択
5. 検索窓に```JaCoCo```と入力し以下のようにインストール

![図13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/3e9c3bf6-69f8-43ac-5f75-571c60babcee.png)

top pageに戻った後、その他Pluginも同様にインストール

### 手動ビルドの実施
では、実際にJenkinsを利用していきましょう
手動ビルド以外の様々な操作は次回以降で紹介していきます

>**実施フローは以下の通り**
1. ジョブの設定
    　　　1. 新規ジョブの作成
    　　　2. VCSの設定
    　　　3. ビルド・トリガの設定
    　　　4. ビルドタスクの設定
    　　　5. ビルド後の処理の設定
2. ビルドの実行
3. リリース対象物の保存

**ジョブの設定**
「新規ジョブの作成」
dashboard > ```新規ジョブの作成``` > 
Item名を"JenkinsJOB"とし、```FreeStyle project```を選択し```OK```をクリック 

「VCSの設定」
以下の図のように入力
また、GitHubのプロジェクトが```privacy```の場合、Credentialを入力する必要がある
（今回は```publish```プロジェクトをForkしているので入力不要）

![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/5201b1cd-a818-8939-7aa1-396067ce278a.png)

「ビルド・トリガの設定」
手動ビルドのため、今回は設定しない

「ビルドタスクの設定」
以下の図のように入力し、「保存」をクリック

　![図15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/19e9f90b-8a86-caf2-4f57-54a0662cdad6.png)

「ビルド後の処理の設定」
手動ビルドのため、今回は設定しない


**ビルドの実行**
下図の通り```Build Now```を選択すると、ビルドが実行される
![図18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/5d35067b-e8d5-a70a-22ec-3e6398069f23.png)
ビルド結果が成功していれば、赤枠で囲まれた通り<font color="blue">●</font>※1になる

>※1
<font color="blue">●</font> : 問題なし
<font color="yellow">●</font> : ビルドは成功。テスト結果やコード解析に問題あり
<font color="red">●</font> : ビルドの失敗
<font color="gray">●</font> : ビルド未実行

ビルドの履歴や特定のビルド情報を確認する際は
1. dashboard
2. 左ペインの```ビルド履歴```
    　　　- ビルド履歴の一覧を確認できる
4. 特定のビルドをクリック
    　　　- ```Workspace```からはプロジェクトの中身をディレクトリ構成で確認可能
    　　　- ```Recent Change```からは直近の変更点のみを確認可能
    　　　- その他、誰が実行したか、テスト結果等を確認できる

**リリース対象物の保存**
最後に、リリース対象物をまとめて簡単に確認できる場所に配置する設定を行う

"JenkinsJOB"等の特定のジョブを選択 > ```設定``` > ```ビルド後の処理```にて```成果物保存```を選択しパスを指定

![図20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/7dc04e8d-0807-5c10-0a7d-c2c5f7803a65.png)

ビルドを実行すると、dashboardやホスト上に```sampleproject.war```が作成される

![図21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758476/d65b973e-e13f-9374-5209-2358a356f190.png)


```
$ sudo su -
$ cd /var/lib/docker/volumes/jenkins-data/_data/workspace/JenkinsJOB/target
$ ls
checkstyle-cachefile    checkstyle-result.xml  findbugsXml.xml    generated-test-sources  maven-archiver  sampleproject-1.0.0  surefire-reports
checkstyle-checker.xml  classes                generated-sources  jacoco.exec             maven-status    sampleproject.war    test-classes
```