iosアプリ開発のci環境 - jenkins編 -

16
Copyright © DeNA Co.,Ltd. All Rights Reserved. Kyobashi.swfit #2 2016/08/17(Wed) 平平平平 @DeNA iOS 平平平平平平 CI 平平 - Jenkins 平 -

Upload: toshiyuki-hirata

Post on 19-Feb-2017

938 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Kyobashi.swfit #22016/08/17(Wed)

平田敏之 @DeNA

iOS アプリ開発の CI 環境 - Jenkins 編 -

Page 2: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

自己紹介

平田 敏之⁃ DeNA SWET G ( テスト基盤チーム etc) 所属• SWET とは?

⁃ Software Engineer in Test• http://www.slideshare.net/masaki/dena-software-engineer-in-test

⁃ ミッション• DeNA サービス全般の品質向上

• DeNA エンジニアの開発生産性向上

• 私が主にやっていること⁃ クライアントアプリ周りのテスト戦略、自動テストの開発

⁃ CI/CD 環境整備

⁃ テスト基盤環境の開発

⁃ などなど

Page 3: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

今日のお話

1. iOS アプリ開発で利用している CI 環境はありますか?

2. CI 環境のメンテンス、セットアップはどうしていますか?

1. ★ iOS アプリの開発環境のセットアップのツラミ

2. ★ Xcode のメジャーアップデートというツラミ

3. CI 環境でどこまでやっていますか?

1. ★ Slack を使った結果の通知

Page 4: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

IOS アプリ開発で利用している CI 環境はありますか?

※ 今回はオンプレミス型の CI 環境のお話です※オンプレミスかクラウドのどちらが良いかは対象となるプロジェクトに応じて判断するのが良

Page 5: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

CI 環境といえば

Jenkins⁃ 言わずとしれた定番だが運用コストがかかる⁃ なんでも出来るが Jenkins おじさんも出来やすい⁃ LTS 2.7.2 (https://jenkins.io/changelog-stable/)

CircleCI⁃ 簡単に利用できる優れもの⁃ 痒いところに手が届かない⁃ Enterprise 版もある

Page 6: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Jenkins 2.7.1 + blueocean plugin

Jenkins も進化しています

Page 7: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

今回の CI 環境の構成 ( の一部 ) Github Jenkins

⁃ setup / maintenance• Ansible( 独自 )

⁃ plugin( の一部 )• slack ( 独自カスタマイズ )• Xcode 複数バージョン管理 plugin( 独自 )• Ci Skip Plugin• Copy Artifact Plugin• Credentials Binding Plugin• GitHub Pull Request Builder• Groovy Postbuild• JUnit Plugin• Slack Notification Plugin• Throttle Concurrent Builds Plug-in

Slack⁃ Jenkins の実行結果の通知先

Page 8: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

CI 環境のメンテンス、セットアップはどうしていますか?

※ インストールしないといけないものが多いという課題※

Page 9: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

iOS アプリ開発の面倒なところ – 環境構築 –

やらないといけないことは多い ..

(1) 定期的に更新をしないといけない⁃ 証明書• Apple Developer Program の更新に併せて (1 年に 1 回 )

⁃ Provisioning Profile• デバイスを追加したら

• App ID を追加したら

• Apple Developer Program の更新に併せて (1 年に 1 回 )

(2) Xcode のバージョン• メジャーアップデート時期は複数のバージョンが必要

⁃ 複数のバージョンを使ってアプリをビルドしたりする

Page 10: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

(1) 環境のセットアップの簡易化

課題⁃ 定期的に更新するのは非常にコスト高

解決策⁃ Ansible を利用してセットアップ• 証明書のインポート

• Provisioning Profile の設置

⁃ 複数 AppleDeveloperProgram 対応

• Xcode のインストール

現状⁃ Jenkins を使って簡易セットアップ• マルチ構成プロジェクトを用いて slave マシンを一気にセットアップ

Page 11: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

(2) Xcode の複数バージョン対応

課題⁃ Xcode を複数インストールし、使い分ける必要がある• DEVELOPER_DIR に値を入れるようにしたりする

⁃ slave にインストールされているかの保証は無く手動で設定したり ..

解決策⁃ Jenkins の独自プラグインを用意• インストールされている Xcode を自動チェックし、 Label が貼られる

• 指定した Xcode のバージョンで Job を実行できる

Page 12: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

CI 環境でどこまでやっていますか?

※CI 環境を用いたリリースまでのフローについての話は割愛※

Page 13: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

CI 環境におけるステップ

1. 個人のマシンで全ておこなっている

1. Xcode で全ておこなっている

2. CLI で出来るようになっている• fastlane などを使用

2. CI 環境がある (※ 個々の詳細については割愛 )

1. アプリのビルド

2. 実行結果は Slack などで通知

3. テストの実行1. 環境

1. iOS シミュレーター

2. 実機 (DeviceFarm / マシンに接続されている端末 )2. 旧バージョンのアプリで実行

4. 検証済のアプリを iTunesConnect にアップロード

5. 検証用 ( など ) に DeployGate などにアップロード• Jenkins から直接 DL というのも有

Page 14: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Slack を用いての通知

Jenkins の job の結果を通知⁃ Job が失敗 or 成功したことを伝えたい• 例 ) 定期実行の自動テストが失敗したことを全員に伝える

• 例 ) アプリのビルドが終わったことを job を動かした人に伝える

• ※@here や @channel をしすぎるのは逆効果なこともあります※

⁃ 課題• 現状の slack plugin は良い感じに mention をしてくれない

⁃ カスタムメッセージを駆使するぐらいしか ..

⁃ 解決策• 現状の slack plugin を改良しちゃえば良い

⁃ slack api 使って user の情報も取れば良い!

Page 15: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Slack plugin のカスタマイズ

機能⁃ Job のステータスに応じて mention を飛ばす• 任意の user• テストフレーズで実行した user• Jenkins の Job を実行した user• @here• @channel

Page 16: iOSアプリ開発のCI環境 - Jenkins編 -

Copyright © DeNA Co.,Ltd. All Rights Reserved.

まとめ

iOS アプリの開発環境のセットアップのツラミ

→ Ansbile で解決

Xcode のメジャーアップデートというツラミ

→ 新規に Jenkins plugin を作って解決

Slack を使った結果の通知

→ 既存の Jenkins plugin を改良して解決