CI CD統合とは:早期リリースのためのガイド

What Is CI CD Integration: A Guide to Faster Releases

Learn what is CI CD integration and how pipelines connect code to release for faster and safer app deployments.

Martin Donadieu

Martin Donadieu

Content Marketer

What Is CI CD Integration: A Guide to Faster Releases

CI/CD integration is the wiring that connects your code repository to an automated pipeline so every change moves through build, test, and release stages without manual handoffs. By 2024, 83% of developers DevOps関連の活動に携わったチームは、CI/CDツールの使用が、展開頻度、リードタイム、変更失敗率、サービス復旧までの時間などのパフォーマンスに影響を与えている。 Cloud Native Computing FoundationのCI/CDレポートによると.

モバイルチームを率いている場合、ビルドが成功したと判断した後、安全に配信できるアプリケーションが得られるまでのギャップを感じたことはありませんか。Slackではリリースが見栄えが良かったのに、11時までに正しい署名キー、正しいブランチ、正しいストアチェックリスト、正しいロールバックパスが必要になったときに、アプリケーションが崩壊することがあります。その時点で、CI/CD統合は単なるブランドから、チームがアプリケーションを配信するためのオペレーティングシステムに変わります。

目次

誰もが忘れたリリースの日

火曜日の朝、簡単なホットフィックスで始まるはずだった。金曜日の夜までに、同じパッチはブランチに座っているままで、手動のQAが1つもう1つの問題を発見し、リリースノートは半分完成し、3人の人がSlackで最新のビルドを持っている人を尋ねている。オンコールエンジニアは午後11時にリリーススクリプトを再実行し、誰も完全にリリースノートのアーティファクトがソースコントロールと一致しているかどうかはわかっていない。

CI/CD統合はそのような混乱を完全に排除することを目的としている。目的は単にタスクを自動化することだけではない。ソースコントロール、ビルドサーバー、テストランナー、アーティファクトストア、そしてデプロイターゲットを1つのフローに接続することによって、 ソースコントロール, ビルドサーバー, テストランナー, アーティファクトストアそして デプロイターゲット すべてのコミットが独自の流れで進むようにすることである。 Red HatによるCI/CDの概要 自動化の DevOps ワークフローを説明する。通常、ビルド、テスト、スキャン、パッケージング、プロモーション、デプロイを含みます。

ワイヤリングが欠けているときに何が壊れるか

CI/CDを単一のツールとして扱うチームは、通常、部分的な自動化とリスクのあるハンドオフを維持します。Codeがマージされるが、ビルドを開始するのは誰かが必要です。ビルドが完了した後、誰かがアーティファクトをコピーする必要があります。ステージング リリースが正常に動作するが、生産には別のスクリプト、別のクレデンシャル、そして誰かが全体を思い出す必要があります。

実践的なルール: リリースが記憶、サイド チャット、または「スクリプトを知っている人」に依存している場合、パイプラインはまだ統合されていません。

Cloud Native Computing Foundation の 2024 年のレポートも、同じ種類のツールを使用することで、配信パフォーマンスに悪影響を与える可能性があることを警告しています。互換性が悪くなるためです。 CI/CD の現状大きいチームでは、統合はツールを所有することではなく、同じ真実の源に同意することを意味します。

健全な CI/CD 設定では、コミットからユーザーまでの 1 つのパスが得られます。弱いものでは、各自が手動で橋を架ける島々の集まりになります。差はリリース日に出現し、チームが混乱を最も恐れるときに最も顕著です。

CI と CD を分解する

ソフトウェア開発パイプラインにおける継続的インテグレーションと継続的デリバリーの概念を示す図。

リリースワークフローは、アイデアを分離することで、より論理的に考えられるようになります。 CI CIは、頻繁に小さな変更をマージし、自動でチェックすることを目的としています。 CD CDは、検証済みのcodeをリリース用に準備し、次に生産環境にそのcodeを配信するか、人工承認ステップを含めるかを決定します。

CIは準備室です

継続的インテグレーションは、単純な習慣から始まります。変更を小さくし、すぐに検証することです。ソフトウェアの場合、コミットまたはマージリクエストごとに自動チェックがトリガーされ、破損したcodeが大きなリリースで暴露されるのを待つのではなく、直ちに検証されます。その理由は、忙しいキッチンが食材を整理し、サービス開始前にチェックするのと同じです。ただし、ここでは「準備」はビルドとテストの自動化ではなく、切った野菜ではありません。

定義は Red HatのCI/CDガイド CIは、自動ビルドとテストの分野で、統合問題を早期に検出します。小さな変更は容易に検証でき、問題が発生した場合、チームは問題の原因となるリリースの部分を推測することなく、問題を追跡できます。

