SlideShare a Scribd company logo
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を改良して解決

More Related Content

What's hot (20)

バージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフバージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフ
Toshiyuki Hirata
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえる
Toshiyuki Hirata
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情
Toshiyuki Hirata
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCI
Toshiyuki Hirata
 
DroidKaigi_devicefarm
DroidKaigi_devicefarmDroidKaigi_devicefarm
DroidKaigi_devicefarm
Shunsuke Maeda
 
fastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみたfastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみた
Toshiyuki Hirata
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
Shunsuke Maeda
 
DeNAにおけるSWETの役割
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割
Toshiyuki Hirata
 
iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介
Shunsuke Maeda
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
Shunsuke Maeda
 
iOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるiOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進める
Shunsuke Maeda
 
コードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Androidコードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Android
Toshiyuki Hirata
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
Toshiyuki Hirata
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercari
Vishal Banthia
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
Toshiyuki Hirata
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
mirer
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
Toshiyuki Hirata
 
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Masanori Satoh
 
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
gree_tech
 
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバックSEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
Kouhei Sutou
 
バージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフバージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフ
Toshiyuki Hirata
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえる
Toshiyuki Hirata
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情
Toshiyuki Hirata
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCI
Toshiyuki Hirata
 
fastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみたfastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみた
Toshiyuki Hirata
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
Shunsuke Maeda
 
DeNAにおけるSWETの役割
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割
Toshiyuki Hirata
 
iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介
Shunsuke Maeda
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
Shunsuke Maeda
 
iOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるiOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進める
Shunsuke Maeda
 
コードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Androidコードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Android
Toshiyuki Hirata
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
Toshiyuki Hirata
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercari
Vishal Banthia
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
Toshiyuki Hirata
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
mirer
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
Toshiyuki Hirata
 
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Masanori Satoh
 
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
gree_tech
 
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバックSEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
Kouhei Sutou
 

Similar to iOSアプリ開発のCI環境 - Jenkins編 - (20)

CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
Yuki Ando
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
Yushi_Takagi
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
TIS Inc.
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
Kaoru NAKAMURA
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
Yuta Matsumura
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
 
Open STF Plugin 作ってみた
Open STF Plugin 作ってみたOpen STF Plugin 作ってみた
Open STF Plugin 作ってみた
justice_sm
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
Yasuharu Seki
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
dena_study
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
Yahoo!デベロッパーネットワーク
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
 
これからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れこれからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れ
Mitsuru Katoh
 
【QCon】 Get Clean, Stay Clean 価値を向上し続けるための秘訣 #QConTokyo
【QCon】 Get Clean, Stay Clean 価値を向上し続けるための秘訣 #QConTokyo 【QCon】 Get Clean, Stay Clean 価値を向上し続けるための秘訣 #QConTokyo
【QCon】 Get Clean, Stay Clean 価値を向上し続けるための秘訣 #QConTokyo
智治 長沢
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
Yohei Oda
 
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developer Camp 2012 Japan Fall
 
Dev camp2012jpn day2special
Dev camp2012jpn day2specialDev camp2012jpn day2special
Dev camp2012jpn day2special
Katsuhito Katoh
 
『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究
asatou
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
Yuki Igarashi
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
DeNA
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
Yuki Ando
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
Yushi_Takagi
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
TIS Inc.
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
Kaoru NAKAMURA
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
Yuta Matsumura
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
 
Open STF Plugin 作ってみた
Open STF Plugin 作ってみたOpen STF Plugin 作ってみた
Open STF Plugin 作ってみた
justice_sm
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
Yasuharu Seki
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
dena_study
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
 
これからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れこれからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れ
Mitsuru Katoh
 
【QCon】 Get Clean, Stay Clean 価値を向上し続けるための秘訣 #QConTokyo
【QCon】 Get Clean, Stay Clean 価値を向上し続けるための秘訣 #QConTokyo 【QCon】 Get Clean, Stay Clean 価値を向上し続けるための秘訣 #QConTokyo
【QCon】 Get Clean, Stay Clean 価値を向上し続けるための秘訣 #QConTokyo
智治 長沢
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
Yohei Oda
 
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developer Camp 2012 Japan Fall
 
Dev camp2012jpn day2special
Dev camp2012jpn day2specialDev camp2012jpn day2special
Dev camp2012jpn day2special
Katsuhito Katoh
 
『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究
asatou
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
Yuki Igarashi
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
DeNA
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
 

More from Toshiyuki Hirata (7)

iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
Toshiyuki Hirata
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
Toshiyuki Hirata
 
iOSにおける自動テストの並列化
iOSにおける自動テストの並列化iOSにおける自動テストの並列化
iOSにおける自動テストの並列化
Toshiyuki Hirata
 
UIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめるUIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめる
Toshiyuki Hirata
 
UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法
Toshiyuki Hirata
 
我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有
Toshiyuki Hirata
 
レビューのコストを削減するための施策
レビューのコストを削減するための施策レビューのコストを削減するための施策
レビューのコストを削減するための施策
Toshiyuki Hirata
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
Toshiyuki Hirata
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
Toshiyuki Hirata
 
iOSにおける自動テストの並列化
iOSにおける自動テストの並列化iOSにおける自動テストの並列化
iOSにおける自動テストの並列化
Toshiyuki Hirata
 
UIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめるUIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめる
Toshiyuki Hirata
 
UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法
Toshiyuki Hirata
 
我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有
Toshiyuki Hirata
 
レビューのコストを削減するための施策
レビューのコストを削減するための施策レビューのコストを削減するための施策
レビューのコストを削減するための施策
Toshiyuki Hirata
 

Recently uploaded (8)

学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
Toyo University
 
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdfJaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
MaiKaneko4
 
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
suzukiyu1
 
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptxダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ssuserfcafd1
 
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアルLoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
CRI Japan, Inc.
 
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf
Ayachika Kitazaki
 
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
 
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
Toyo University
 
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdfJaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
MaiKaneko4
 
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
suzukiyu1
 
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptxダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ssuserfcafd1
 
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアルLoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
CRI Japan, Inc.
 
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf
Ayachika Kitazaki
 
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
 

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

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