BacklogでPR(Spring F/W)があったらJenkins(AWS)がコードレビューの一部をしてくれて、結果をSlackに通知してくれるようにする。~その7~
jenkinsの設定をする
jenkinsで各チェックが動くように設定をしていきます。
jenkinsにジョブを追加する。
1.jenkinsのダッシュボードを開く
2.新しいジョブをクリックして、適当な名前を付けて”Mavenプロジェクトのビルド”を選択する。
Git、Mavenの設定をする。
1.[jenkinsの管理]->[Global Tool Configuration]を選択する。
2.Gitの所にエラーがないか確認する。
3.Mavenの所に、適当に名前を付けて自動インストールにチェックをする。*1
Slack連携の為に設定をする。
1.[jenkinsの管理]->[システムの設定]を選択する。
2.webhook設定の所に、slackのtokenキーを設定して、
3.endpointにslackのURLを指定する。”https://[チーム名].slack.com”
ジョブの設定をする。
基本設定
- ダッシュボードに先ほど作ったジョブがあるので、選択する。
- 左のメニューにある[設定]を開く。
- プロジェクト名、説明を適当に設定する。
- Backlogにチェックを入れて、Backlog URLに"https://<スペースID>.backlog.jp/projects/<プロジェクトキー>"を設定する。
- ユーザー、パスワードはそのプロジェクトが見れるユーザーを指定する。(ブランクでも良い)
- APIキーには、前回Backlogの設定で取得したキーを設定する。
ソースコード管理の設定
- Gitを選択する。
- リポジトリURLにはbacklogのgitリポジトリを設定する。
- 認証情報の追加ボタンを押下して、種類に”ユーザー名とパスワード”を選択して、ユーザー名とパスワードにbacklogのアカウント情報を登録する。
- 認証情報に追加したアカウントが表示されるので、それを選択する。
- nulabさんのblog( Jenkins Backlog Pluginで、ビルド結果をプルリクエストに通知! | ヌーラボ )では、
高度な設定 > Refspec : “+refs/pull/:refs/remotes/origin/pr/”
を指定すると、プルリクエストが取れると書かれていたのですがプルリク時にうまく動かないので、その設定はブランクにしてビルドするブランチに**を指定することでプルリクエストがマージされたときに発動するようにしました。*2
pipelineの方には、プルリクエストを処理できるようになっているみたいで、今度試してみようと思います。
ビルドトリガの設定
- SCMをポーリングにチェックを入れます。
ビルド設定
- checkstyleやPMDなどのチェックを入れていく。
- 高度な設定を開いて、常に実行にチェックを入れる。
- 未解決タスクはテストコードを対象外にしたいので、パスを指定する。
ビルド後の処理
- JaCoCo、Slack Notification、Step Counterにチェックを入れる。
- Slack Notificationの高度な設定を開いて、"Team Subdomain"にチーム名を入れる。(”https://[チーム名].slack.com”のチーム名の部分)
- "Integration Token"にSlackのJenkinsCIで取得したトークンを設定する。
- "Project Channel"に通知をしたいchannelを指定する。
- 通知したいタイミングにチェックを入れる。
- Step Counterにはカウント対象のファイルを指定する。テストコードを除きたい場合は、除外するファイルパターンにテストコードのパスを指定する。
試してみる。
eclipseにテストコードを追加する。
こんな感じの適当な物を作成。
/* * ソースコード */ @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } public int addCalc(int x, int y) { return x + y; } public int minusCalc() { //FIXME テストを修正する事 String bug = null; bug.toCharArray(); return 1; } public void sample() { //Some thing } }
/* * テストコード */ @RunWith(SpringRunner.class) @SpringBootTest(classes = DemoApplication.class) public class DemoApplicationTests { @Autowired DemoApplication demo; @Test public void 加算の成功テスト() { assertEquals("成功", 3, demo.addCalc(1, 2)); } @Test public void 加算の失敗テスト() { assertNotEquals("値が違う", 4, demo.addCalc(1, 2)); } @Test public void 加算の失敗テスト2() { assertEquals("値が違う2", 4, demo.addCalc(1, 20)); } @Test public void 加算の失敗テスト3() { assertEquals("値が違う3", 4, demo.addCalc(1, 20)); } }
Backlogにブランチをプッシュして、masterにプルリクエストを送信します。 そのあと、そのブランチをもう一度pushすると処理が走りました。
こんな感じで、実行結果が表示されました。
Slackにも通知が来るようになりました。
おわりに
一応、通知が来るようになったんですが、プルリクエストがあった時にチェックをしたいので、マージ時に実行されるのはいまいちですね。 デプロイする時にはこれでもよさそうな気がします。 pipelineを使うと、出来るようになるらしいので試してみます。
気になった事
ブランチをプッシュした後プルリクエストを送った後にそのブランチを更新しないと実行されないので、 実際の運用時に
”ブランチ作ったらとりあえずプッシュ、その後プルリクエストを送る前にプッシュしてもらう”
って運用が必要になるかと思いました。