SiG Staff Blog

福井と金沢にある株式会社SIG 総合研究所で働きたい方、ご連絡ください。

Backlogでpull requestがあった時に、自動で静的解析ツールが走る様にしてみた。

※ 一応これでも動くのですが、あまり良い実装じゃないので参考程度にしてください。

はじめに

会社でチケットベースでの開発 + Git が定着してきて多少なりにモダンな状態になったが、 作業者ごとにレベル差があってレビューの時間が結構かかるのが問題だった。 コーディング規約に沿っているかとか、簡単なバグは静的解析ツールに任せればレビューで見る箇所が減るのでは。 という事で、Jenkinsを使ってCIをする事に。 いつもはphpだけど、今回はjavaで。

やる事

  1. AWSにJenkinsをインストール
  2. Backlogでpull requestがあった時、Jenkinsが色々チェックする。
  3. エラーがあった時、JenkinsからSlackへ通知

とりあえず、これらが出来ればいいかなと。

AWSにJenkinsを準備する

AWSにJenkinsをインストール

f:id:Bee_Flim:20171018152806p:plain

  1. AWSのEC2を適当に作成します。(Amazon Linuxを使用しました)
  2. セキュリティグループで8080ポートにアクセスできるようにインバウンドに追加します。
  3. Backlogのwebhookが取れるように下もインバウンドに追加します。
カスタム TCP ルール TCP 8080 - 9999 54.238.59.48/32
  1. Jenkinsでjavaを使用するのだが、javaが1.7なので1.8をインストールする
    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
  1. 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)
  1. 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
    
  1. jenkinsを起動する
    sudo service jenkins start
起動されたら、http://public DNS:8080 にアクセスしてjenkinsの画面が立ち上がるのを確認する。
推奨プラグインはインストールしてもらう。
  1. 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に通知をやっていく。


参考サイト