CI/CDとは何ですか? 継続的インテグレーションと継続的デリバリー

継続的インテグレーション (CI) とは何ですか?

継続的インテグレーション チームメンバーが少なくとも XNUMX 日に XNUMX 回作業を統合するソフトウェア開発方法です。 この方法では、すべての統合が自動ビルドによってチェックされ、エラーが検出されます。 この概念は、プロジェクトが終了するまで統合が延期されたときに起こる「統合地獄」を回避するために XNUMX 年以上前に初めて導入されました。

継続的インテグレーションでは、コードのコミット後にソフトウェアが構築され、すぐにテストされます。 多くの開発者がいる大規模なプロジェクトでは、コミットは XNUMX 日に何度も行われます。 コミットするたびにコードがビルドされ、テストされます。 テストに合格すると、ビルドのデプロイメントがテストされます。 デプロイが成功すると、コードは運用環境にプッシュされます。 このコミット、ビルド、テスト、デプロイは継続的なプロセスであるため、継続的インテグレーション/デプロイメントという名前が付けられています。

継続的デリバリー (CD) とは何ですか?

連続放出 チームが短いサイクルでソフトウェア製品を開発するソフトウェア エンジニアリング手法です。これにより、ソフトウェアをいつでも簡単にリリースできるようになります。継続的デリバリーの主な目的は、ソフトウェアを適切な速度と頻度で構築、テスト、リリースすることです。これにより、運用環境での頻繁な更新が可能になり、変更を配信する際のコスト、時間、リスクを削減できます。

CIとCDの違いは何ですか?

CI 対 CD: 継続的インテグレーション (CI) は、コードベースへの各変更を自動的にテストするアプローチですが、継続的デリバリー (CD) は、新機能、構成、バグ修正の変更を取得するアプローチです。

CI を使用しない開発と CI を使用した開発

CI を使用した開発と CI を使用しない開発の主な違いは次のとおりです。

CIを使用しない開発 CIを使った開発
たくさんのバグ バグが少ない
頻度の低いコミット 定期的なコミット
リリース頻度が低く、リリースが遅い 定期的な動作リリース
難しい統合 簡単かつ効果的な統合
テストが遅くなる 継続的統合テストは早い段階で頻繁に行われます。
提起された問題は修正が困難です 問題をより迅速かつ効率的に見つけて修正します。
プロジェクトの可視性が低い プロジェクトの可視性の向上

コンパイルと継続的インテグレーションの違い

継続的インテグレーションにおけるアクティビティ
継続的インテグレーションにおけるアクティビティ

コンパイルはコードをコンパイルするだけですが、CIは次のアクティビティを実行します。

DB統合

  • DBとコードの同期を確保する
  • DBやテストデータの自動作成。

コードインスペクション

  • 健全なコードベースを保証します
  • 問題を早期に特定し、ベストプラクティスを適用します

自動展開

  • いつでも製品をリリースできます
  • 継続的にデモ可能な状態であり、どのマシンでも動作します

ドキュメントの生成

  • ドキュメントが最新であることを確認する
  • 現像液の焼けを除去します
  • ビルドレポートとメトリクスを生成します

編集

コンパイルは、コンピューターが高級プログラミング言語コードをコンピューターが理解できる機械語に変換するために実行するプロセスです。 これにより、すべてのターゲット プラットフォームでコード コンパイラが保証されます。

いつ構築すればよいですか?

  • チェックインのたびに
  • 依存関係が変わるたびに

継続的インテグレーションにはどのような手順がありますか?

CIプロセス
CIプロセス
  • 理想的には、ビルドはコマンド ラインから行う必要があり、統合開発環境 (IDE) に依存すべきではありません。
  • ビルドは、cron ジョブではなく、専用の Cl サーバーを使用して継続的に実行する必要があります。
  • 構築された CI は、深夜だけでなく、チェックインごとにトリガーされる必要があります
  • ビルドは即座にフィードバックを提供する必要があり、開発者の労力は必要ありません。
  • 主要な指標を特定し、視覚的に追跡します。 さらに重要なのは、すぐに対処することです

CIプロセスを実行するには何が必要ですか?

CIプロセスの実施

CI プロセス全体を実行するために必要な主要な要素は次のとおりです。

  • バージョン管理システム (VCS): これは、プロジェクトに加えられた変更を長期的に一元管理して保存するための信頼できる方法を提供します。
  • 仮想マシン: 予備のサーバーまたは少なくとも XNUMX 台のサーバーが必要です バーチャルマシン システムを構築します。
  • ホスト型 CI ツール ソリューション: サーバーや仮想マシンを避けるには、ホスト型 CI ツール ソリューションを使用する必要があります。 このツールはプロセス全体のメンテナンスに役立ち、拡張性が容易になります。
  • ツール: 自己ホスト型バリアントを選択した場合は、多くのバージョンのうちの XNUMX つをインストールする必要があります。 CIツール ジェンキンスのように、 TeamCity, Bamboo、GitLabなど。

継続的インテグレーションはどのように機能するのでしょうか?

Nokia という古い携帯電話をご存知でしょう。 Nokia は以前、夜間ビルドと呼ばれる手順を実装していました。 日中にさまざまな開発者が複数のコミットを行った後、ソフトウェアは毎晩ビルドされました。 ソフトウェアは XNUMX 日に XNUMX 回しかビルドされないため、大規模なコードベースのエラーを切り分け、特定し、修正するのは非常に骨が折れます。

