Jenkins Pipelines と Android アプリ開発

id:nobuoka / @nobuoka
(株式会社はてな)
第 7 回 大阪 Jenkins 勉強会

こんにちは! Nobuoka です

  • 株式会社はてな
  • ソフトウェア開発者
    • モバイルアプリ開発 (Android、UWP)
    • Web 開発 (Scala、Java、TypeScript、Perl)
  • 仕事は Android アプリ 「はてなブックマーク」 開発

目的

  • Pipeline plugin の雰囲気を伝える
    • 導入事例 : Android アプリ開発
  • ノウハウ共有

Pipeline Plugin とは?

祝! Jenkins 2.0 リリース!

https://jenkins.io/2.0/

Pipeline as Code

  • Jenkins 2 の目玉の一つ
  • ジョブの流れをコードで表現
    • Groovy による DSL
  • Pipeline plugin により実現
    → Jenkins 1.642.3 以降で利用可能

Delivery pipelines as a first-class entity

  • Jenkins の主流として各種 Plugin との連携などに期待
  • Blue Ocean での UX 向上も

Pipeline plugin 以前との比較

複雑なジョブの 2 つのパターン

  • Shell スクリプトに複雑な処理を記述して単一の Jenkins のジョブで実行
  • 複数の Jenkins のジョブを組み合わせる

単一ジョブで Shell スクリプト

  • ○ リポジトリで処理の流れを管理
  • ○ 柔軟に複雑な処理を記述できる
  • × Jenkins との連携がしづらい
  • × 失敗時に失敗箇所がわかりづらい

複数ジョブの組み合わせ

  • × Jenkins 側でジョブ間の関係の設定が必要
  • × Plugin の制約などで柔軟さは低い
  • ○ Jenkins との連携はしやすい
  • ○ 失敗箇所はわかりやすい

Pipeline plugin はいいとこどり

  • ○ リポジトリで処理の流れを管理
  • ○ 柔軟に複雑な処理を記述できる
  • ○ Jenkins との連携もしやすい
  • ○ 失敗箇所はわかりやすい

使ってみる

Multibranch プロジェクトを作成して

対象の Git リポジトリを指定してポーリング

ブランチごとのサブプロジェクト

Stage view

Android アプリ開発でやっていること

Andorid 固有の話 (テスト実行)

  • Android Emulator Plugin はまだサポートされていない
    • 『Basic support for the Pipeline Plugin is planned』
  • 必要なことはいろいろある
    • Android SDK のセットアップ
    • SDK コンポーネントのインストール
    • テストのためのエミュレータ準備・起動
  • サンプルプロジェクト
    • 泥臭くやってる
    • 現状エミュレータは動いていない (社内では別の方法で動かしている)

その他の話題

  • Slack や GitHub への通知
    • curl で Web API 叩いてる
    • 対応する Plugin があればそれを使用した方が楽なはず
  • 特定ブランチで実行されたときにアプリパッケージを配布するとか

これまで得た知見 (バッドノウハウも)

おすすめの構成 (Git で複数ブランチの場合)

  • Pipeline plugin の Multibranch プロジェクト
    • Branch source として Git リポジトリ (or GitHub 上のリポジトリ) を指定
  • Git リポジトリに Jenkinsfile をコミット
    • Jenkinsfile にジョブの処理を記述
  • これは直前のデモで行った方法
    • Jenkinsfile をリポジトリに含めない方法もある
  • See : Pipeline-as-code with Multibranch Workflows in Jenkins

RejectedAccessException が発生する!

Shell スクリプトの標準入出力やエラー出力はファイルを介す

publishHtml のパラメータ

Android のビルドタスクの警告がファイルパスをエスケープしないことによる問題

おわり

まとめ

  • Jenkins 2.0!
  • Pipeline plugin!!
  • シェルスクリプトで頑張ってたりプロジェクトの連携を頑張ってる → Pipeline plugin の利用を検討しましょう
  • Git で開発してるなら Multibranch プロジェクトを使おう!!