Bitbucket 上にあるプロジェクトの証明書を fastlane match で管理するときに、 Bitbucket と CicleCIが連携できなくて困った話と、その解決策 feat. fastlane

2017.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんぬづは、先日購入したBluetooth連携ボタン flic を、TwitterやSlackと連携させて遊んでいる田中です。今のところSlackでおみくじを引くのが楽しいです。リュックの底の方で暴発するのもまた一興。

スクリーンショット 2017-07-07 16.11.13

さて、今回の記事は Bitbucket 上にあるプロジェクトの証明書を fastlane match で管理するときに、 Bitbucket と CicleCIが連携できなくて困った話と、その解決策を紹介します。

CircleCIが複数のプライベートリポジトリへのアクセスを許可されていない問題

fastlane match とCI連携の流れ

fastlane match を使って証明書とProvisioning Profileを管理する場合にこの問題と遭遇しました。

fastlane matchをCI上で使う場合の処理の流れは以下になります。

  • 証明書とProvisioning Profileを管理するためのプライベートリポジトリを別途作成しておく
  • CircleCI上でプロジェクトをビルドするときに、fastlane matchを経由して必要な証明書類をダウンロードする
  • CircleCIがダウンロードした証明書類を使ってプロジェクトをビルドする

CircleCIがこの処理を行う上で、プロジェクトのあるリポジトリの他に、証明書とProvisioning Profileを管理しているリポジトリにアクセスする必要があります。通常であればCircleCIが他のプライベートリポジトリにアクセスすることはできませんが、それを許可する設定として Checkout SSH keys (Project Setting > Checkout SSH keys) が用意されています。

この Checkout SSH keys ですが、GitHubを使っている場合には、 Create and add <ユーザー名> user key ボタンを押すことで自動的にSSHKeyが登録され、証明書用のリポジトリにアクセスすることができるようになります。

Project_settings_-_ktanaka117_Konomi_-_CircleCI

Cursor_と_SSH_and_GPG_keys

しかしBitbucketの場合には自動で登録されません。それどころか、自力で登録するためのSSHKeyを参照する画面がありません。この解決策を紹介します。

いくつかの解決策

解決策1: ブラウザの開発者ツールを使ってpublic_keyを取得する

ちょうど同じ問題が公式のQ&Aに掲載されていました。

手順は以下のとおりです。ここではGoogle Chromeを使ったやり方を紹介します。

  • CircleCIの Project Setting > Checkout SSH keys を開く
  • Google Chromeで Command + alt + i のショートカットを使って開発者ツールを開く
  • 開発者ツールの Network タブを開く
  • Checkout SSH keys 画面の Create and add <ユーザー名> user key ボタンを押す
  • 開発者ツールの Network タブの中にある、 Name カラムから checkout-key を選択し、さらにその中の Response タブからpublic_keyを取得する
  • Bitbucketに取得したpublic_keyを登録する(https://bitbucket.org/account/user/<ユーザーID>/ssh-keys/)

Project_settings_-_kTanaka117_certs_-_CircleCI

解決策2: GitHubを使う

Bitbucketを「無料で使えるから」という理由で使っている人も少なくはないのではないでしょうか。しかし、もし上記の解決策がなんらかの理由で採択できなくて、手っ取り早く解決したい場合はおとなしくGitHubに課金した方が良いと思います。先述したとおり、GitHubのを利用すれば連携が容易です。

まとめ

Bitbucket 上にあるプロジェクトの証明書を fastlane match で管理するときに、 Bitbucket と CicleCIを連携させる方法を紹介しました。紹介した方法がCircleCI公式のスタッフからの回答であることを見ると、これが正攻法のようです。運用でカバー感あるな!

今回の問題は先日開催されたfastlane勉強会 vol3のメンター準備会で遭遇しました。普段GitHubで作業を行なっているため、スタッフも引っかかることのなかった問題でした。?

「詰まりどころも一緒に悩んでくれる、そう、fastlane勉強会ならね。」fastlane勉強会への参加、お待ちしております!

参考・関連