Later、彼らは継続的インテグレーションのアプローチを採用しました。ソフトウェアは、開発者がコードをコミットするとすぐに構築され、テストされました。エラーが検出された場合、各開発者は欠陥を迅速に修正できます。

継続的インテグレーションの例
継続的インテグレーションの例

CIの特徴

ここでは、継続的インテグレーションの重要な機能と利点を示します。

  • 単一のソース リポジトリのみを維持できます。
  • 実稼働CI環境のクローンをテストできます
  • 構築された環境は実稼働環境に近いものである必要があります。
  • 継続的インテグレーションの利点の XNUMX つは、現在のビルドを常に利用できることです。
  • ビルド、テスト、展開の完全なプロセスは、すべてのスタック所有者に表示される必要があります。

CI を使用する理由

継続的インテグレーションを使用する重要な理由は次のとおりです。

  • より高品質なソフトウェアの構築に役立ちます
  • CI プロセスは、エンジニアリング チームの人員数と納品量の拡大に役立ちます。
  • CI を使用すると、ソフトウェア開発者は独立して機能を並行して作業できます。
  • 再現可能なテストの実施に役立ちます
  • 視認性を高めてコミュニケーションを強化
  • 完全に自動化されたビルドのための出荷可能な製品の開発を支援します
  • 導入をより迅速かつ予測可能にすることで、リスクを軽減します。
  • 問題が到着したらすぐにフィードバック
  • 発売日やタイミングでの直前の混乱を避ける

CI システム使用のベスト プラクティス

ここでは、実装時の重要なベスト プラクティスをいくつか示します。

  • 早めにコミットし、頻繁にコミットしない 壊れたコードをコミットしない
  • ビルドの失敗をすぐに修正する
  • 指標に基づいて行動する
  • すべてのターゲット環境をビルドインするすべてのビルドからアーティファクトを作成する
  • ソフトウェアのビルドは自動化できる方法で実行する必要があります
  • IDEに依存しない
  • 変更があった場合はすべてをビルドしてテストする
  • データベース スキーマがすべてとしてカウントされます
  • 主要な指標を見つけて視覚的に追跡するのに役立ちます
  • 頻繁かつ早めにチェックインする
  • より強力なソースコード管理
  • 継続的インテグレーションでは、コードをコミットするたびに単体テストが実行されます
  • ビルドを自動化して全員でテストする
  • 自動デプロイメントによりビルドを高速に保ちます

CIのデメリット

継続的インテグレーションプロセスの短所/欠点は次のとおりです。

  • Cl サーバーに慣れるには、初期セットアップ時間とトレーニングが必要です
  • 適切なテスト手順の開発が不可欠
  • よく開発されたテストスイートには Cl サーバーに多くのリソースが必要でした
  • 使い慣れたプロセスの変換
  • 追加のサーバーと環境が必要です
  • 複数の開発者が同時にコードを統合したい場合、待ち時間が発生する可能性があります

CIプロセス用ツール

ここでは、最も重要な CI/CD ツールをいくつか紹介します。

ジェンキンズ

ジェンキンズ

ジェンキンズ は、オープンソースの継続的統合ソフトウェアです。 を使用して書かれています。 Java プログラミング言語。 これにより、より大規模なコードベース内の個別の変更についてのリアルタイムのテストとレポートが容易になります。 このソフトウェアは、開発者がコードベース内の欠陥を迅速に発見して解決し、ビルドのテストを自動化するのに役立ちます。

Bamboo

Bamboo

Bamboo は、自動ビルド、テスト、リリースを 1 か所で実行する継続的インテグレーション ビルド サーバーです。JIRA ソフトウェアおよび Bitbucket とシームレスに連携します。 Bamboo CodeDeply、Docker、Git、SVN、Mercurial、AWSなど、多くの言語とテクノロジーをサポートしています。 Amazon S3 バケット。

TeamCity

TeamCity

TeamCity 多くの強力な機能をサポートする継続的インテグレーションサーバーです。ビルドが実行されていないときでも、CIサーバーの健全性と安定性を維持します。あらゆるプロジェクトでコードの品質を向上させます。

製品概要

  • 継続的インテグレーションの定義: 継続的インテグレーションは、チームのメンバーが少なくとも XNUMX 日に XNUMX 回自分の作業を統合できるソフトウェア開発方法です。
  • CI/CD は、継続的インテグレーションと継続的デリバリーまたは継続的デプロイメントの組み合わせを意味します。
  • CI を使用しない開発では多くのバグが発生しますが、CI を使用した開発ではバグが少なくなります
  • 継続的インテグレーションの重要なアクティビティは、1) DB 統合、2) コード インスペクション、3) 自動展開、ドキュメント生成、およびコンパイルです。
  • ビルドは、cron ジョブではなく、専用の Cl サーバーを使用して継続的に実行する必要があります。
  • CI の重要な要素は 1) バージョン管理システム 2) 仮想マシン 3) ホスト CI ツール ソリューション 4) ツール
  • 継続的インテグレーション システムにより、単一のソース リポジトリのみを維持できます
  • CI/CD プロセスは、より高品質のソフトウェアの構築に役立ちます
  • 最も重要なベストプラクティス Azure 継続的インテグレーションプロセスは、早期にコミットし、頻繁にコミットし、壊れたコードをコミットしないことです。
  • の大きな欠点は、 CI / CDパイプライン プロセスは、よく開発されたテストスイートには Cl サーバーに多くのリソースが必要でした
  • ジェンキンス Bambook、Team CityはAWS Continuous 統合ツール.