Copyright © DeNA Co.,Ltd. All Rights Reserved.
Kyobashi.swfit #2
2016/08/17(Wed)
平田敏之@DeNA
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環境整備
⁃ テスト基盤環境の開発
⁃ などなど
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日のお話
1. iOSアプリ開発で利用しているCI環境はありますか?
2. CI環境のメンテンス、セットアップはどうしていますか?
1. ★ iOSアプリの開発環境のセットアップのツラミ
2. ★ Xcodeのメジャーアップデートというツラミ
3. CI環境でどこまでやっていますか?
1. ★ Slackを使った結果の通知
Copyright © DeNA Co.,Ltd. All Rights Reserved.
IOSアプリ開発で利用しているCI環境はありますか?
※今回はオンプレミス型のCI環境のお話です※
オンプレミスかクラウドのどちらが良いかは対象となるプロジェクトに応じて判断するのが良い
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI環境といえば
 Jenkins
⁃ 言わずとしれた定番だが運用コストがかかる
⁃ なんでも出来るがJenkinsおじさんも出来やすい
⁃ LTS 2.7.2 (https://jenkins.io/changelog-stable/)
 CircleCI
⁃ 簡単に利用できる優れもの
⁃ 痒いところに手が届かない
⁃ Enterprise版もある
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Jenkins 2.7.1 + blueocean plugin
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の実行結果の通知先
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI環境のメンテンス、セットアップは
どうしていますか?
※インストールしないといけないものが多いという課題※
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のバージョン
• メジャーアップデート時期は複数のバージョンが必要
⁃ 複数のバージョンを使ってアプリをビルドしたりする
Copyright © DeNA Co.,Ltd. All Rights Reserved.
(1) 環境のセットアップの簡易化
 課題
⁃ 定期的に更新するのは非常にコスト高
 解決策
⁃ Ansibleを利用してセットアップ
• 証明書のインポート
• Provisioning Profileの設置
⁃ 複数AppleDeveloperProgram対応
• Xcodeのインストール
 現状
⁃ Jenkinsを使って簡易セットアップ
• マルチ構成プロジェクトを用いてslaveマシンを一気にセットアップ
Copyright © DeNA Co.,Ltd. All Rights Reserved.
(2) Xcodeの複数バージョン対応
 課題
⁃ Xcodeを複数インストールし、使い分ける必要がある
• DEVELOPER_DIRに値を入れるようにしたりする
⁃ slaveにインストールされているかの保証は無く手動で設定したり..
 解決策
⁃ Jenkinsの独自プラグインを用意
• インストールされているXcodeを自動チェックし、Labelが貼られる
• 指定したXcodeのバージョンでJobを実行できる
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI環境でどこまでやっていますか?
※CI環境を用いたリリースまでのフローについての話は割愛※
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というのも有
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Slackを用いての通知
 Jenkinsのjobの結果を通知
⁃ Jobが失敗 or 成功したことを伝えたい
• 例) 定期実行の自動テストが失敗したことを全員に伝える
• 例) アプリのビルドが終わったことをjobを動かした人に伝える
• ※@hereや@channelをしすぎるのは逆効果なこともあります※
⁃ 課題
• 現状のslack pluginは良い感じにmentionをしてくれない
⁃ カスタムメッセージを駆使するぐらいしか..
⁃ 解決策
• 現状のslack pluginを改良しちゃえば良い
⁃ slack api使ってuserの情報も取れば良い!
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Slack pluginのカスタマイズ
 機能
⁃ Jobのステータスに応じてmentionを飛ばす
• 任意のuser
• テストフレーズで実行したuser
• JenkinsのJobを実行したuser
• @here
• @channel
Copyright © DeNA Co.,Ltd. All Rights Reserved.
まとめ
 iOSアプリの開発環境のセットアップのツラミ
→ Ansbileで解決
 Xcodeのメジャーアップデートというツラミ
→ 新規にJenkins pluginを作って解決
 Slackを使った結果の通知
