見出し画像

bitrise.yml をリポジトリで管理するための Bitrise ワークフロー

# Bitrise とは

Bitrise は GUI で簡単にワークフローを設定できるモバイルプラットフォーム向けの CI サービスです。

# bitrise.yml とは

GUI で簡単にワークフローを設定できる Bitrise ですが、
bitrise.yml という設定ファイルにワークフローなどの設定を記述することもできます。

  ## bitrise.yml による設定は一般的ではない

Bitrise 公式やユーザコミュニティによるステップがあり、
そのステップを GUI で選択してワークフローを構築することが一般的です。
ステップの名称や入力項目は一度 GUI で設定してみないとわからないため、
いきなり bitrise.yml を直接記述することはなく、
あっても他のワークフローにステップをコピペするくらいです。

  ## bitrise.yml は Bitrise にある

Bitrise のウェブサイトで設定するため bitrise.yml は Bitrise にあります。
他の CI サービスのように設定ファイルをリポジトリで管理しません。

# bitrise.yml をバージョン管理したい

bitrise.yml をバージョン管理することで、
誰でも設定を変更しやすい環境を作り、CI/CD の改善が回るようにしたいです。

そのために以下の2つが必要でした。

1. 設定を簡単に確実に元に戻せるようにする
2. 設定変更をレビューできるようにする

  ## 設定を簡単に確実に元に戻せるようにする

GUI で簡単に設定できるのですが、変更して何か問題あり元に戻したい事があると思います。
ビルドごとにその時点の bitrise.yml が残っている(※)ので戻せないことはないのですが、
戻したいバージョンのビルドを特定して元に戻すのが少し面倒です。
バージョン管理されていれば元に戻すのは簡単です。

* bitrise.ymlファイルへのオンラインアクセス - Bitrise Docs

  ## 設定変更をレビューできるようにする

以下の要因によりレビューできず、Bitrise おじさん化しやすい環境になると思います。
- 設定変更を検知できない
- 設定を変更したいが、他の人に変更内容を伝えにくい

# bitrise.yml をバージョン管理する方法

  ## Bitrise 公式: リポジトリの bitrise.yml を読み込み実行する方法

リポジトリで管理したい場合、以下の方法で管理することができます。

Use bitrise.yml from repository - Bitrise Docs

しかし、この方法では以下の問題があります。

- トリガーの除外パターンが使えなくなる
    - clone するまでトリガー設定が読み込めないため必ずワークフロー実行が必要
- コミット単位で設定変更できない
    - 設定に問題がある場合、bitrise.yml を修正コミットしないと設定変更できない
- BitriseGUI でワークフローを設定できない
    - 使ったことないステップは名称と入力項目がわからないので設定が難しい
- Pull Request で任意の設定で実行可能(※OSSの場合のみ)
    - bitrise.yml を書き換えて PR 送ることでビットコインのマイニングさせることも可能

最後の問題はともかく、GUI で設定できないのは Bitrise のメリットが無くなってしまいます。
使ったことないステップは実質的に利用できないので改善にしくくなってしまいます。

  ## Bitrise 公式の方法の以外の方法はあるか?

リポジトリの bitrise.yml を読み込み実行する方法は上記の問題があるので、
設定は Bitrise 上で行い、Bitrise 上の設定で実行して欲しいです。

Bitrise の設定をマスターとし、リポジトリの bitrise.yml は単なるコピーとします。
そうすれば Bitrise のメリットが無くならず、bitrise.yml をバージョン管理することができます。

以下で bitrise.yml をリポジトリで管理するための Bitrise ワークフローについて説明します。

# bitrise.yml をリポジトリで管理する Bitrise ワークフロー

以下の3つのワークフローを構築します。

1. pr-bitrise-yml: 定期的に bitrise.yml の差分をチェックして PR を送る
2. no-op: 上記の PR で通常のワークフローが動作しないようにする
3. merge-bitrise-yml: PR がマージされたらリポジトリの bitrise.yml を Bitrise に反映する

  ## 1. pr-bitrise-yml: 定期的に bitrise.yml の差分をチェックして PR を送る

下記のワークフローを日次など定期的に実行(※)します。

1. リポジトリを clone する
2. Bitrise から bitrise.yml を API でダウンロードする
3. git で差分をチェックする
4. 差分があれば PR を作成する

ビルドをスケジューリングする - Bitrise Docs

  ## 2. no-op: 上記の PR で通常のワークフローが動作しないようにする

通常、PR にコミットすると何かしらのワークフローが動作するように設定してあると思います。
そのため、何も実行しない no-op ワークフローを作成し、
上記の PR では no-op ワークフローが実行されるようにトリガーを設定します。

  ## 3. merge-bitrise-yml: PR がマージされたらリポジトリの bitrise.yml を Bitrise に反映する

上記の PR のターゲットブランチへの Push をトリガーに以下のワークフローを実行します。

1. リポジトリを clone する
2. コミットが上記の PR のブランチのマージコミットかチェックする
3. 条件に一致する場合、リポジトリの bitrise.yml を API でアップロードする

  ## ワークフロー全体イメージ

上記のワークフローの動作イメージは以下のようになります。

画像1

このフローを構築することによって bitrise.yml をリポジトリで管理することが可能となります。

ここから先は

0字

¥ 100

この記事が気に入ったらチップで応援してみませんか?