CDには2つの意味があり、チームは混同しています

継続的デリバリーとは、codeが常に配信可能ですが、生産環境の更新は人工で決定されます。継続的デプロイはさらに進んで、自動で毎回の変更を配信します。この区別は、法的要件、リスク承認、通常のモバイルとデスクトップチームが必要とするリリース制御に影響を与えます。

__CAPGO_KEEP_0__のリリースマネージャーは、店舗のタイミングの調整が必要なため、継続的な配信を好むかもしれません。低リスクのサービスを持つバックエンドチームは、強力な自動チェックを持つため、継続的な展開を選択するかもしれません。正しい選択は、スローガンではなく、統治によって決まります。

CIを強化するためにリリースを自動化する前にチームがCI側を強化することを目指している場合、 このCIに焦点を当てたガイド 統合品質に焦点を当て、リリースの信頼性が始まる場所です。

Web App CapacitorJS Mobile Electron Desktop トリガー
プッシュまたはマージリクエストが検証を開始 プッシュまたはマージリクエストが検証を開始 プッシュまたはマージリクエストが検証を開始 __CAPGO_KEEP_1__
ビルド アプリケーションをバンドルする ウェブのcodeをバンドルし、ネイティブシェルで包む メインとレンダラーのcodeをコンパイルし、デスクトップアプリケーションをパッケージする
テスト ユニット、統合、UIテスト ラッパーとランタイムの動作に関するモバイル固有のチェックを追加する パッケージングとアプリケーション起動パスのデスクトップ固有のチェックを追加する
リリース ホスティングまたはアプリケーションランタイムにデプロイする ストアチャンネルまたはライブアップデートチャンネルに公開する インストーラまたはライブアップデートチャンネルに公開する
承認 オプションの人間ゲート ストアとロールバックの制御にしばしば必要 署名と配布の制御にしばしば必要

CI/CD Pipelinesの解剖学

ソフトウェア開発のCI/CD Pipelinesの6つの順次段階の図示。ソースからプロダクションまで。

パイプラインは、入力と出力を持つジョブのグラフです。開発者がcodeをプッシュすると、ウェブフックまたはマージイベントが最初のジョブをトリガーし、次のジョブが前のステージからアーティファクトを消費し、リリースが完了するまで続きます。そのため、CI/CD統合は実際にはステージ間の契約であり、不思議なプラットフォーム機能ではありません。

各ステージが何をしているか

ソースコントロールトリガーが流れを開始します。ビルドジョブはcodeをコンパイルし、依存関係を解決します。これが隠れた破損の多くが発生する場所です。テストジョブでは、ユニット、統合、UIテストを実行し、セキュリティスキャンでは脆弱なパッケージや安全でない構成を検出します。

良いパイプラインは早く失敗し、失敗した場所を正確に教えてくれます。

次に、パッケージングは検証された出力を展開可能なものに変換します。たとえば、コンテナイメージ、署名済みのAPKまたはIPA、Electronの配布可能なもの、またはJavaScriptのバンドルなど。 HCL CI/CD採用と実装の概要 はここで役立ちます。なぜなら、チームがしばしばパーシャルオートメーションに止まるのを示しているからです。多くのチームはpipelineを持っていますが、すべてのステージが完全に接続されていないのです。

ステージの境界はなぜ重要か

ハンドオフでアーティファクトを名前が付けることができない場合、デバッグは推測に頼ることになります。ステージングでリリースが失敗した場合、依存関係解決、フラッキーテスト、セキュリティポリシー、パッケージングのいずれかから問題が生じたかを知る必要があります。 それもなぜ、pipeline設計が内部トレースからコミットまでアーティファクトまで環境まで含むことが重要だからです。

ビルド部分がより大きなフローにどのようにフィットするかを実践的に見るチーム向けの ビルドに焦点を当てたガイド 見る価値があります。ビルドステージが所有するものとリリースオーケストレーションが所有するものを区別するのを助けてくれます。

モバイルアプリとデスクトップアプリのCI/CDの違い

ウェブパイプラインは、CI/CDが主にサーバーにバンドルをプッシュすることだけに考えていることを人々に錯覚させる。 ネイティブデリバリはルールを速く変える。, you still build web code, but you also package it into a native shell, then manage signing and platform-specific release paths. With で、ウェブをビルドすることはできますが、ネイティブシェルにパッケージすることもできます。署名とプラットフォーム固有のリリースパスを管理することもできます。Electron

What changes once the app ships to devices

モバイルチームは署名キー、App StoreとPlay Storeのレビュー、実行時更新チャンネルについて考える必要があります。デスクトップチームはインストーラー、code署名、プラットフォーム間の更新動作について考える必要があります。共通のパターンは明らかですが、codeは同じリポジトリとビルドトリガーを通じて移動するかもしれませんが、リリースサーフェイスは異なります。

