Jenkins Pipeline 便利なプラグイン

## zipを作成したい

https://plugins.jenkins.io/pipeline-utility-steps/

Pipeline Utility Stepsをインストール後、```script{}``` 内で以下のように使えば簡単にzipが作成されます

```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("Artifact") {
         steps {
            script {
               // Hoge というディレクトリを Fuga.zip としてzip化します
               zip archive: true, dir: 'Hoge', glob: '', zipFile: 'Fuga.zip'
            }
         }
      }
   }
}

```

## ファイル検索したい

同じくPipeline Utility Stepsを使って以下のようにファイル検索もできます。(この例は全ての.mdファイルを取得しています。)

```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("FindFiles") {
         steps {
            script {
               def files = findFiles(glob: '**/*.md') 
               files.each { file -> 
                 echo "${file.name}"
                 echo "${file.lastModified}"
               }
            }
         }
      }
   }
}

```

## ビルド実行時のユーザー名を取得したい

https://plugins.jenkins.io/build-user-vars-plugin/

build user varsをインストール後、```script{}``` 内で以下のように使えばユーザIDやユーザ名が取得できます。

```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("BuildUserName") {
         steps {
            script {
              wrap([$class: 'BuildUser']) {
                def user = env.BUILD_USER_ID
              }
              echo user
            }
         }
      }
   }
}
```


## ビルドが終わったらSlackで通知したい

https://plugins.jenkins.io/slack/

### Slack側の設定

Slackで通知したいチャンネルを選択し、その他 > アプリを追加する > Jenkins CI をインストールします。

![スクリーンショット 2021-05-08 12.38.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/b83242bb-21b7-cda6-42a8-b70a8a177b76.png)
![スクリーンショット 2021-05-08 12.42.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/e6375b42-a69d-1310-a479-0e78fb15a1f5.png)

Slackに追加するとトークンが取得できるのでコピーしておきます。

### Jenkins側の設定

1.Slack Notificationをインストール
2.Jenkinsの管理 > Manage Credentials から認証情報を追加  

  * 種類: Secret text
  * スコープ: グローバル
  * Secret: 先ほど取得したトークン
  * ID: 空でOK
  * 説明: お好きな説明を

![スクリーンショット 2021-05-08 12.57.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/7a1edfe4-8d2b-c4a2-d87b-14f7358571cd.png)


3.Jenkinsの管理 > システムの設定 > Slack に以下を設定

  * WorkSpace: SlackのWorkSpace
  * Credential: 先ほど追加した認証情報
  * Default channel: 通知したいチャンネル

![スクリーンショット 2021-05-08 12.59.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/50d35555-251b-299f-3501-a5f1b28aeb77.png)

あとは以下のようなPipelineをかけば、ビルドが終わったらSlackで通知されます

```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("Build") {
         steps {
            echo "Build"
         }
      }
   }
   post {
      success {
         slackSend  color: 'good',message: "build success."
      }
      failure {
         slackSend  color: 'danger', message: "build failure."
      }
   }

}

```


build user varsプラグインと組み合わせて、通知するときにメンションにビルドを実行したユーザを指定することもできます。（Jenkinsのユーザー名をSlackのメンションと同じにしている場合）

```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("Build") {
         steps {
            echo "Build"
         }
      }
   }
   post {
      success {
         script {
            wrap([$class: 'BuildUser']) {
               slackSend  color: 'good',message: "<@${env.BUILD_USER}> build success."
            }
         }
      }
      failure {
         slackSend  color: 'danger', message: "build failure."
      }
   }

}

```

※Slackとの連携方法はボットを作る方法もあり、今はそちらがメインのようです。
ボットから連携する場合はslackUserIdFromEmailでEmailからSlackのUserIdが取れるようです


>There's two ways to authenticate with slack using this plugin.
>Using the "Jenkins CI" app written by Slack, it's what is known as a 'legacy app' written directly into the slack code base and not maintained anymore.
>Creating your own custom "Slack app" and installing it to your workspace.

https://github.com/jenkinsci/slack-plugin#creating-your-app


## ビルド名を変更したい

https://plugins.jenkins.io/build-name-setter/

デフォルトの状態だとビルド番号のみしか表示されないので結構見ずらいです。

![スクリーンショット 2021-05-08 13.54.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/ac926061-2e2a-a855-c256-3ff193556fc6.png)


Build Name and Description Setterをインストール後、以下のようにするとビルド名を編集できます。

```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("BuildName") {
         steps {
            script {
               // 『#ビルド番号 HOGE』 と表示されます。
               buildName "#${env.BUILD_NUMBER} HOGE"
            }
         }
      }
   }
}
```

![スクリーンショット 2021-05-08 14.41.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/4abe908c-2ee1-cbc6-b5a9-f69ae02477cc.png)

Jenkinsのビルド履歴画面の方も変更されています。見やすい！
ビルド時のタグ名とか表示させるともっとわかりやすいですね。

![スクリーンショット 2021-05-08 14.42.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/1489cc9b-4939-5187-43d6-f85455bfc765.png)