CI/CDとは何かを勉強する


前置き

CI/CDってよく聞くけど、他人説明できるほど知らなかったので勉強しました。
ググった内容を自分なりにまとめた記事です。
より詳しく知りたい方は、下記の参考文献を読んでみてください。

参考文献

継続的インテグレーション (CI)
CI(継続的インテグレーション)とは? » CloudBees|テクマトリックス
継続的インテグレーションとは? – アマゾン ウェブ サービス
いまさら聞けない「CI/CD」の意義――GitHubとGitHub ActionsでCI/CDを試してみよう
CD(継続的デリバリー)とは? » CloudBees|テクマトリックス
継続的デリバリーとは - Red Hat
継続的デリバリーとは? – アマゾン ウェブ サービス

CI (Continuous Integration) とは

  • 継続的インテグレーション
  • 開発者が自分のコード変更を定期的にマスターブランチにマージし、その後に自動化されたビルドとテストを実行する

CI で実現すること

  • 開発者は1日1回またはそれ以上の頻度でリポジトリにコミットする
  • コミットがマージされる前に、自動ビルドと自動テストがトリガーされる
  • ビルドやテストに失敗しても素早く検知できる

CI 登場以前は?

  • 開発者が長期間にわたって独立して作業し、作業が完了後初めてマスターブランチにマージ
    • 変更点が多くマージ作業に時間がかかる
    • 小さいバグが修正されずに長期間に渡って累積 → リリース遅延

CI のメリット

  • 開発者の生産性を向上
    • 開発者を手動作業から解放
  • 短時間でバグの発見、対処
    • 自動テストなので、テスト頻度が上がる
    • バグが後になって大きな問題に発展する前に発見して対処できる
  • 更新を迅速に配信
    • 常にビルドが通るリポジトリを維持
    • お客様(ユーザー)に迅速かつ頻繁に更新を配信できる

CI を実践するために必要なこと

  • コードを統合するための共有リポジトリ環境
  • コードが正しく動くかを検証する実行可能なテストコード
  • テストコードを自動実行できる環境(CI環境)

CD (Continuous Delivery) とは

  • 継続的デリバリー
  • コード変更が発生すると、自動的に実稼働環境へのリリース準備が実行される
    • ビルド段階の後にテスト環境またはステージング環境にデプロイされる
    • デプロイ後にシステムテストやUIテストを行う
    • 準備が終わったら運用環境への更新を承認する

CD のメリット

  • リリースプロセスの自動化
    • 開発チームによるコード変更のビルド、テスト、運用環境へのリリースに向けた準備が自動化
  • 開発者の生産性を向上
    • 開発者を手動作業から解放
  • 短時間でバグの発見、対処
    • CD によってプロセス全体が自動化されるので、自分のコードに付加的な種類のテストを簡単に実行できる
  • 更新を迅速に配信
    • CD を適切に実装すると、標準化されたテストプロセスに合格し、デプロイ準備の整ったビルド成果物を常に手元に持つことになる

CD を実践するために必要なこと

  • コードのリリースやデプロイをする実行可能なコード
  • リリースやデプロイをするコードを自動実行できる環境(CD環境)

自動テストの例

  • コード解析
  • 単体テスト
  • APIテスト
  • UIテスト
  • 負荷テスト

CI/CD はなぜ必要?

  • 「開発、マージ、テスト、デリバリー(リリース)」を繰り返して、ユーザーからのフィードバックを受け取って改善し続けなければならない
    • 「開発、マージ、テスト、デリバリー(リリース)」を高頻度で回せれば、その分ソフトウェアを改善できる

Unity 開発で使えるツール例

  • Jenkins
  • Github Actions
  • GitLab CI/CD
  • CircleCI
  • Azure Pipelines
  • Unity Cloud Build