CircleCI Server v3.x Overview

はじめに

CircleCI server v3.1.0 is a continuous integration and continuous delivery (CI/CD) platform that you can install on your GCP or AWS Kubernetes cluster.

The core of the CircleCI server application runs inside Kubernetes.

The application exposes 4 services using load balancers, three of these load balancers are VPC-internal.

Load Balancer タイプ ポート お問い合わせ内容

Frontend GUI Proxy & API

External

80 and 443

Exposes the web application.

Nomad Control Plane

Internal

4647

Exposes an RPC protocol for Nomad runners.

Output Processor

Internal

8585

Ingests output from Nomad runners.

VM Service

Internal

3000

Provisions virtual machines.

CircleCI server schedules CI jobs using the Nomad scheduler. The Nomad control plane runs inside of Kubernetes, while the Nomad clients, which are responsible for running scheduled CircleCI jobs, are provisioned outside the cluster. CircleCI server can run Docker jobs on the Nomad clients themselves or in a dedicated virtual machine (VM).

ジョブの成果物と出力は、Nomadのジョブからオブジェクトストレージ(S3、GCS、またはその他のサポートされるオプション)に直接送信されます。 Audit logs and other items from the application are also stored in object storage so both the Kubernetes cluster and the Nomad clients need access to object storage.

KOTs is used to configure and deploy CircleCI server 3.x.

稼働環境

Below is a diagram describing the architecture of server 3.x. The available services are described in greater detail in the Services section.

Services Architecture
Figure 1. CircleCI Server v3.x Architecture

Services

CircleCI server 3.0 consists of the following services. Find their descriptions and failure implications below:

Service Component お問い合わせ内容 障害発生時の影響 メモ

api-service

App Core

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

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

audit-log-service

App Core

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

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

builds-service

App Core

Ingests from www-api and sends to plans-service, workflows-conductor, and to orbs-service

circle-legacy-dispatcher

Execution

Part of Compute Management. Sends to usage Q (mongo) and back to VCS.

circleci-mongodb

Execution

Primary datastore

circleci-postgres

Data storage for microservices

circleci-rabbitmq

Pipelines and Execution

Queuing for workflow messaging, test-results, usage, crons, output, notifications, and scheduler

circleci-redis

Execution

Cache data that will not be stored permanently (i.e. build logs), for request caching, and for rate limit calculations.

A failed cache can end up resulting in rate limiting from the VCS if too many calls are made to it.

circleci-telegraf

Telegraf collects statsd metrics. All white-boxed metrics in our services publish statsd metrics that are sent to telegraf, but can also be configured to be exported to other places (i.e. Datadog or Prometheus)

circleci-vault

HashiCorp Vault to run encryption and decryption as a service for secrets

設定ファイル

contexts-service

App Core

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

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

cron-service

パイプライン

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

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

dispatcher

Execution

Split jobs into tasks and send them to scheduler to run.

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

domain-service

App Core

CircleCI ドメイン モデルに関する情報を保存、提供します。 Works with permissions and API

Workflows will fail to start and some REST API calls may fail causing 500 errors in the CircleCI UI. LDAP 認証を使用している場合、すべてのログインが失敗するようになります。

exim

Will be removed in GA, but users can provide mail submission credentials to an existing MTA

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

federations-service

App Core

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

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

LDAP integration not available

frontend

Frontend

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

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

Rate limit of 150 requests per second with a single user instantaneous limit of 300 requests.

inject-bottoken

A Kubernetes job that inserts a "bot token" into MongoDB. Bot tokens are authorization interservice communication. Mainly for www-api

kotsadm-kots

Licensing

The main Kots application. Runs the Kots admin console where upgrades and configuration of server take place No admin console available.

No upgrades or configuration possible for server

kotsadm-migrations

Licensing

Performs database migrations to handle updates of Kotsadm

kotsadm-minio

Licensing

Object storage for Kots licensing

kotsadm-operator

Licensing

Deploys and controls Kotsadm

kotsadm-postgres

Licensing

Database for Kots licensing

legacy-notifier

App Core

Handles notifications to external services (Slack, email, etc.)

prometheus

Server

Used for metrics

orb-service

パイプライン

Handles communication between orb registry and config.

output-processor

Execution

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

permissions-service

App Core

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

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

scheduler

Execution

Runs tasks sent to it. Works with Nomad server.

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

server-troubleshooter

Data

Runs commands inside pods and appends output to support bundles.

May not be available in GA.

slanger

server

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

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

test-results

Execution

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

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

vm-gc

Compute Management

Periodically check for stale machine and remote Docker instances and request that vm-service remove them.

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

vm-scaler

Machine

Periodically requests that vm-service provision more instances for running machine and remote Docker jobs.

VM instances for machine and Remote Docker might not be provisioned causing you to run out of capacity to run jobs with these executors.

Different overlay for EKS vs. GKE.

vm-service

Machine

Inventory of available vm-service instances, and provisioning of new instances.

Jobs that use machine or remote Docker will fail.

workflows-conductor-event-consumer

パイプライン

Takes in information from VCS to kick off pipelines.

New Pipelines will not be kicked off when there are changes in the VCS.

workflows-conductor-grpc-handler

パイプライン

Helps translate the information through gRPC.

web-ui-*

Frontend

Micro Front End (MFE) services used to render the frontend web application GUI.

The respective services page will fail to load. Example: A web-ui-server-admin failure means the server Admin page will fail to load.

The MFE’s are used to render the web application located at app.<my domain here>



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.