[android] ci環境についてぼんやり考えてること
DESCRIPTION
[Android] CI環境についてぼんやり考えてることTRANSCRIPT
[Android]CI環境についてぼんやり
考えてること
@ichigotake #hachiojipm
はじめに
まだ構想段階ですよ!
取り急ぎ用意するなら、という成分強め
Androidアプリ開発に必要なもの
● アプリ(apk)のビルトとアップロード○ アップ先はPlayストアだったりDeployGateだったり
● テスト環境○ 人間がやったり機械がやったり
運用リスク
● 「アップロードするファイル間違えた」● 「クリーンビルト忘れた」
リスクを下げるためのCI環境を用意したい!
CIで意識する事
● ビルトからアップロードまでを自動化○ 人為的ミスを減らす
● 各種認証の扱い、セキュリティ事案○ リリースビルドの証明書,各種連携サービスなど
● VCS(gitとか)のコミットフック● 個人環境に移譲出来る事はないか
○ ステージング環境の設定は個人環境を尊重したい○ でもリリースは固定された環境がいいよね
世の中にある便利なCIサービス
● travis-ci● wercker● circleci
などなど
でも…
● 認証情報を外部に置くのは気持ち悪い(怖い)● 時間帯によってはビルドが遅い
○ 有償プランは高かったり…● サービスをクローンするのは高コスト
○ かといって中途半端に用意しても割に合うのか○ 軽めに運用して様子を見たい時にはめんどう○ 探すのはそれはそれで検討比較がちょっとめんどう
自分が欲しいもの
● Like a "CPAN Testers Reports" services○ WEBでビルト結果を見れる○ ビルト環境ごとの出力ログ, テスト結果など○ プルリクへのリンク○ いつでも気軽に結果を見たい
● リリース時の確実なクリーンビルト● サーバ管理の意識を少なく出来る"何か"● 趣味で簡単に使えたら尚よい
ぼんやり考えてること
まだ構想段階ですよ!
運用イメージ
● 作業中はいつも通りに● ステージング,リリースビルトはDockerで● Dockerでのビルト結果を集積所へpush● 環境の用意は手短に
用意する環境
● Android汎用のDockerベースイメージ● プロジェクトごとのDockerfile● ビルト結果をpushするリポジトリ
○ Lintとかテストレポートとかをみるところ
プロジェクトごとのDockerfile
● クリーンビルトであることを保証する● 各種認証情報は `ADD` するスタイル● 必要な所だけ毎回実行する
○ Dockerは「キャッシュ可能なシェルスクリプト」○ 依存解決までをキャッシュしておくといいかも
● アップロードはDocker経由以外禁止○ 準備したならそもそもDocker経由の方が楽だよね
● ビルト結果は集積所へpush
ビルト結果集積所
● Dockerのビルト結果を `git push` する先○ コミットメッセージにブランチ情報を入れておく
● lint-resultsやtest-resultsを置いておく● publicでよいならgithub pagesも有用か
出来ればコミットフックも…
コミットフックを利用するには別途何かが必要
逆に言えば、コミットフック以外の主要なopsは開発機のDockerへ押し込める…かも
コミットフックを有効活用するなら
● 外部のコミットフック連携サービスを使う● 自前で用意する(今は考えてない)
○ jenkIns○ ukigumo○ Github::Hooks::Manager○ など
Dockerを利用するメリット
● クリーンビルトの環境の存在が自明的に○ Dockerの文化的にそう感じてもらえるはず
● クリーンビルトのための環境作りが容易● ベースイメージでプロジェクト/タスク間の共通化
がしやすい
Dockerを利用するデメリット
● 開発機にDocker依存が増える● イメージのダウンロードに時間がかかる● 閉じた環境を用意するため、認証まわりの準備
が少々面倒な場合も…?● 開発機のストレージ圧迫
Dockerじゃなくてもいいケースの方が多そう
運用イメージ(再掲)
● 作業中はいつも通りに● ステージング,リリースビルトはDockerで● Dockerでのビルト結果を集積所へpush● 環境の用意は手短に
今日までにやったこと
● Dockerのベースイメージを作った○ ichigotake/docker-android-base
● アクティブな趣味環境にDockerfileを作った● 集積所は、スペースだけ作った
○ ichigotake/android-testers-reports
まとめ
● お手軽なCI環境を作るための様子見運用● 自前サーバ依存を減らして出来る事を探る● 全世界の中央サービス的なものは考えない
○ 今はプライベート利用を中心に模索中
● 今Dockerを利用してるのはお試し感が強い○ Dockerじゃない方がミニマルでシンプル感ありそう
おしまい