CircleCIでAndroidの自動テスト
個人的な勉強でCircleCIとGitHubの連携を試した時のメモです。
おそらく、次回同じことをやろうとした時には忘れているのでメモを残します。
目次
手順
- GitHubのリポジトリを用意する
- CircleCIのアカウントを作成する
- CircleCIとGitHubを連携させる
- スクリプトを修正する
GitHubのリポジトリを用意する
これは説明するまでもないですね。
CircleCIのアカウントを作成する
GitHubアカウントで登録してしまえば、CircleCIで新たにアカウントを作成しなくて済みます。
- その場合も、事後的にメールアドレスを登録して認証しないと一部の機能が使えないようです。
CircleCIとGitHubを連携させる
鍵を作成して、CircleCI側とGitHub側それぞれに預けます。
鍵の作成
https://circleci.com/docs/ja/add-ssh-key/
ssh-keygen -t ed25519 -C "email_address@example.ne.jp"
実行すると、実行したディレクトリにkey
とkey.pub
というファイルができます。
- 前者が秘密鍵です。CircleCIに保管します。
- 後者が公開鍵です。GitHubに保管します。
公開鍵をGitHubへ保管する
手順
- GitHubのRepositoryを選ぶ
- Settingsg -> Deploy keys -> Add deploy keyと進む
- 適当なタイトルをつけて、先ほど作成した公開鍵を貼り付け、
Add key
を押す
今回の例だと、公開鍵は
ssh-ed25519 ...(鍵本体)... email_address@example.ne.jp
のような型式になっていると思います。
秘密鍵をCircleCIへ保管する
CircleCIにログインしてProjects
-> Create Project
-> GitHtb
と進みます。
- 進んだ先の画面では、実は上記の「鍵の作成」「公開鍵をGitHubへ保管する」部分も含めた説明があります。
わかりやすい名前をプロジェクトにつけ、秘密鍵をPrivate Key
蘭に貼り付けます。
-----BEGIN OPENSSH PRIVATE KEY-----
...(鍵本体)...
-----END OPENSSH PRIVATE KEY-----
秘密鍵はこんな型式だと思います。BEGIN
の行からEND
の行まで、ハイフンを含めて全部貼り付けます。
最後にリポジトリを選んでCreate Project
を押せば完成です。
スクリプトを修正する
CircleCIのプロジェクト作成時、GitHubリポジトリに.circleci/config.yml
が存在しない場合はCircleCIがファイルのプルリクエストを作成します。
これ自体は確実にfail
する上に、何のテストも実施してくれません。なので、fail
しないようにまたtestを実施するように修正します。
circleci-project-setupをpullする
GitHubのremoteにcircleci-project-setup
というブランチができているはずなので、これをpullします。
.circleci/config.ymlを修正する
ドットファイルなので、所在に注意してください。
必ずfailするのを修正する
- run:
name: Run tests
command: echo 'replace me with real tests!' && false
この最後の&& false
を削除すると、とりあえずはfail
しなくなります。ただし、testと言いながら何も実施していないです。
テスト項目を追加する
追加する項目は以下です。
- androidのorbを追加する
-
jobs:
の下にunit-test
とandroid-test
を定義する -
workflows
にunit-test
とandroid-test
を追加する
version: 2.1
...
orbs:
android: circleci/android@2.5.0
...
jobs:
unit-test:
executor:
name: android/android-machine
#resource-class: xlarge <- これは課金アイテム
tag: 2024.01.1
steps:
- checkout
- android/restore-gradle-cache
- android/restore-build-cache
- android/run-tests:
test-command: ./gradlew testDebug
- android/save-gradle-cache
- android/save-build-cache
android-test:
executor:
name: android/android-machine
#resource-class: xlarge
tag: 2024.01.1
steps:
- checkout
- android/start-emulator-and-run-tests
...
workflows:
example:
jobs:
- unit-test
- android-test
- build:
requires:
- unit-test
- android-test
- deploy:
requires:
- unit-test
- android-test
できあがり
何かすると自動でテストが走るようになりました。何でもかんでも走るので、不要なテストは避けるような設定を入れるべきかもしれません。