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を使うと、出来るようになるらしいので試してみます。
気になった事
ブランチをプッシュした後プルリクエストを送った後にそのブランチを更新しないと実行されないので、 実際の運用時に
”ブランチ作ったらとりあえずプッシュ、その後プルリクエストを送る前にプッシュしてもらう”
って運用が必要になるかと思いました。
BacklogでPR(Spring F/W)があったらJenkins(AWS)がコードレビューの一部をしてくれて、結果をSlackに通知してくれるようにする。~その6~
pom.xmlの設定をする
jenkinsで実行されるようにpom.xmlの設定を行います。
pluginの設定を行う
mavenの事をあまり知らないのですが、とりあえず下のように設定しました。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!-- checkstyleの定義ファイルの場所を指定する --> <checkstyle.config.location>config/checkstyle/google-checks.xml</checkstyle.config.location> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <!-- checkstyleやらPMDとかの設定をする。 --> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <phase>test</phase> </execution> </executions> <configuration> <violationSeverity>warning</violationSeverity> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <phase>test</phase> <goals> <goal>findbugs</goal> </goals> </execution> </executions> <configuration> <failOnError>true</failOnError> <xmlOutput>true</xmlOutput> <outputEncoding>UTF-8</outputEncoding> </configuration> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.0</version> <executions> <execution> <id>default-prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>default-report</id> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </reporting> </project>
終わりに
mavenの事が全然わからなかったので、下の本を読んで勉強してこようと思います。
BacklogでPR(Spring F/W)があったらJenkins(AWS)がコードレビューの一部をしてくれて、結果をSlackに通知してくれるようにする。~その5~
Slackの設定をする
Jenkins CIのインストール
Slackのチームにログインして、Essential Apps等からJenkins CIを探してインストールする。
Jenkins CIの設定
1.Jenkins CIのConfigurationsを開く
2.通知をしたいchannelを指定して、Tokenの値が入っていることを確認する。
名前やアイコンとかは好きなものを設定する。
Slackの設定はこれで終わり。
slackの設定は楽でした。
違うchannelに通知したいときはAdd Configurationで同じように設定をしていけばいいみたいですね。
BacklogでPR(Spring F/W)があったらJenkins(AWS)がコードレビューの一部をしてくれて、結果をSlackに通知してくれるようにする。~その4~
Backlogの設定をする
APIキーの取得
1.Backlogの個人設定を開く。
2.APIを開いて、メモにコメントを入れて登録を押すと、下にAPIキーが作成される。
Webhookの設定
1.対象にしたいプロジェクトを開いて、プロジェクト設定を開く。*1
2.webhookを選択して、以下のように設定する。
- WebHook URL : http://
サーバ>/git/notifyCommit?url=<GitリポジトリのURL> - 通知するイベント : Gitプッシュ、プルリクエストの追加
Backlogの設定はこれで終わり
ここで設定したAPIキーを後でJenkinsで使用する。
参考サイト nulab-inc.com
*1:設定を行える権限が必要です。
BacklogでPR(Spring F/W)があったらJenkins(AWS)がコードレビューの一部をしてくれて、結果をSlackに通知してくれるようにする。~その3~
JenkinsをAWSにインストールする
AWSにJenkinsをインストール
- AWSのEC2を適当に作成します。(Amazon Linuxを使用しました)
- セキュリティグループで8080ポートにアクセスできるようにインバウンドに追加します。
- Backlogのwebhookが取れるように下もインバウンドに追加します。
カスタム TCP ルール TCP 8080-9999 54.238.59.48/32
4. Jenkinsでjavaを使用するのだが、javaが1.7なので1.8をインストールする
AWSにAWS作成時に作る秘密鍵とユーザー名:ec2-userでsshで入る。
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
5. 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)
6. 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
7. gitが入っていないのでインストールする。
sudo yum install git
8. jenkinsを起動する
sudo service jenkins start
起動されたら、http://public DNS:8080 にアクセスしてjenkinsの画面が立ち上がるのを確認する。
Unlock Jenkinsという画面が出るので、
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
で表示されるパスワードをいれて、アンロックする。
推奨プラグインはインストールしてもらう。
[f:id:Bee_Flim:20180210150020p:plain] 7. jenkinsの起動設定をする
sudo chkconfig jenkins on
静的解析に必要なプラグインをJenkinsに入れる。
- FindBugs Plug-in - バグ解析用
- PMD Plugin - コピペコードのチェック
- DRY - コードの重複チェック
- checkstyle - コーディング規約チェック
- JaCoCo plugin - コードカバレッジの算出
- Task Scanner Plug-in - TODOの収集
- Jenkins Backlog Plugin - backlogのgitにアクセス
- Slack Notification Plugin - Slackへの通知
- StepCounter - ステップ数をカウントする
- JUnit Attachments Plugin
これらをインストールしていく。
jenkinsのインストールはこれで終了
他のサービスとの連携等の設定は、この後から行うので、とりあえず起動だけできればOK。
BacklogでPR(Spring F/W)があったらJenkins(AWS)がコードレビューの一部をしてくれて、結果をSlackに通知してくれるようにする。~その2~
eclipseのインストールと設定
eclipseのインストール
日本語で使いたいので、以下のサイトからeclipseをダウンロードする。
Eclipse 日本語化 | MergeDoc Project
1.とりあえず、最新版を選択する。
2.自分の環境に合わせてJavaのeclipseをダウンロードする。
3.ダウンロードしたファイルを適当な場所に解凍する。
Spring Tool Suite (STS) for Eclipseを追加する
1.[その他]->[マーケットプレイス]を開く
2.検索の所に、STSと打ち込むと Spring Tool Suiteが出てくるのでインストールを選択する。
checkstyleに合わせた設定をする。
checkstyleのコードスタイルはGoogleStyleに合わせるように設定していく。
1.[ウィンドウ]->[設定]を開く
2.[一般]->[エディタ]->[AnyEdit]の設定
3.[Web]->[HTMLファイル]->[エディター]
checkstyleの設定を確認する
1.JavaのスタイルがGoogleになっていることを確認する。 *1
2.JavaScriptのスタイルを確認する。
2-1.下のURLからEclipse用の設定ファイルをダウンロードする。 https://raw.githubusercontent.com/jokeyrhyme/eclipse-formatter-profiles/master/google-style-guide-javascript-eclipse.xml
2-2.インポートで上記ファイルを指定してインポートして、アクティブなプロファイルにGoogle JavaScript Styleを選択する。
試し用のSpringプロジェクトを作成する。
1.パッケージエクスプローラー上で右クリックをして、[新規]->[その他]を選択。
2.Spring Bootからスタータープロジェクトを選択。
3.試し用なので、デフォルトで次へ。
4.こちらも、デフォルトで。
checkstyleの設定ファイルを導入する。
1.Checkstyleのサイトhttp://checkstyle.sourceforge.net/google_style.htmlでJavaの設定ファイルがあるので、これをダウンロードする。 https://raw.githubusercontent.com/checkstyle/checkstyle/master/src/main/resources/google_checks.xml *2
2.ダウンロードしたファイルをフォルダに配置する。 とりあえず、root/config/checkstyle/google_check.xml に配置する。
3.プロジェクトに反映する。
3-1.プロジェクトを右クリックして[プロパティー]を選択する。
3-2.checkstyleを選択して、[ローカル・チェック構成]を選択して、[新規]をクリックする。
3-3.以下のように設定する。
- 型:プロジェクト相対効性
- 名前:任意
- ロケーション:ダウンロードしたファイルの場所(root/config/checkstyle/google_check.xml)
- checkstyle構成ファイルの保護:チェックを入れる
3-4.テストモジュールはcheckstyleの対象外にする。
メインタブを開き、以下のように設定する。
- プロジェクトでcheckstyleを有効にする:チェックをつける
- シンプル攻勢を使用する:チェックを外す
ファイル・セットすべてになっているので、ダブルクリックをして設定ウィンドウを開く。
一致正規表現に以下を設定する。
^src/main/./..java$
eclipseの設定はここまで。
これで、フォーマッタとcheckstyleが一致したので、整形忘れも楽に解決できる。はず。。。
*1:初期状態で選択されていると思うが、入っていない場合は下のURLから設定ファイルをダウンロードして、 インポートでこのファイルを指定する。 https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml
*2:プロジェクトに合わせて内容を微調整する。
BacklogでPR(Spring F/W)があったらJenkins(AWS)がコードレビューの一部をしてくれて、結果をSlackに通知してくれるようにする。~その1~
以前にAWSにJenkinsをインストールするというエントリーを書いたけど、 eclipseの設定を含めて1からの手順を纏めることで、 全社に展開できるかなーと思ったので纏めてみようと思った次第です。
このまとめの目標
BacklogのGitにPull Requestを送ると、Jenkinsに通知が言って、checkstyle、コードの重複、ユニットテスト、その他を 実施してくれて、Slackに通知をしてくれる。
やる事
- eclipseのインストールと設定 yakisaba.hatenablog.jp
- JenkinsのAWSへのインストール yakisaba.hatenablog.jp
- Backlogの設定 yakisaba.hatenablog.jp
- Slackの設定 yakisaba.hatenablog.jp
- pom.xmlの設定 yakisaba.hatenablog.jp
- Jenkinsの設定とCIの実施 yakisaba.hatenablog.jp