CircleCI Server v3.x の概要

はじめに

CircleCI Server v3.1.0 は、GCP または AWS の Kubernetes クラスタにインストールできる継続的インテグレーション & 継続的デリバリー (CI/CD) プラットフォームです。

CircleCI Server アプリケーションのコアは、Kubernetes 内で実行されます。

アプリケーションは、ロード バランサーを使用して 4 つのサービスを公開します。 このうち 3 つは、Nomad クラスタおよび VM に接続するための VPC 内部ロード バランサーです。 必要に応じ、フロントエンド ロード バランサーを非公開にして、外部インターネットからのアクセスを遮断してもかまいません。 For further information see the Load Balancers doc.

ロード バランサー タイプ ポート 説明

フロントエンド GUI プロキシおよび API

外部

80、443

Web アプリケーションを公開します。

Nomad コントロール プレーン

内部

4647

Nomad ランナーの RPC プロトコルを公開します。

出力プロセッサ

内部

8585

Nomad ランナーの出力を取り込みます。

VM サービス

内部

3000

仮想マシンをプロビジョニングします。

CircleCI Server では、https://www.nomadproject.io/[Nomad スケジューラ]を使用して CI ジョブのスケジュールを設定します。 Nomad コントロール プレーンは Kubernetes 内で動作します。 スケジュールされた CircleCI ジョブの実行を担当する Nomad クライアントは、クラスタ外部にプロビジョニングされます。 CircleCI Server では、Nomad クライアント自体または専用の仮想マシン (VM) で Docker ジョブを実行できます。

ジョブのアーティファクトと出力ファイルは、Nomad ジョブからオブジェクト ストレージ (S3、GCS、またはその他のサポートされているオプション) に直接送信されます。 オブジェクト ストレージには、監査ログやアプリケーションのその他のアイテムも保存されます。そのため、Kubernetes クラスタと Nomad クライアントの両方がオブジェクト ストレージにアクセスできる必要があります。

CircleCI Server 3.x の構成とデプロイには KOTS を使用します。

アーキテクチャ

CircleCI Server 3.x のアーキテクチャを次図に示します。 The available services are described in greater detail in the [サービス] section.

サービスs Architecture
Figure 1. CircleCI Server v3.x のアーキテクチャ

Services

CircleCI Server 3.0 は、次に示すサービスで構成されています。 それぞれの説明と、各サービスで障害が発生した場合の影響を以下に示します。

Service コンポーネント 説明 障害発生時の影響 備考

api-service

アプリ コア

GraphQL API を提供します。 この API は、多くのWeb フロントエンドのレンダリング データを提供します。

多くの UI 要素 (例: コンテキスト) が完全に機能しなくなります。

audit-log-service

アプリ コア

監査ログ イベントを blob ストレージに長期保存します。

一部のイベントが記録されなくなります。

builds-service

アプリ コア

www-api から取り込みを行い、plans-service、workflows-conductor、orbs-service に送信します。

circle-legacy-dispatcher

実行

コンピューティング管理の一部です。 usage キュー (mongo) と VCS への送受信を行います。

circleci-mongodb

実行

プライマリ データストア

circleci-postgres

マイクロサービス用データ ストレージ

circleci-rabbitmq

パイプラインと実行

ワークフロー メッセージ、テスト結果、使用状況、cron、出力、通知、スケジューラーのキューイング

circleci-redis

実行

リクエストのキャッシュおよびレート制限の計算のために、一時的なデータ (ビルド ログなど) をキャッシュします。

キャッシュを適切に行えない場合、VCS の呼び出しが多くなり VCS からレート制限を適用されることがあります。

circleci-telegraf

Telegraf は StatsD メトリクスを収集します。 CircleCI サービスのホワイトボックス メトリクスはすべて、StatsD メトリクスを発行します。これらは Telegraf に送信されますが、他の場所 ( Datadog や Prometheusなど) にエクスポートされるように構成することもできます。

circleci-vault

シークレット用にサービスとしての暗号化と復号化を実行する HashiCorp Vault

config

contexts-service

アプリ コア

暗号化されたコンテキストを保存、提供します。

コンテキストを使用するすべてのビルドに失敗するようになります。

cron-service

パイプライン

スケジュールされたワークフローをトリガーします。

スケジュールされたワークフローが実行されなくなります。

dispatcher

実行

ジョブをタスクに分割し、実行用にスケジューラーに送信します。

Nomad にジョブが送信されなくなります。 run キューのサイズが増加しますが、著しいデータ損失が起きることはありません。

domain-service

アプリ コア

CircleCI ドメイン モデルに関する情報を保存、提供します。 アクセス許可および API と連携しています。

ワークフローを開始できなくなります。 一部の REST API 呼び出しに失敗し、CircleCI UI で 500 エラーが発生する可能性があります。 LDAP 認証を使用している場合、すべてのログインに失敗するようになります。

