CircleCIの入門のオンラインセミナーを受けたので、ささっとメモしておきます。
きっかけは、社内で「みんなどんなCI/CD使ったことある?」って話をしてた時です。
そういえば、Jenkinsしか使ったことがないなとなり、他のも見てみようと思い始めました。
いろいろ調べると、直近でCircleCIのオンラインセミナーがあることがわかったので、ひとまず参加してみようと思ったしだいです。
CI/CDとは
セミナーの話の前に、ざっとCI/CDについておさらいです。
引用で楽をする...(笑)
CI/CDとは「Continuous Integration/Continuous Delivery」の略で、日本語では継続的インティグレーション/継続的デリバリーといいます。CI/CDは1つの技術を指すものでなく、ソフトウェアの変更を常にテストして自動で本番環境にリリース可能な状態にしておく、ソフトウェア開発の手法を意味します。CI/CDを取り入れると、バグを素早く発見したり、変更を自動でリリースしたりできるようになります。
CI/CDには大きく分けてオンプレミス型とクラウド型があり、オンプレミス型としてはJenkins、クラウド型としてはTravis CIやCircleCIなどが有名です。オンプレミス型は一般的に拡張性が高い一方、自分たちで構築・運用する管理コストが発生します。クラウド型は拡張性が低いですが、サーバーなどを自前で用意する必要がなく、すぐに使い始めることができるのが大きな魅力です。
今回のCircleCIはクラウド型ということになります。
以降、セミナーのときのメモです。
CircleCIのおおまかな流れ
- GithubへPush
- GithubからCircleCIへWebhookが送られる
- CircleCIでビルド
- デプロイ
- ユーザーフィードバック
継続的インテグレーション
流れ
- リポジトリを作成する
- circleciにgithubでログイン
- 左欄->project
- どのプロジェクトをビルドするか
- setupprojectをクリック
- configが編集できる
- add configでブランチが作成される
- ビルドが開始される
- githubでコミットされると、自動でcircleciのビルドが実行される
config.ymlの構造
- jobs
- 個々のジョブ定義
- workflows
- ジョブを組み合わせたワークフロー定義
ワークフローのタイプ
- スケジューリング
- マニュアル承認
- ブランチ指定
- タグ指定
ジョブ間のデータ引継ぎ
workspaceを使う
workflowが終了すると消える
依存関係のキャッシュ
restore_cache->save_cache
workflowをまたいで保持される
テストの並列処理
- どうコンテナに割り振るか
- 過去の実行結果より、均等になるようにコンテナに割り振る
Serviceコンテナの利用
データベースなど、アプリケーションのテストに必要なコンテナを同一ネットワークに起動する
リソースクラスの指定
起動するコンテナやVMのサイズをジョブごとに指定する
リソースクラス
公式ドキュメントを参照
データの保存
- テスト結果の保存
- store_test_results
- ビルド結果の保存
- atore_artifacts
効率よくパイプラインを作るには
Tips
- CLIでスキーマのバリデーションをする
- ドキュメントを参照
config validate
- 動くかどうかわからないものはSSHビルドで実機で試してみる
- 空のconfigでSSHビルドONにして試してみる
- キャッシュやテスト並列化は含まず、まず動くことを確認してから少しづつ高速化していく
- 最初から複雑なワークフローを作らない
- 冗長な記述はExecutorやcommandsを使う
- Commands
- 複数のステップを人るにまとめてコマンドして管理
- Executor
- 実行環境の定義をExecutorとして管理
- Jobs
- Commands
継続的デプロイメント
設定のパッケージングと再利用(Orbs)
- orbsとは、CircleCIの設定を再利用し、さらにそれを自由に配布する仕組み
- 他の人が書いたものを再利用できる
環境変数とContext
デプロイのためのキーなどはconfigに記載せずに環境変数またはcontextとして設定可能
Dcokerレイヤーキャッシュ
DLCをONにするとDockerイメージがキャッシュされる
別途料金はかかる
参考URL
- 価格: https://circleci.com/ja/pricing/
- 登録: https://circleci.com/ja/signup
- CircleCI Public: https://github.com/CircleCI-Public
- React Nativeのサンプル: https://github.com/CircleCI-Public/circleci-demo-react-native
- リソースクラスの種類: https://circleci.com/docs/ja/2.0/configuration-reference/#resource_class
- CircleCI CLI: https://github.com/CircleCI-Public/circleci-cli/releases
- インストール方法、使い方など: https://circleci.com/docs/ja/2.0/local-cli/
- Orbs Registry: https://circleci.com/orbs/registry/
- CircleCI実践入門: https://www.amazon.co.jp/CircleCI実践入門──CI-CDがもたらす開発速度と品質の両立-WEB-PRESS-plus/dp/4297114119
- できるCI/CDのebook: https://www2.circleci.com/ja-dekiru-ci-cd-handbook.html
- Qiita CircleCI記事: https://qiita.com/tags/circleci
- 昨年のアドベントカレンダー: https://qiita.com/advent-calendar/2019/circleci
- オンラインコミュニティのミートアップ: https://circleci.connpass.com/
- プレゼンのスライド: https://circleci.connpass.com/event/191289/