Help us understand the problem. What is going on with this article?

Bitriseを使い、最小限の労力でDanger + ktlintをGithubと連携させる(on Danger step, ktlint-gradle)

はじめに

Bitriseはモバイルアプリに特化したCIサービスです。
存在自体は知っていたのですが、歳のせいか新しいサービスを導入するのに億劫になってきていました。
ですが、先日勉強会で使い方を見てあまりの便利さに衝撃を受けたので早速Androidアプリで使うことにしました!

今回はGithub Pull RequestsでDanger + ktlintできる環境を作ってみます。

サンプルはこちらに置いときました。
https://github.com/tarumzu/OCRSampleAndroid

Dangerの設定

まずはDanger導入用にGemfileをプロジェクトルートに配置します。この設定は後述するBitriseのon Dangerステップで必要です。

Gemfile
source "https://rubygems.org"

gem "danger"
gem "danger-checkstyle_format"

次に、同じくプロジェクトルートにDangerfileを配置します。

github.dismiss_out_of_range_messages

# Ignore inline messages which lay outside a diff's range of PR
github.dismiss_out_of_range_messages

# Make it more obvious that a PR is a work in progress and shouldn't be merged yet
warn("PR is classed as Work in Progress") if github.pr_title.include? "[WIP]"

# ktlint
checkstyle_format.base_path = Dir.pwd
checkstyle_format.report 'app/build/reports/ktlint/ktlintMainSourceSetCheck.xml'

ktlintの設定

次にktlintです。今回はktlint-gradleプラグインを利用します。

build.gradle.kts
buildscript {

    repositories {
        // 略
        maven(url = "https://plugins.gradle.org/m2/")
    }
    dependencies {
        // 略
        classpath("org.jlleitschuh.gradle:ktlint-gradle:8.0.0")

    }
}

app/build.gradle.kts
plugins {
    id("org.jlleitschuh.gradle.ktlint")
}
// 略
ktlint {
    version.set("0.31.0")
    android.set(true)
    reporters.set(setOf(ReporterType.CHECKSTYLE))
    ignoreFailures.set(true) // NOTE: エラーで中断させないための設定
}

Bitriseの設定

Bitrise側の設定はとても簡単です。
まずはサインアップ、サインイン後、CI/CDしたいプロジェクトをAdd New AppからCI/CDしたいアプリを追加します。
リポジトリはGitHub、Bitbucket、GitLab等から選択できます。今回はGitHubを前提に説明します。
スクリーンショット 2019-06-04 14.40.42.png

追加したら、そのアプリのワークフローを開きます。今回つかうステップは下記の4つです。Activate SSH key、Git Clone Repositoryは最初から追加されているのでそのまま使い、それ以外を削除して新たにGradle RunnerRun Dangerステップを追加します。
キャプチャ.PNG

続いてGradle Runnerをクリックし、Configを開いて各項目に下記を入力します。ktlintCheckさせるのに必要です。
キャプチャ2.PNG

Gradle task to run gradlew file path
assembleDebug ktlintCheck ./gradlew

続いてRun DangerをクリックしてGithubを開きます。Access token for your projectにGithubのアクセストークンを設定してあげます。
Githubのアクセストークン作成用リンクはこちら
アクセストークンの権限は、プライベートリポジトリに対してCI/CDを実行したい場合はrepo、パブリックリポジトリに対して実行したい場合はpublic_repoにチェックを入れて作成します。
スクリーンショット 2019-06-04 14.57.42.png

アクセストークンをBitriseに設定してあげる際、Expose for Pull Requestsにチェックを入れてあげてください。入れてあげないとプルリクエストでSecretの値が読み込めません。
スクリーンショット 2019-06-04 15.07.46.png

最後にトリガーの設定です。PULL REQUESTでTARGET BRANCHがmasterの場合に発火するように設定してあげます。
スクリーンショット 2019-06-04 15.07.46.png

以上ですべて設定できました。画面右上のsaveボタンを押して保存し、早速プルリクエスト送ってると…

スクリーンショット 2019-06-04 15.13.18.png

無事、プルリクにDangerのコメントが追記されました!

最後に

他のCIサービスに比べると非常に簡単にDangerを導入することができます。Danger以外にもtestなどのステップも充実していますし、もちろん、他のサービスと同様に設定ファイル(bitrise.yml)で構築する事もできます。
ぜひ皆さんもBitrise使ってみてください!

参考

大変参考になりました。@kafumiさんありがとうございます!
https://qiita.com/kafumi/items/1a9f59d6f845808604df

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away