JapanTaxi では CI環境 として Travis CI を使っていましたが、今年からモバイル系のチームは Bitrise に移行しました。導入に関してはSETチームの方で環境準備をしてくれたものを各チームで利用しています。
私個人としては今まで自動化に関する取り組みをしてきたことは無かったのですが、日々開発する中で「こんなこと出来たら便利だな〜」ぐらいの気持ちで Bitrise と戯れてみました。
iOSチームでは既に様々な作業の自動化を行っているので紹介したいと思います。
基本的に週1のサイクルでリリースをしているのですが、リリース作業の中で手動で行っているものがまだまだあり、ちょっとした作業なのですが毎週やるとなると面倒だなと感じることがあったので、自動化してみようと思いました。
運用として、リリース用の branch に対して直接 Push 出来ないように保護設定を掛けてます。branch が作成されたら保護設定を入れて、リリースしたら削除する作業を手動で行っていました。
やったことはシンプルで、リリース用の branch が push されたら GitHub API を叩くだけです。
curl -X PUT https://api.github.com/repos/:owner/:repo/branches/$BITRISE_GIT_BRANCH/protection \
-H "Authorization: token $GITHUB_ACCESS_TOKEN" \
-H "Accept: application/vnd.github.luke-cage-preview+json" \
-d @- << EOF
{
"required_status_checks": {
"strict": false,
"contexts": [
"ci/bitrise/********/pr"
]
},
"enforce_admins": true,
"required_pull_request_reviews": {
"dismiss_stale_reviews": true,
"require_code_owner_reviews": false,
"required_approving_review_count": 1
},
"restrictions": null
}
EOF
こちらもシンプルでリリース後に Tag を作成する運用を行っており、 Tag 作成をトリガーに GitHub API を叩くだけです。
branchName="release/$BITRISE_GIT_TAG"
curl -X DELETE https://api.github.com/repos/:owner/:repo/branches/$branchName/protection \
-H "Authorization: token $GITHUB_ACCESS_TOKEN"
Beta への配信部分の自動化は出来ていましたが、バージョンをインクリメントして branch を push するまでにごにょごにょ手動の作業が入っていました。
Slack からコマンドを実行するだけでリリース用の branch が GitHub に pushされるように自動化しました。push 後は今まで通りの動きで Fabric Beta に配信されます。
/japantaxi-ios w:code-freeze | b:maseter | ENV[RELEASE_APP_VERSION]: 4.4.11 と入力することで Bitrise のWorkFlowを呼出しています。
fastlane に新しくレーンを追加しました。標準でバージョンのインクリメントはあるのですが、info.plist を更新する仕様になっており、JapanTaxi アプリでは xcconfig で管理していたので使えませんでした。今回は plugin を入れて解決しました。
root_directory = ENV['ROOT_DIRECTORY']
release_app_version = ENV['RELEASE_APP_VERSIION']
xcconfig_path ='sampleApp/Configuration/Base.xcconfig'
update_xcconfig_value(
path: "#{root_directory}/#{xcconfig_path}",
name: "APP_VERSION",
value: release_app_version
)
↑初めて本番で動かした時
既に動いている WorkFlow があったので、それを真似つつポチポチ Step を繋げていけば自動化出来ちゃう Bitrise は素晴らしいですね。今回で完全に理解することが出来ました。(嘘)
他にも GitHub のリリース作成を自動化したり、細かい部分でいくつかやってみたいことが出来ました。
また、今回触ってみて既存の WorkFlow で共通している Step 部分が個々に定義されており、メンテナンスしづらい状況になっていいることが分かりました。分割して共通化していくことも進めていきたいです。小さいな改善ですが今後も継続して取り組んでいき、開発の効率化をしていきたいと思います。
Mobility Technologies では共に日本のモビリティを進化させていくエンジニアを募集しています。話を聞いてみたいという方は、是非 募集ページ からご相談ください!