Jenkins Pipelineの書き方

## パラメータを受け取りたい

Jenkins側でこんな感じにジョブにパラメータを設定してあげると

![スクリーンショット 2021-04-04 15.10.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/12ab349f-86d5-3277-75f8-5ba616c4c8b1.png)

パラメータ付きビルドからパラメータを入力できるようになります。

![スクリーンショット 2021-04-04 15.15.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/4ab5c1fa-77ed-edd5-2575-f572748bdbdf.png)

パラメータをpipelineで取得したいときは「${params.名前}」で取得できます。

```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("Hoge") {
         steps {
            echo "Param： ${params.Hoge}"
         }
      }
   }
}
```

## 並列処理で実行したい

parallelで囲ってあげればOK

```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("Hoge") {
         parallel {
            stage('parallelA') {
               steps {
                  echo "parallelA"
               }
            }
            stage('parallelB') {
               steps {
                  echo "parallelB"
               }
            }
         }
      }
   }
}
```

JenkinsのデフォルトのStage Viewだとわかりずらいけど
![スクリーンショット 2021-04-04 18.50.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/b137c736-1d5e-ba5a-5b45-1f90e77d4918.png)


Blue Oceanというプラグインを見ると一目で並列処理されている事がわかります。

![スクリーンショット 2021-04-04 18.35.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/8cee4348-d0eb-2217-69f0-744df3ae7560.png)

## 特定の条件化では処理をスキップさせたい

こんな感じのパラメータを用意してあげて

![スクリーンショット 2021-04-04 19.26.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/74eb1ec1-7194-9881-757d-b0c54eaaee36.png)

![スクリーンショット 2021-04-04 19.32.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/6f4777f4-ef16-c075-ed97-3a58a6222d9b.png)


whenとexpressionを組み合わせる事で実現できます。

```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("Hoge") {
         parallel {
            stage('parallelA') {
               when {
                  expression {
                     return "${params.DoJob}".contains('ParallelA')
                  }
               }
               steps {
                  echo "parallelA"
               }
            }
            stage('parallelB') {
               when {
                  expression {
                     return "${params.DoJob}".contains('ParallelB')
                  }
               }
               steps {
                  echo "parallelB"
               }
            }
         }
      }
   }
}
```

![スクリーンショット 2021-04-04 19.29.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/aadc7a01-9ba8-b7db-21e3-b937d3d1a631.png)


## ビルドしたものを成果物として取得したい

archiveArtifacts を使うと zip ファイルや jar ファイルなど をアーカイブして、後でJenkinsからダウンロードできるようになります。
zip化は「Pipeline Utility Steps」プラグインをJenkinsにインストールしておけば簡単にできます。



```groovy:Jenkinsfile
pipeline {
   agent any
   stages {
      stage("Create Hoge Dir") {
         steps {
            sh "mkdir Hoge"
            sh "echo test > Hoge/test.txt"
         }
      }
      stage("Artifact") {
         steps {
            script {
               // Hoge というディレクトリを Fuga.zip としてzip化します
               zip archive: true, dir: 'Hoge', glob: '', zipFile: 'Fuga.zip'
            }
            // test.zip をJenkinsからダウンロードできるようにします。
            archiveArtifacts artifacts: 'Fuga.zip'
         }
      }
   }
}

```
![スクリーンショット 2021-04-24 15.06.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690302/e5a3642e-41ac-6545-54ec-2ea502b5985a.png)