はじめに
Bitriseはモバイルアプリに特化したCIサービスです。
存在自体は知っていたのですが、歳のせいか新しいサービスを導入するのに億劫になってきていました。
ですが、先日勉強会で使い方を見てあまりの便利さに衝撃を受けたので早速Androidアプリで使うことにしました!
今回はGithub Pull RequestsでDanger + ktlintできる環境を作ってみます。
サンプルはこちらに置いときました。
https://github.com/tarumzu/OCRSampleAndroid
Dangerの設定
まずはDanger導入用にGemfileをプロジェクトルートに配置します。この設定は後述するBitriseのon Dangerステップで必要です。
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プラグインを利用します。
buildscript {
repositories {
// 略
maven(url = "https://plugins.gradle.org/m2/")
}
dependencies {
// 略
classpath("org.jlleitschuh.gradle:ktlint-gradle:8.0.0")
}
}
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を前提に説明します。
追加したら、そのアプリのワークフローを開きます。今回つかうステップは下記の4つです。Activate SSH key、Git Clone Repositoryは最初から追加されているのでそのまま使い、それ以外を削除して新たにGradle Runner
、Run Danger
ステップを追加します。
続いてGradle Runnerをクリックし、Config
を開いて各項目に下記を入力します。ktlintCheckさせるのに必要です。
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
にチェックを入れて作成します。
アクセストークンをBitriseに設定してあげる際、Expose for Pull Requests
にチェックを入れてあげてください。入れてあげないとプルリクエストでSecretの値が読み込めません。
最後にトリガーの設定です。PULL REQUESTでTARGET BRANCHがmasterの場合に発火するように設定してあげます。
以上ですべて設定できました。画面右上のsaveボタンを押して保存し、早速プルリクエスト送ってると…
無事、プルリクにDangerのコメントが追記されました!
最後に
他のCIサービスに比べると非常に簡単にDangerを導入することができます。Danger以外にもtestなどのステップも充実していますし、もちろん、他のサービスと同様に設定ファイル(bitrise.yml)で構築する事もできます。
ぜひ皆さんもBitrise使ってみてください!
参考
大変参考になりました。@kafumiさんありがとうございます!
https://qiita.com/kafumi/items/1a9f59d6f845808604df