bitbucketでJenkins pipelineをトリガーしてジョブを動かすまで

# はじめに
bitbucketからJenkins pipelineをトリガーすることにより、テストコードを自動で走らせることになりました。
今回は自分で実装した2パターンで、bitbucketからJenkins pipelineへのトリガー設定方法を記録していきます。

# 環境
* git
* bitbucket
* Jenkins
バージョン関係なく実装できそう？ なのでバージョンの記載はスキップします。
Jenkinsとbitbucketの接続はできている状態から始めていきます。

# 設定方法

### 1. Jenkins pipelineを作る
Jenkinsにアクセスして、New Item からpipelineの名前を入力、下のリストからpipelineを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919187/cdbd374e-96a0-ace9-eda2-965109077c18.png)

紹介するwebhookのうち、Trigger builds remotelyではトリガーだけ、Genetic webhook trigger pluginではトリガーからが取れます。(ex. PRの作成をトリガーにしたとすると、PRの作成者、branch名、destination branch名など)

### 3-1. Trigger builds remotelyを使う方法
##### Jenkinsの設定
まずJenkins pipelineのJob設定を開いて、Trigger builds remotelyにチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919187/d5c754d3-c302-92df-2985-b5b6f9da8e7a.png)
Tokenを設定します。フォーム下の説明にもある通り、以下のURLでpipelineのトリガーができるようになるはずです。bitbucketの設定に必要なので、メモしておきます。
```bash
JENKINS_URL/PATH_TO_JENKINS_JOB/build?token=TOKEN_NAME or 
JENKINS_URL/PATH_TO_JENKINS_JOB/buildWithParameters?token=TOKEN_NAME
# ex. Authentication TokenをaraiWorksTokenに設定した場合
# http://jenkins/job/trigger-test/build?token=araiWorksToken
```

次に、Jenkinsでtokenの設定を行っていきます。
Jenkins右上のユーザ名を押して、Configure -> API tokenからAPIを設定します。
Add new Tokenを押して出てくるフォームに好きなtoken名を設定し、Generateすると自動でtokenが作られるのでメモしておいてください。
![Screenshot 2024-11-15 at 21.47.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919187/9d3f6c00-4031-e973-91a6-7ec5bdf96975.png)

#### bitbucketの設定
(web hookを作るには、repository adminまたはproject admin権限が必要です！ 今回はrepository admin権限を持つユーザで進めます。)
bitbucketのrepository settings -> webhookへ移動します。右上のCreate webhookボタンから新しいweb hookの設定をしていきます.

まずwebhookの名前とURLを入力します。URLは先ほどJenkinsで設定したURLです。
そしてAuthenticationをNoneからBasic authenticationに変更してください。ここに先ほどJenkinsで設定したAPI Tokenを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919187/caf5ee09-cecc-0019-41bf-afd48d53dcb8.png)

下にスクロールすると、トリガーを発生させるイベントを選ぶことができます。
branchやPRのテストpipelineならcreataed, updatedあたりが良いかなーと思います。

##### テスト
bitbucketのwebhook設定ページにある、Test connectionで手軽にテストすることができます。HttpStatusが帰ってくるので、もし200でなかった場合はView detailsで確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919187/61fd7b80-9ab0-8ed9-abd3-03e7275c8a90.png)

コマンドでも確認可能です。
```bash
curl -X POST --user araiWorks:generated_token https://jenkins.example.com/job/trigger_test/build?token=araiWorksToken
```
これでJenkins pipelineが動けば成功です🥳

### 3-2. Genetic webhook trigger pluginを使う方法
##### 準備
まずpluginをまだインストールしてない場合は、Manage Jenkins -> Pluginsから”Genetic webhook trigger"をインストールしてください。

##### Jenkinsの設定
インストールできたら、Jenkins pipelineのJob設定を開いてGenetic webhook triggerにチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919187/557a8488-596a-7503-3d6f-52775afeae68.png)

トリガーしたいpipelineが複数ある、かつそれぞれ別でトリガーしたい時はこのようなURLでトリガーできるようにした方が良さそうなのでTokenも設定しました。最終的にこのようなURLでpipelineを起動させることになります。bitbucketの設定に必要なので、メモしておきます。
```bash
   http://JENKINS_URL/generic-webhook-trigger/invoke?token=TOKEN
   # ex. TOKENをaraiWorksTokenに設定した場合
   # http://jenkins.example.com/generic-webhook-trigger/invoke?token=araiWorksToken
```
##### bitbucketの設定
(web hookを作るには、repository adminまたはproject admin権限が必要です！ 今回はrepository admin権限を持つユーザで進めます。)
bitbucketのrepository settings -> webhookへ移動します。右上のCreate webhookボタンから新しいweb hookの設定をしていきます.

webhookの名前とURLを入力します。URLには先ほどJenkinsで設定したtokenを使ったURLを設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919187/026cac4a-d111-2d23-202d-84c1bdf82564.png)

##### テスト
bitbucketのwebhook設定ページにある、Test connectionで手軽にテストすることができます。HttpStatusが帰ってくるので、もし200でなかった場合はView detailsで確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919187/61fd7b80-9ab0-8ed9-abd3-03e7275c8a90.png)

コマンドでも確認可能です。
```bash
curl -X POST http://jenkins.example.com/generic-webhook-trigger/invoke?token=araiWorksToken
```
これでJenkins pipelineが動けば成功です🥳

# 最後に
今回書いてないですが、個人的にはGenetic webhoook triggerだとトリガーしたPRの情報を得ることができるので使いやすかったです。今後Genetic webhook triggerを使った際に取得できる情報についても書いていきたいなと思っています。
お役に立てれば幸いです🍎

# 参考
https://plugins.jenkins.io/generic-webhook-trigger/

https://ja.confluence.atlassian.com/bitbucketserver/manage-webhooks-938025878.html

https://iij.github.io/bootcamp/cicd_infra/jenkins/#%E3%83%92%E3%82%99%E3%83%AB%E3%83%88%E3%82%99%E3%83%88%E3%83%AA%E3%82%AB%E3%82%99%E3%83%BC

https://qiita.com/seigot/items/b1eb9503c300896350bb