iOSプロジェクトのCircleCI 2.0対応を行ったので、その内容を共有します。
オフィシャルのドキュメントが結構充実していて、これらを参考にしてymlを作りました。
またサンプルリポジトリも提供されています。
CircleCI 2.0では、 circle.yml
の代わりにルートフォルダに .circleci/config.yml
を作成します。
.circleci/config.yml
version: 2
jobs:
# ユニットテスト
build-and-test:
macos:
xcode: "9.0"
working_directory: /Users/distiller/output
steps:
- checkout
- run:
name: Run tests
command: fastlane scan
environment:
# ユニットテストで使用するシミュレータ端末とshemeを指定
SCAN_DEVICE: iPhone 8
SCAN_SCHEME: <スキーム名>
# ユニットテストの結果を保存
- store_test_results:
path: test_output/report.xml
- store_artifacts:
path: /tmp/test-results
destination: scan-test-results
- store_artifacts:
path: ~/Library/Logs/scan
destination: scan-logs
# Beta配信
beta-deployment:
macos:
xcode: "9.0"
# Rubyのバージョンを指定するためにログインシェルを設定
shell: /bin/bash --login -eo pipefail
working_directory: /Users/distiller/output
steps:
- checkout
- run:
# match でSSLのエラーを回避するためにruby2.4を使用
name: Set Ruby Version
command: echo "ruby-2.4" > ~/.ruby-version
# Gemのキャッシュを読み出す
- restore_cache:
key: 1-gems-{{ checksum "Gemfile.lock" }}
- run: bundle check || bundle install --path vendor/bundle
# Gemのキャッシュを保存
- save_cache:
key: 1-gems-{{ checksum "Gemfile.lock" }}
paths:
- vendor/bundle
# badge に必要
- run: brew install imagemagick
- run: brew install graphicsmagick
# Beta配信
# 弊社では beta コマンドの中で match, badge, gym をまとめて実行している
- run: bundle exec fastlane beta
# artifactsとして保存するファイルを明示
- store_artifacts:
path: <スキーム名>.app.dSYM.zip
- store_artifacts:
path: <スキーム名>.ipa
# iTunes Connectへのアップロード
release:
macos:
xcode: "9.0"
shell: /bin/bash --login -eo pipefail
working_directory: /Users/distiller/output
steps:
- checkout
- run:
name: Set Ruby Version
command: echo "ruby-2.4" > ~/.ruby-version
- run: bundle install --path vendor/bundle
- run: bundle exec fastlane release --verbose
workflows:
version: 2
build_test_deployment:
jobs:
- build-and-test
- beta-deployment:
filters:
branches:
# master ブランチのみで、このジョブを実行
only: master
requires:
# このジョブを実行するためには、以下のジョブをパスしている必要がある
# 並列でジョブを実行したければ、この設定は削除すること
- build-and-test
release:
jobs:
- release:
filters:
branches:
# 正規表現でこのジョブを実行できるブランチを指定する
only: /release.*/
暫定版ですが、どなたかの役に立てば幸いです。