The GitHubのCI/CD Pipelinesの向上に関するガイダンス フェーズテスト、機能フラグ、ロールバックチェックポイントを指し、この世界ではよく当てはまります。そうした慣行は、ビルドがインストーラーやパッケージの内側に存在する場合に特に重要です。なぜなら、リリースは単に「codeがコンパイルされるかどうか」ではなく、「実機上でこのパッケージが安全に動作するかどうか」であるからです。

What mobile and desktop teams add on top

Webリリースはしばしばステージングまたはプロダクションへのデプロイで止まることがあります。モバイルリリースには通常、チャンネル、承認、ロールバック動作の追加層が必要です。Electronチームには同じ規律が必要ですが、デスクトップパッケージングと更新配布の代わりにアプリストアの提出が必要です。

  • CapacitorJS mobile: Webバンドル、ネイティブラッパー、署名、ストアレビュー、ライブ更新チャンネル
  • Electron desktop: メインプロセスビルド、レンダラー ビルド、パッケージされたインストーラー、署名、更新チャンネル制御
  • Web app: ビルド、テスト、パッケージ、展開、監視

CI/CDのシステムがサイドプロジェクトではなく、実際のプロセスの一部になるのは、そのギャップの部分です。ビルドがバンドルを生成できる場合、リリースシステムは安全にユーザーに到達する方法を決定する必要があります。

統合を実現するための基本コンポーネント

トリガー、パイプライン、アーティファクト、環境は、チームが再びハードウェイを学習する4つの部分です。トリガーは、通常Gitのプッシュまたはマージリクエストが発生したときにジョブを開始するイベントです。パイプラインは、ジョブの順序付きセットです。アーティファクトは、検証済みの出力です。環境は、その出力がプロモーションまたは遅延される場所です。

4つの部分の簡単な説明

トリガーはGitと自動化のハンドシェイクです。パイプラインは、ルールを定義し、ビルド、テスト、スキャン、パッケージ、リリースの順序を定義します。アーティファクトは、その作業の結果を前方に運びます。そのため、同じバンドルがテストと展開に使用される必要があります。

環境は、意図と影響を安全に分離する安全な場所を提供します。Dev、Staging、Beta、Productionは、実際の作業を行っています。チームは、1つの場所で変更を証明し、ユーザーがそれを依存する別の場所では証明しないようにします。

ルールの thumb: コミットとアーティファクトに遡って追跡できない環境は、リスクではなく、安全ネットではありません。

Capgoがライブアップデートフローにどのようにフィットするか

CapacitorJSとElectronアプリの場合、Capgoはライブアップデート層に位置し、署名されたWebバンドルをチャンネルに公開できるようになり、更新は差分化され、ロールバックはデバイスを最後の知られている良好なバンドルに戻すことができるようになります。これにより、パイプラインは単なるバイナリリリースパスより多くのものになり、ネイティブアプリ内に存在するWebアセットのリリース制御平面になります。

Capgoのパイプライン統合は、GitHubアクション、GitLab CI/CD、Azure DevOps、Bitbucket Pipelinesなどのシステムのドキュメントに記載されており、CIからチャンネルベースのリリースに自動化されたビルドとデプロイフローを実行します。CI/CDツールのリリースツールと比較する場合、ジョブリストやプラットフォームの期待を考慮すると、シニアチームはエンジニアがエンドツーエンドの統合について論理的に考えることができるのではなく、ビルドスクリプトだけを書くことができることを求めることがよくあります。 Coinbaseソフトウェアエンジニア統合役のBlockchain Jobsは、実際の組織でリリースのパイプラインがどれだけ重要であるかを反映しています。

__CAPGO_KEEP_0__のシークレットの管理に関するガイドラインは、CI/CDパイプラインの環境の抽象化を伴うものです。重要なのは、フロー、自動化されたビルド、署名されたバンドル、ターゲットチャンネル、制御されたプロモーションです。 Capgo’s guidance on managing secrets in CI/CD pipelines CI/CDにおけるセキュリティはチェックボックスの問題ではなく、制御の問題です。CI/CD環境の米国防衛ガイドラインでは、パイプラインを保護されたパスとして扱い、リポジトリ、ビルドシステム、クレデンシャル、アーティファクトルートをエンドツーエンドでセキュアにする必要があります。

__CAPGO_KEEP_1__アクション

GitLab CI/CD CI/CD 環境の防御ガイド. そのフレーミングは、製品チームにとっても有益です。信頼できるパイプラインは、最速のパイプラインです。

フローの内側にあるコントロール

