Slide 1

Slide 1 text

Bitrise Pipelines に移行して、 クレジットを節約しながら 並列でビルド・テストを回す treastrain / Tanaka Ryoga 株式会社ディー・エヌ・エー iOS Test Online @ Online(Zoom Webinars) Friday, October 28, 2022 © DeNA Co.,Ltd. #ios_test_online

Slide 2

Slide 2 text

2 自己紹介 treastrain / Tanaka Ryoga 2021年4月 新卒入社 iOS App 開発をメインに取り組み Bitrise は入社後(配属後)に初めて触った Zenn Publication はじまりました! 👉 https://zenn.dev/p/dena DeNA Co., Ltd. iOS App Developer @treastrain #ios_test_online

Slide 3

Slide 3 text

3 目次 Bitrise Pipelines とは ワークフローを並列に実行する従来の方法 Bitrise Pipelines を使ったワークフローの並列実行 Bitrise Pipelines を 活用するために iOS App プロジェクトでできること 1 2 3 4 #ios_test_online

Slide 4

Slide 4 text

4 Bitrise Pipelines とは #ios_test_online

Slide 5

Slide 5 text

5 Bitrise - モバイルアプリのための継続的インテグレーションとデリバリー。 https://go.bitrise.io/bitrise-japan

Slide 6

Slide 6 text

6 Bitrise Pipelines とは 1 ステップ #ios_test_online ● git clone する ● pod install する ● xcodebuild する ● …etc.

Slide 7

Slide 7 text

7 Bitrise Pipelines とは 1 ワークフロー ステップ1 ステップ2 ステップ3 …続く #ios_test_online

Slide 8

Slide 8 text

クレジット消費 8 Bitrise Pipelines とは 1 ワークフロー ステップ1 ステップ2 ステップ3 …続く トリガー (git push・プルリクエスト) #ios_test_online

Slide 9

Slide 9 text

9 Build Pipelines: efficient CI/CD workflows with parallelization | Bitrise https://blog.bitrise.io/post/build-pipelines-efficient-ci-cd-workflows-with-parallelization

Slide 10

Slide 10 text

10 Bitrise Pipelines とは 1 ワークフロー ステップ1 ステップ2 ステップ3 …続く #ios_test_online

Slide 11

Slide 11 text

11 Bitrise Pipelines とは 1 パイプライン ワークフロー ステップ1 ステップ2 ステップ3 …続く #ios_test_online

Slide 12

Slide 12 text

12 Bitrise Pipelines とは 1 パイプライン ワークフロー1 ステップ1 …続く ワークフロー2 …続く #ios_test_online

Slide 13

Slide 13 text

クレジット消費 クレジット消費 13 Bitrise Pipelines とは 1 …続く #ios_test_online トリガー (git push・プルリクエスト) パイプライン ワークフロー1 ステップ1 …続く ワークフロー2 …続く

Slide 14

Slide 14 text

14 ワークフローを並列に実行する 従来の方法 #ios_test_online

Slide 15

Slide 15 text

15 ワークフローを並列に実行する従来の方法 ● 「ワークフローを並列に実行する」 ● 並列実行できるところ(テストの実行など)を並列化 ● すべてを直列で実行したときよりも実行時間を短縮できるかも 2 ワークフローA ステップA-1 …続く ステップA-2 ワークフローB ステップB-1 …続く ステップB-2 ワークフロー 並列で実行できるように ステップを分割 #ios_test_online

Slide 16

Slide 16 text

16 ワークフローを並列に実行する従来の方法 ● ワークフローの中で「別なワークフロー」の実行を開始するステップを追加 2 ワークフローA ステップA-1 …続く ステップA-2 ワークフローB ステップB-1 …続く ステップB-2 ワークフローO ステップO-1 ステップO-2 ステップO-3 …続く #ios_test_online

Slide 17

Slide 17 text

17 ワークフローを並列に実行する従来の方法 ● 「別なワークフロー」の完了を待つステップで成果物を取得 2 ワークフローA ステップA-1 …続く ステップA-2 ワークフローB ステップB-1 …続く ステップB-2 ワークフローO ステップO-1 ステップO-2 ステップO-3 …続く #ios_test_online

Slide 18

Slide 18 text