exim

一般公開時には削除されます。ただしユーザーは削除後も既存の MTA にメール送信用の認証情報を提供することができます。

メール通知が送信されなくなります。

federations-service

アプリ コア

ユーザー ID を保存します (LDAP)。 API と permissions-service

LDAP 認証を使用している場合、すべてのログインに失敗するようになります。 また、一部の REST API 呼び出しに失敗する可能性があります。

LDAP 統合は使用できません。

frontend

フロントエンド

CircleCI Web アプリと www-api プロキシ

UI と REST API が利用できなくなります。 GitHub/GitHub Enterprise からジョブがトリガーされなくなります。 ビルドの実行はできますが、情報は更新されません。

1 秒あたりのリクエスト レート上限は 150、ユーザー 1 人あたりの瞬間リクエスト レート上限は 300 です。

inject-bottoken

"ボット トークン" を MongoDB に挿入する Kubernetes ジョブ。 ボット トークンは、サービス間通信用の認証トークンです。 主に www-api で使用されます。

kotsadm-kots

ライセンス

メインの KOTS アプリケーション。 CircleCI Server のアップグレードと構成を行うための KOTS 管理者コンソールを実行します。管理者コンソールは使用できません。

CircleCI Server のアップグレードと構成が行えなくなります。

kotsadm-migrations

ライセンス

Kotsadm の更新に合わせてデータベースの移行を行います。

kotsadm-minio

ライセンス

KOTS ライセンス用のオブジェクト ストレージ

kotsadm-operator

ライセンス

Kotsadm のデプロイと制御を行います。

kotsadm-postgres

ライセンス

KOTS ライセンス用のデータベース

legacy-notifier

アプリ コア

外部サービス (Slack、メールなど) への通知を処理します。

prometheus

サーバー

メトリクスに使用します。

orb-service

パイプライン

Orb レジストリと設定ファイルの間の通信を処理します。

output-processor

実行

ジョブの出力とステータスの更新を受け取り、MongoDB に書き込みます。 また、キャッシュとワークスペースにアクセスし、キャッシュ、ワークスペース、アーティファクト、テスト結果を保存するための API を実行中のジョブに提供します。

permissions-service

アプリ コア

CircleCI のアクセス権インターフェイスを提供します。

ワークフローを開始できなくなります。 一部の REST API 呼び出しに失敗し、CircleCI UI で 500 エラーが発生する可能性があります。

scheduler

実行

受信したタスクを実行します。 Nomad サーバーと連携しています。

Nomad にジョブが送信されなくなります。 run キューのサイズが増加しますが、著しいデータ損失が起こることはありません。

server-troubleshooter

データ

Pod 内でコマンドを実行し、出力をサポート バンドルに追加します。

一般公開時は利用できなくなる可能性があります。

slanger

サーバー

CircleCI アプリにリアルタイム イベントを提供します。

UI のリアルタイム更新が停止しますが、ハード リフレッシュは引き続き機能します。

test-results

実行

テスト結果ファイルを解析してデータを保存します。

ジョブについてテストの失敗やタイミングのデータが生成されなくなります。 サービスが再起動するとバックフィルが行われます。

vm-gc

コンピューティング管理

古いマシンやリモート Docker インスタンスを定期的に確認し、vm-service にそれらの削除をリクエストします。

このサービスを再起動するまで、古い vm-service インスタンスが破棄されなくなる可能性があります。

vm-scaler

マシン

マシンとリモート Docker ジョブの実行用にプロビジョニングするインスタンス数を増やすように、vm-service に定期的にリクエストします。

マシンとリモート Docker 用の VM インスタンスがプロビジョニングされなくなり、容量不足でジョブとそれらの Executor を実行できなくなる可能性があります。

EKS と GKE ではオーバーレイが異なります。

vm-service

マシン

利用可能な vm-service インスタンスのインベントリ管理と、新しいインスタンスのプロビジョニングを行います。

マシンまたはリモート Docker を使用するジョブが失敗するようになります。

workflows-conductor-event-consumer

パイプライン

パイプラインを実行するために VCS から情報を取得します。

VCS に変更があっても、新しいパイプラインが実行されなくなります。

workflows-conductor-grpc-handler

パイプライン

gRPC 経由での情報の変換を支援します。

web-ui-*

フロントエンド

フロントエンド Web アプリケーションの GUI のレンダリングに使用するマイクロ フロントエンド (MFE) サービスです。

各サービス ページを読み込むことができなくなります。 たとえば、web-ui-server-admin で障害が発生した場合、CircleCI Server の管理者ページを読み込めなくなります。

MFE は、app.<my domain here> での Web アプリケーションのレンダリングに使用されます。



Help make this document better

This guide, as well as the rest of our docs, are open-source and available on GitHub. We welcome your contributions.