短期間の資格情報は、トークンが漏洩した場合に被害を最小限に抑えることができます。署名されたアーティファクトは、期待どおりのパイプラインから来たアーティファクトの証拠を提供します。SBOM と SCA チェックは、リリース前に依存関係のリスクを暴き、レビュアーが何が変更されたか誰が承認したかを確認するために、各アクションのログを提供します。

The CI/CD パイプラインの防御に関する CISA と DHS のガイド セキュリティ スキャニング、ログ記録、署名された構成、短期間の資格情報の使用は、パイプライン自体に含まれるべきです。これは、金融、医療、電子商取引などの規制チームにとって正しい認識です。規制は、事後的に追加するのではなく、リリースパスの一部です。

セキュリティを追加してもリリースはまだ速くなければなりません

チームは通常パニックに陥り、手動ゲートの山を想像します。必要ありません。ポリシーはパイプラインに置くことができ、承認は適切な環境に制限でき、スキャンは自動的に実行できるようになります。

また、チームは、ビルドからデバイスまでのインテグリティ チェックを維持するために、署名されたバンドルを配信するプラットフォームを選択することもあります。実践的な側面についてのより深い見方は、この CI/CD セキュリティ ガイド が参考になります。主な考え方は同じです。セキュリティは配信システムに属するものであり、周りにはありません。 __CAPGO_KEEP_0__

稼動後のトラブルシューティングと可視性

見えないパイプラインは信頼できないパイプラインです。失敗したビルドは、どこで破れたかという単純な質問を引き起こします。悪いリリースは、パッケージング、環境の変化、または更新自体から失敗したかどうかというより難しい質問を引き起こします。したがって、ビルドパスとライブリリースパスをカバーする必要があります。外部から見ると似たような問題が生じる可能性があるためです。

重要な信号

ビルドログは、どのジョブが失敗したかを教えてくれます。テストフレイクパターンは、問題が code 内にあるか、周囲のインフラストラクチャにあるかを示します。デプロイメントヘルスは、リリースがゲートを通過したときに問題が生じたかどうかを教えてくれます。CNCFレポートのDORAレンズ、デプロイメント頻度、リードタイム、変更失敗率、サービス復旧までの時間は、システムがどのように役立っているかを判断するための実用的方法を提供します。 CI/CDレポートの現状.

ライブアップデートワークフローでは、数分以内に「どの変更が行われ、どこで行われ、どのデバイスで行われたか」を答えることができない場合、可視性は浅すぎます。

リリースが横転したときにチェックすること

まず、破れたリリースをコミット履歴と関連付けます。次に、失敗を導入したステージのテストとデプロイログを検査します。ライブアップデートでは、デバイスレベルのテレメトリが重要です。同じバンドルは、デバイスクラス、OSバージョン、またはアプリケーション状態によって異なる動作を示す可能性があるためです。

Capgoのデバイスごとのログ、採用メトリクス、バージョン履歴、チャンネルガードレールは、そのようなインシデントレビュー用に設計されています。アラートについては CapgoのCI/CDパイプラインにアラートを追加する方法のガイド ユーザーが問題を報告するのを待つのではなく、シグナルを通知に変える方法を示しています。

CI/CDの旅から始める場所

CI/CDの統合は成熟度の旅であり、チェックボックスではありません。信頼して配信するチームは基本的な部分を組み合わせてから、セキュリティ、リリースオーケストレーション、ロールバックの規則を追加します。配信に不安を感じるチームは、自動化が散在しているが、連続したフローが存在しない場合があります。

CI/CD成熟度の旅の3つの段階を示す図。

CI/CDの成熟度の旅を簡単に確認する方法があります。トリガーは自動化されているか? アーティファクトは署名されているか? デプロイメントをコミットに戻すことができるか? 圧力の下でロールバックポリシーを実行できるか? これらの質問に対する答えが曖昧な場合、次の改善点は明らかです。

パイプラインを製品として扱い、フィードバックループを絞り、リスクが存在する箇所にポリシーを追加し、必要に応じてアプリケーションアーキテクチャに応じて配信を実行時更新チャンネルに拡張すること。


CapgoはCapacitorJSおよびElectronアプリのCI/CDをライブアップデート配信に組み込むのに役立ち、署名済みパッケージ、ターゲットチャンネル、ロールバック保護が同じリリースフローの一部になります。マニュアルリリースから制御されたアップデートシステムへの移行を試みているチームは、 Capgoを訪問してください。 __CAPGO_KEEP_0__

リアルタイムのCapacitorアプリの更新

ウェブ層のバグが生じたときは、Capgoを通じて修正を配信し、数日待たずにアプリストアの承認を待つ必要がなくなる。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビューのパスを通る。

スタートする

ブログの最新記事

Capgoは、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を提供する。