18 治安維持のためにCI/CDサービスを活用しておこなったこと - Speaker Deck https://speakerdeck.com/tarappo/cdsahisuwohuo-yong-siteokonatutakoto iOS Test TeaTime #3(2021年10月21日)

Slide 19

Slide 19 text

iOS Test TeaTime #3(2021年10月21日) 19 治安維持のためにCI/CDサービスを活用しておこなったこと - Speaker Deck https://speakerdeck.com/tarappo/cdsahisuwohuo-yong-siteokonatutakoto

Slide 20

Slide 20 text

20 Bitrise Pipelines を使った ワークフローの並列実行 #ios_test_online

Slide 21

Slide 21 text

21 Bitrise Pipelines を使ったワークフローの並列実行 ● 「"ワークフロー"を実行するためのワークフロー」がパイプラインに 置き換わるイメージ 3 パイプライン ワークフロー1 ステップ1 …続く ワークフロー2 …続く #ios_test_online

Slide 22

Slide 22 text

22 Bitrise Pipelines を使ったワークフローの並列実行 ● パイプラインの中のワークフローは「ステージ」に属する 3 パイプライン ワークフロー2 ワークフロー1 ワークフロー3 …続く #ios_test_online

Slide 23

Slide 23 text

23 Bitrise Pipelines を使ったワークフローの並列実行 ● パイプラインの中のワークフローは「ステージ」に属する 3 パイプライン ワークフロー2 ワークフロー1 ワークフロー3 ワークフロー0 ワークフロー4 ステージ1 ステージ2 ステージ3 #ios_test_online

Slide 24

Slide 24 text

24 Bitrise Pipelines を使ったワークフローの並列実行 ● 「ステージ」の中のワークフローは並列で実行される ● ステージ中の全てのワークフローが完了すると次の「ステージ」に進む 3 パイプライン ワークフロー2 ワークフロー1 ワークフロー3 ワークフロー0 ワークフロー4 ステージ1 ステージ2 ステージ3 #ios_test_online

Slide 25

Slide 25 text

25 Build Pipelines: efficient CI/CD workflows with parallelization | Bitrise https://blog.bitrise.io/post/build-pipelines-efficient-ci-cd-workflows-with-parallelization

Slide 26

Slide 26 text

26 Bitrise Pipelines を 活用するために iOS App プロジェクトでできること #ios_test_online

Slide 27

Slide 27 text

● 同じステージの他のワークフローの完了を待っている間のクレジット消費無し ○ 従来の方法ではクレジットを消費していた ■ ワークフロー分割時に考慮する必要がある 定期的にメンテナンスが必要 27 Bitrise Pipelines を活用するために iOS App プロジェクトでできること 4 #ios_test_online 他のワークフローを開始 テスト① 他のワークフロー完了を待機 結果のマージなど テスト② テスト③ 待機時間も クレジットを消費

Slide 28

Slide 28 text

● 同じステージの他のワークフローの完了を待っている間のクレジット消費無し ○ 待機時間が長くなっても、それによるクレジット消費量は増加しない 28 Bitrise Pipelines を活用するために iOS App プロジェクトでできること 4 #ios_test_online パイプライン テスト② テスト① テスト③ ステージ1 ステージ2 結果のマージなど (テスト②・③が終わるまでの) 待機時間の クレジット消費なし

Slide 29

Slide 29 text

29 Bitrise Pipelines を活用するために iOS App プロジェクトでできること ● パイプラインの一部のワークフローが失敗しても、全てを再実行する必要なし 4 #ios_test_online 治安維持のためにCI/CDサービスを活用しておこなったこと - Speaker Deck https://speakerdeck.com/tarappo/cdsahisuwohuo-yong-siteokonatutakoto

Slide 30

Slide 30 text

30 Bitrise Pipelines を活用するために iOS App プロジェクトでできること ● パイプラインの一部のワークフローが失敗しても、全てを再実行する必要なし 4 #ios_test_online 治安維持のためにCI/CDサービスを活用しておこなったこと - Speaker Deck https://speakerdeck.com/tarappo/cdsahisuwohuo-yong-siteokonatutakoto テスト前に失敗した 「成果物」が無い 後続に影響? ここから全てやり直す…?

Slide 31

Slide 31 text

