Backlogでpull requestがあった時に、自動で静的解析ツールが走る様にしてみた。
※ 一応これでも動くのですが、あまり良い実装じゃないので参考程度にしてください。
はじめに
会社でチケットベースでの開発 + Git が定着してきて多少なりにモダンな状態になったが、 作業者ごとにレベル差があってレビューの時間が結構かかるのが問題だった。 コーディング規約に沿っているかとか、簡単なバグは静的解析ツールに任せればレビューで見る箇所が減るのでは。 という事で、Jenkinsを使ってCIをする事に。 いつもはphpだけど、今回はjavaで。
やる事
- AWSにJenkinsをインストール
- Backlogでpull requestがあった時、Jenkinsが色々チェックする。
- エラーがあった時、JenkinsからSlackへ通知
とりあえず、これらが出来ればいいかなと。
AWSにJenkinsを準備する
AWSにJenkinsをインストール
- AWSのEC2を適当に作成します。(Amazon Linuxを使用しました)
- セキュリティグループで8080ポートにアクセスできるようにインバウンドに追加します。
- Backlogのwebhookが取れるように下もインバウンドに追加します。
カスタム TCP ルール TCP 8080 - 9999 54.238.59.48/32
sudo yum -y install java-1.8.0-openjdk-devel # インストールが行われる # java1.8をデフォルトにする $ sudo alternatives --config java 2 プログラムがあり 'java' を提供します。 選択 コマンド ----------------------------------------------- *+ 1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java 2 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.25-0.b18.4.amzn1.x86_64/jre/bin/java Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
- java --verson で1.8であることを確認する。
$ java -version openjdk version "1.8.0_25" OpenJDK Runtime Environment (build 1.8.0_25-b18) OpenJDK 64-Bit Server VM (build 25.25-b02, mixed mode)
- jenkinsをインストールする。
# Jenkinsをダウンロード sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo # パッケージ署名チェック用のキーをインポートする sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key # jenkinsのインストール sudo yum install jenkins
- jenkinsを起動する
sudo service jenkins start
起動されたら、http://public DNS:8080 にアクセスしてjenkinsの画面が立ち上がるのを確認する。
推奨プラグインはインストールしてもらう。
- jenkinsの起動設定をする
sudo chkconfig jenkins on
静的解析に必要なプラグインをJenkinsに入れる。
- Gradle plugin - gradleを使うため
- FindBugs Plug-in - バグ解析用
- PMD Plugin - コードのチェック
- checkstyle - コーディング規約チェック
- Violations plugin - 静的レポートの集計表示
- JaCoCo plugin - コードカバレッジの算出
- Task Scanner Plug-in - TODOの収集
- Jenkins Backlog Plugin - backlogのgitにアクセス
これらをインストールしていく。
ちゃんと動かせなかったので
JenkinsとGradleの知識が薄すぎて、上手い事実行する方法がわからず、 考える前に試したいので、Jenkinsでsudo でgradleを実行できるようにします。
sudoをjenkinsに付与
# こんな感じで設定する sudo visudo # Defaults !visiblepw Defaults visiblepw root ALL=(ALL:ALL) ALL jenkins ALL=(ALL) NOPASSWD:ALL # 再起動 $ service jenkins restart
gradleをインストールする
こんな感じでインストールする。(パスは適当なところを使用してください。)
cd ~ wget -N https://services.gradle.org/distributions/gradle-2.0-all.zip unzip gradle-2.0-all.zip -d ~/gradle ln -sfn ~/gradle/gradle-2.0 ~/gradle/latest printf "export GRADLE_HOME=~/gradle/latest\nexport PATH=\$PATH:\$GRADLE_HOME/bin" > /etc/profile.d/gradle.sh
Jenkinsの準備はこれで終了
これで、取りあえずJenkinsの準備ができた。 次は、backlogのwebhookをとれるようにして、静的解析が行われるようにする。エラーがあればslackに通知をやっていく。
参考サイト