私の所属している部署ではアプリのビルドにbitriseを用いています。社内のエンジニア向けにbitriseの概要をまとめたので、それを公開しようと思います。
bitrise用語一覧
ワークフロー
アプリビルドの際に実行される一連のアクション群。(ex. ソースコードのgit clone → アプリビルド → 通知)
一つ一つのアクションはステップと呼ばれます。
一つのアプリに対して複数のワークフローが設定可能です。
そのため、テストのみ行うワークフロー、テスト,ビルド,デプロイを行うワークフローなどを分けておき、トリガー(後述)によって動作するワークフローを変更することでアプリの開発状況に適したジョブを実行しやすくなります。
設定方法はwebUI上での設定とbitrise.yamlファイル(bitriseの設定ファイル)の編集の2通りがあります。設定ファイルについては設定例で紹介します。
環境変数(Env Vars)
ビルド用のマシン上で用いられる環境変数を設定できます。シェルスクリプトで用いるのと同様に${環境変数名}
で参照可能です。環境変数を用いて設定値を渡すようになっているステップも多いです。
写真のようにwebUI上で設定値に環境変数を指定できます。(写真青枠のBITRISE_PORJECT_PATHとBITRISE_SCHEMEが環境変数)
ワークフローごとに設定/上書きをすることが可能です。
シークレット
特別なタイプの環境変数で、以下の特徴をもちます。
-
bitrise.yamlファイル上で閲覧、編集ができない
-
暗号化されて保存される
-
ビルドログ等に表示される際に内容が見えない
上記特徴があるため、APIキー,パスワード等の秘密情報を格納するのに使用されます。シークレットは下写真の画面で設定します。
トリガー
自動ビルドのスタート契機、実行するワークフローを設定できます。
※ビルドの開始は、webUI上での手動実行、決まった時間に定期実行、APIを用いて実行等もできますが、この資料では自動ビルドのみについて解説します。
github, gitlabなどのgitホスティングサービスにbitriseへのwebフックを設定することで、git push
, git tag
等のアクションに対してワークフローを紐付けます。
以下の3アクションに対して設定することが可能です。
-
git push
-
pull request
-
git tag
git push
ブランチへのプッシュアクションをトリガーにワークフローを実行します。
設定するのはプッシュされるブランチの名前とプッシュされた際に実行されるワークフローのセットです。ブランチ名は正規表現を用いることが可能で、例えばfeature/*
と指定するとfeature/1-debug
やfeature/1/debug
等も対象となります。
pull request
プルリクエスト(マージリクエスト)が発行されることをトリガーにワークフローを実行します。
設定するのはソースブランチ(プルする側のブランチ)名とターゲットブランチ(プルする側のブランチ)名とプルリクエストが発行された際に実行されるワークフローのセットです。こちらもブランチ名に正規表現を用いることが可能です。
git tag
タグの発行をトリガーにワークフローを実行します。
設定するのはタグ名とタグが発行された際に実行されるワークフローのセットです。こちらもタグ名に正規表現を用いることができます。
iOSビルド設定例
事前準備
必要ファイル等
iOSアプリのビルドには以下の準備が必要です。
・アプリビルド用のプロビジョニングプロファイル、p12ファイルの準備
・アプリのソースコードを配置しているgitへアクセス可能な秘密鍵 (pem)
codesigndocを用いて必要なファイル群をエクスポートしておいてください。(手動でやるのは大変です)
前提条件
gitホスティングサービスは以下のいづれかを用いているとします(bitriseのwebhookを設定するのが困難なため)
またサービスによって検知できるイベントが異なるのでそれも記述します。
gitホスティングサービス | 検知できるイベント |
---|---|
GitHub | Code Push, Pull Request, Tag Push |
Gitlab | Code Push, Merge Request, Tag Push |
Bitbucket | Code Push, Pull Request, Tag Push |
Gogs | Code Push |
Visual Studio Online | Code Push, Tag Push |
Gogs | Code Push |
Deveo | Code Push, Tag Push |
Assembla | Code Push |
iOSの設定方法を紹介します。
ワークフローの設定
-
証明書等のアップロード Work flow→Code Signingからプロビジョニングプロファイル、p12ファイルをアップロードします。
-
これからの説明は以下の設定(bitrise.yamlファイル)を元に行います。[]内の文字列はプロジェクト毎に置き換わる値だと思ってください。
※ワークフローについてはほぼデフォルト設定となっています。--- format_version: '6' default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git project_type: ios workflows: deploy: steps: - activate-ssh-key@4.0.3: run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}' - git-clone@4.0.14: {} - cache-pull@2.0.1: {} - certificate-and-profile-installer@1.10.1: {} - recreate-user-schemes@1.0.2: inputs: - project_path: "$BITRISE_PROJECT_PATH" - xcode-archive@2.4.19: inputs: - project_path: "$BITRISE_PROJECT_PATH" - scheme: "$BITRISE_SCHEME" - export_method: "$BITRISE_EXPORT_METHOD" - cache-push@2.0.5: {} - deploy-to-bitrise-io@1.3.19: inputs: - is_enable_public_page: 'false' app: envs: - opts: is_expand: false BITRISE_PROJECT_PATH: [プロジェクトファイルのパスを記述] - opts: is_expand: false BITRISE_SCHEME: [ビルドスキーマを指定] - opts: is_expand: false BITRISE_EXPORT_METHOD: [出力形式(ad-hoc)を指定] trigger_map: - tag: "*.*.*" workflow: deploy
ワークフロー
・deployという名前のワークフローが定義されている
・deployワークフローの動作内容は以下
・ssh秘密鍵(git clone用)の設定
・ソースコードのgit clone
・キャッシュのダウンロード
・証明書、プロビジョニングプロファイルの設定(インストール)
・ユーザスキーマの作成(sharedのスキーマをコミットしてなくても動くように)
・xcode archiveの実行
・キャッシュのアップロード
・アプリのデプロイ(bitriseの管理画面からアプリをインストールできるようにする)
環境変数
環境変数としてBITRISE_PROJECT_PATH, BITRISE_SCHEME, BITRISE_EXPORT_METHODが定義されている(すべてxcode archiveで使われている)
トリガー
*.*.*(1.0.0など)という名前のタグが作成されたときにdeployワークフローが実行されるようにトリガーが設定されている
- 実行テストマニュアルで作成したワークフローを実行、成功することを確認してください。失敗する場合はログを見て対策をしてください。
webフックの設定
コードのコミット等で自動的にワークフローが実行されるようにwebフックの設定を行います。
-
webフックの設定(gitlabの場合)
-
codeタブを選択して、ページ内のINCOMING WEBHOOKSのSETUP MANUALLYを選択して出てきたURLをコピーします。
-
まとめ
- bitriseのビルド設定(iOS)を行いました
- gitlabのwebhookの設定をして自動ビルドの準備を行いました
bitriseの利点はGUIで直感的に設定ができ、アプリのビルドになれてないエンジニアでも簡単に設定を行うことができることだと思います。機会があればぜひ使ってみてください。