31 Bitrise Pipelines を活用するために iOS App プロジェクトでできること ● パイプラインの一部のワークフローが失敗しても、全てを再実行する必要なし 4 #ios_test_online パイプライン テスト② テスト① テスト③ ステージ1 ステージ2 パイプライン テスト② テスト① テスト③ ステージ1 ステージ2 再実行 ステージ1テスト②で止まると ステージ2は実行しない ステージ1テスト①③は実行せず、 アーティファクトも再実行前のものを使用

Slide 32

Slide 32 text

32 Bitrise Pipelines を活用するために iOS App プロジェクトでできること ● 最も効率のよいパイプライン・ワークフロー構成を考える ○ 時間面・消費クレジット面・再実行の面 4 #ios_test_online パイプライン 事前準備 事前準備 事前準備 事前準備 ビルド ビルド ビルド ビルド テスト① テスト② テスト③ テスト④ テスト⑤ テスト⑥ テスト結果のマージ テスト結果のマージ テスト結果のマージ

Slide 33

Slide 33 text

● ビルドははじめのステージで行う パイプライン 33 Bitrise Pipelines を活用するために iOS App プロジェクトでできること 4 #ios_test_online 事前準備 ビルド

Slide 34

Slide 34 text

● ビルドははじめのステージで行う ● ビルド成果物を次のステージに持っていき、それを使ってテストを実行する パイプライン 34 Bitrise Pipelines を活用するために iOS App プロジェクトでできること 4 #ios_test_online 事前準備 ビルド テスト① テスト② テスト③ テスト④ テスト⑤ テスト⑥

Slide 35

Slide 35 text

● ビルドははじめのステージで行う ● ビルド成果物を次のステージに持っていき、それを使ってテストを実行する パイプライン 35 Bitrise Pipelines を活用するために iOS App プロジェクトでできること 4 #ios_test_online 事前準備 ビルド テスト① テスト② テスト③ テスト④ テスト⑤ テスト⑥ テスト結果のマージ

Slide 36

Slide 36 text

36 Bitrise Pipelines を活用するために iOS App プロジェクトでできること ● Bitrise のレシピサンプルは Test Plans を使ったものになっている 4 #ios_test_online workflow-recipes/ios-merging-test-results-and-deploying-to-the-test-reports-add-on.md at main · bitrise-io/workflow-recipes https://github.com/bitrise-io/workflow-recipes/blob/main/recipes/ios-merging-test-results-and-deploying-to-the-test-reports-add-on.md

Slide 37

Slide 37 text

37 workflow-recipes/ios-merging-test-results-and-deploying-to-the-test-reports-add-on.md at main · bitrise-io/workflow-recipes https://github.com/bitrise-io/workflow-recipes/blob/main/recipes/ios-merging-test-results-and-deploying-to-the-test-reports-add-on.md

Slide 38

Slide 38 text

38 Bitrise Pipelines を活用するために iOS App プロジェクトでできること ● Bitrise Pipelines は現時点でビジュアルエディターが存在しない 4 #ios_test_online

Slide 39

Slide 39 text

39 Bitrise Pipelines を活用するために iOS App プロジェクトでできること ● bitrise.yml を直接書く必要がある ● 難しい文法は全くなく、サンプルレシピ通りに書けばよい ○ Bitrise の中の人が作った 非公式なビジュアルエディタが公式ブログで紹介されている 4 #ios_test_online Build Pipelines: efficient CI/CD workflows with parallelization | Bitrise https://blog.bitrise.io/post/build-pipelines-efficient-ci-cd-workflows-with-parallelization

Slide 40

Slide 40 text

40 Pipeline Viewer https://damienbitrise.github.io/Pipeline-UI/

Slide 41

Slide 41 text

41 まとめ Bitrise Pipelines を使うとワークフローの並列実行が簡単に ステージ間のアーティファクトの受け渡しも可能 消費するクレジットも従来よりも少なくできるかも 慣れてきたら Bitrise Pipelines に合った ワークフローにアップデートしよう 1 2 3 4 #ios_test_online

Slide 42

Slide 42 text

© DeNA Co.,Ltd. 42 #ios_test_online 資料は https://zenn.dev/dena/articles/376a722a08394e にて公開しています