→ 既存のJenkins pluginを改良して解決

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

  • 1.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Kyobashi.swfit #2 2016/08/17(Wed) 平田敏之@DeNA iOSアプリ開発のCI環境 - Jenkins編 -
  • 2.
    Copyright © DeNACo.,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環境整備 ⁃ テスト基盤環境の開発 ⁃ などなど
  • 3.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 今日のお話 1. iOSアプリ開発で利用しているCI環境はありますか? 2. CI環境のメンテンス、セットアップはどうしていますか? 1. ★ iOSアプリの開発環境のセットアップのツラミ 2. ★ Xcodeのメジャーアップデートというツラミ 3. CI環境でどこまでやっていますか? 1. ★ Slackを使った結果の通知
  • 4.
    Copyright © DeNACo.,Ltd. All Rights Reserved. IOSアプリ開発で利用しているCI環境はありますか? ※今回はオンプレミス型のCI環境のお話です※ オンプレミスかクラウドのどちらが良いかは対象となるプロジェクトに応じて判断するのが良い
  • 5.
    Copyright © DeNACo.,Ltd. All Rights Reserved. CI環境といえば  Jenkins ⁃ 言わずとしれた定番だが運用コストがかかる ⁃ なんでも出来るがJenkinsおじさんも出来やすい ⁃ LTS 2.7.2 (https://jenkins.io/changelog-stable/)  CircleCI ⁃ 簡単に利用できる優れもの ⁃ 痒いところに手が届かない ⁃ Enterprise版もある
  • 6.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Jenkins 2.7.1 + blueocean plugin Jenkinsも進化しています
  • 7.
    Copyright © DeNACo.,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の実行結果の通知先
  • 8.
    Copyright © DeNACo.,Ltd. All Rights Reserved. CI環境のメンテンス、セットアップは どうしていますか? ※インストールしないといけないものが多いという課題※
  • 9.
    Copyright © DeNACo.,Ltd. All Rights Reserved. iOSアプリ開発の面倒なところ – 環境構築 – やらないといけないことは多い..  (1) 定期的に更新をしないといけない ⁃ 証明書 • Apple Developer Programの更新に併せて(1年に1回) ⁃ Provisioning Profile • デバイスを追加したら • App IDを追加したら • Apple Developer Programの更新に併せて(1年に1回)  (2) Xcodeのバージョン • メジャーアップデート時期は複数のバージョンが必要 ⁃ 複数のバージョンを使ってアプリをビルドしたりする
  • 10.
    Copyright © DeNACo.,Ltd. All Rights Reserved. (1) 環境のセットアップの簡易化  課題 ⁃ 定期的に更新するのは非常にコスト高  解決策 ⁃ Ansibleを利用してセットアップ • 証明書のインポート • Provisioning Profileの設置 ⁃ 複数AppleDeveloperProgram対応 • Xcodeのインストール  現状 ⁃ Jenkinsを使って簡易セットアップ • マルチ構成プロジェクトを用いてslaveマシンを一気にセットアップ
  • 11.
    Copyright © DeNACo.,Ltd. All Rights Reserved. (2) Xcodeの複数バージョン対応  課題 ⁃ Xcodeを複数インストールし、使い分ける必要がある • DEVELOPER_DIRに値を入れるようにしたりする ⁃ slaveにインストールされているかの保証は無く手動で設定したり..  解決策 ⁃ Jenkinsの独自プラグインを用意 • インストールされているXcodeを自動チェックし、Labelが貼られる • 指定したXcodeのバージョンでJobを実行できる
  • 12.
    Copyright © DeNACo.,Ltd. All Rights Reserved. CI環境でどこまでやっていますか? ※CI環境を用いたリリースまでのフローについての話は割愛※
  • 13.
    Copyright © DeNACo.,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というのも有
  • 14.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Slackを用いての通知  Jenkinsのjobの結果を通知 ⁃ Jobが失敗 or 成功したことを伝えたい • 例) 定期実行の自動テストが失敗したことを全員に伝える • 例) アプリのビルドが終わったことをjobを動かした人に伝える • ※@hereや@channelをしすぎるのは逆効果なこともあります※ ⁃ 課題 • 現状のslack pluginは良い感じにmentionをしてくれない ⁃ カスタムメッセージを駆使するぐらいしか.. ⁃ 解決策 • 現状のslack pluginを改良しちゃえば良い ⁃ slack api使ってuserの情報も取れば良い!
  • 15.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Slack pluginのカスタマイズ  機能 ⁃ Jobのステータスに応じてmentionを飛ばす • 任意のuser • テストフレーズで実行したuser • JenkinsのJobを実行したuser • @here • @channel
  • 16.
    Copyright © DeNACo.,Ltd. All Rights Reserved. まとめ  iOSアプリの開発環境のセットアップのツラミ → Ansbileで解決  Xcodeのメジャーアップデートというツラミ → 新規にJenkins pluginを作って解決  Slackを使った結果の通知 → 既存のJenkins pluginを改良して解決