はじめに
こんにちは。
ナビタイムジャパンで社内JiraやBitbucketの運用をしている TAKE です.
社内のコード品質向上について,全社向けに『Sonar for Bitbucket』を導入した際に大変だった点をお伝えします.
Sonar for Bitbucket とは
『SonarQube』の解析結果をBitbucket上に表示するためのBitbucketのアドオンです.
問題と解決のみちのり
数百のリポジトリ
一番大きかった問題は解析用CIツールのJOBについてです.
SonarQubeの公式ドキュメントを参考に実装するとリポジトリの数だけ解析用CIツールのJOBが必要になってきます.(弊社ではJenkinsを利用)
つまりJOBを数百個作成する必要がありました...
JOBの共通化
BitbucketからJenkinsにリポジトリ名などの情報を渡せばJOBは一つで済むと考えました!
BitbucketとJekinsの連携の問題
BitbucketからJenkinsのJOBをパラメータ付きで起動したい場合,多くの場合で『Webhook to Jenkins for Bitbucket』というプラグインが利用されています.公式でもこちらがおすすめされていました.
実際に実装しようとしたところJenkinsのプラグインの設定を行うと,共通化したJOBにパラメータを渡すことができませんでした.
どうにかできないか色々試しましたが、深みにハマりつつあったのでAWS API GWとAWS Lambdaを用いて自作しました.
Lambdaの処理については,Bitbucketから送られてきたパラメータをもとにJenkinsのAPIを叩くようなものになっています.
Bitbucketからのパラメータも公式ドキュメントを確認すると詳細に情報が記載されています.
これによりユーザはAWS APIGatewayのURLをwebhookに設定するだけで解析ができます.
詳細は下記のような3ステップで,数分しか必要としません.
- Bitbucketのリポジトリ毎のwebフック設定に、上記で作成したLambdaへのリクエストURLを設定
- 「テスト接続」で解析実行
- BitbucketでSonar表示の設定を行う
結果
導入ができました!
更に2つのメリットがありました
- 導入が楽
- 全社で同じ基準のルールを適用できる
特に1つ目については,各組織毎に導入を行うとDBの構築からJobの設定,Bitbucketの設定まで非常に多くの工数が発生しますが,全社向けに導入した成果として,数分で導入可能になりました!
今後の課題
テスト結果が確認できない
今回のSonarの導入にはAWSのEC2を用いていますが,社内の各リポジトリの動作環境を用意することができず(現実的じゃなかった)テストのためのビルドを実行することができませんでした.
テストカバレッジなどは品質を管理する上で非常に重要な指標のため現在改善に向けて活動しております.
まとめ
- 各リポジトリ毎に解析用JOBを作成したくなかった
- Lambdaで自作した
- 各リポジトリにかんたんに導入できるようになった