Slide 1

Slide 1 text

Automatic Kotlin Lint with Pipeline and Danger 2017.12.12 Toru Furuya

Slide 2

Slide 2 text

Motivation ● メンバー全員Kotlin初心者でスタンダードを知らない ● KotlinはJavaに比べていろいろな書き方ができる ● プロダクト立ち上げ段階でPull Requestのdiffが多い ● コードの書き方までレビューしてる時間がない ● アプリができあがってから見直しても後の祭り コードの静的解析くらいロボットにお願いしよう

Slide 3

Slide 3 text

Technologies ● ktlint https://ktlint.github.io/ ● Danger http://danger.systems/ruby/ ● Jenkins Pipeline https://jenkins.io/doc/book/pipeline/

Slide 4

Slide 4 text

Overall Flow ① ② ③ ④

Slide 5

Slide 5 text

Where I stumbled ● “Unsupported major.minor version 52.0” ● JenkinsのGUIで設定した環境変数がPipelineに反映されない

Slide 6

Slide 6 text

Unsupported major.minor version 52.0 FAILURE: Build failed with an exception. * Where: Build file '/Users/jenkins/slave/workspace/lin_lint_with_danger_sample-37UQRG6OZVNIAO KNEBT2PGCXB45NC2DGDDSAFAOEJQ2T34JOTKUA/app/build.gradle' line: 1 * What went wrong: A problem occurred evaluating project ':app'. > java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0

Slide 7

Slide 7 text

● コンパイラのJDKのバージョンと実行環境のJVMのバージョンが異なる ● Pipelineのstepにログを仕込んだら JAVA_HOME = 1.8.0 なのに javac = 1.7.0 だっ た ● バージョンを合わせることで解決 Unsupported major.minor version 52.0

Slide 8

Slide 8 text

● JenkinsのGUIでJDKのPATHを設定 ● Pipelineのtoolsディレクティブで利用するJDKを宣言 Jenkinsfile Unsupported major.minor version 52.0 pipeline { agent any tools { jdk 'jdk8' }

Slide 9

Slide 9 text

JenkinsのGUIで設定した環境変数が反映されない ● 画像のように環境変数を設定してもビルドが失敗する

Slide 10

Slide 10 text

JenkinsのGUIで設定した環境変数が反映されない ● GUIで設定してもJenkins Pipelineには影響しない ● Pipelineのenvironmentディレクティブを利用することで解決 Jenkinsfile pipeline { agent any environment { DANGER_GITHUB_HOST = 'xxxx.net' DANGER_GITHUB_API_BASE_URL = 'https://xxxx.net/api/v3' DANGER_GITHUB_API_TOKEN = credentials('DANGER_GITHUB_API_TOKEN') }

Slide 11

Slide 11 text

Deliverables

Slide 12

Slide 12 text

Fin