Search Results for ""

静的インストールスクリプトの使用

システム管理者を対象に、非 AWS 環境での CircleCI 2.0 の静的インストールの概要について説明します。

制限事項

このインストール方法には、以下のような制限があります。

  • machine Executors を使用することはできません。
  • リモート Docker 環境および Docker レイヤーキャッシュを使用することはできません。
  • 高度な高可用性オプションは提供されません。

CircleCI 2.0 では、以下の改善点を含む新しいインフラストラクチャが提供されています。

  • 任意の数のジョブとワークフローを組織化できる新しい設定機能
  • ジョブごとの実行を行えるカスタムイメージ
  • カスタムキャッシュ、ジョブごとの CPU またはメモリの割り当てなど、きめ細かいパフォーマンス

ビルド環境

デフォルトでは、CircleCI 2.0 の Nomad クライアントインスタンスは、.circleci/config.yml ファイルでジョブごとに設定されたイメージに従ってコンテナを自動的にプロビジョニングします。 CircleCI は、CircleCI 2.0 のプライマリジョブスケジューラとして Nomad を使用します。ジョブスケジューラ、およびクライアントとクラスタの基本的な操作方法については、「CircleCI での Nomad クラスタの操作ガイド」を参照してください。

アーキテクチャ

CircleCI の静的インストールは、Services と Nomad クライアントという 2つのプライマリコンポーネントで構成されています。 Services は、コアアプリケーション、ストレージ、ネットワーク通信機能から成る単一のインスタンス上で動作します。 任意の数の Nomad クライアントがジョブを実行し、Services マシンと通信します。 2つのコンポーネントはどちらも、以下のアーキテクチャ図に示すように、ネットワーク上で GitHub または GitHub Enterprise のインスタンスにアクセスする必要があります。

CircleCI のアーキテクチャの図

Services

Services インスタンスが動作するマシンは、必ず正しい手順に沿って再起動する必要があり、組み込みの VM スナップショット機能を使用してバックアップできます。 メモ: 高可用性を実現するには、PostgreSQL と Mongo を使用して外部データストレージを設定します。また、データベースのバックアップには、標準のツールを使用します。詳細については、高可用性のための外部データベースホストの追加に関するドキュメントを参照してください。 DNS 解決は、Services がインストールされているマシンの IP アドレスを指す必要があります。 以下の表に、Service インスタンスでトラフィックに使用されるポートを示します。

ソース ポート 用途
エンドユーザー 80、443、7171、8081 HTTP/HTTPS トラフィック
管理者 22 SSH
管理者 8800 管理者コンソール
Nomad クライアント 4647、8585、7171、3001 内部通信
GitHub (Enterprise または .com) 80、443 受信 Web フック

Nomad クライアント

Nomad クライアントインスタンスは実行時に状態を保存しないため、必要に応じてコンテナ数を増減することができます。 すべてのビルドを処理できる十分な数のクライアントマシンが確実に実行されるようにするには、キューイングされているビルドを追跡し、必要に応じてクライアントマシンを増やして負荷を分散させます。

Nomad クライアントがインストールされているマシンには、ビルドを調整するために、それぞれ 2つの CPU と 4 GB のメモリが予約されています。 そのうえで、残りのプロセッサーとメモリでコンテナが作成されます。 マシンの規模が大きくなれば、その分多くのコンテナを実行することができますが、調整用に予約してある 2つ以外に使用できるコアの数によって制限されます。 以下の表に、Nomad クライアントインスタンスで使用されるポートを示します。

ソース ポート 用途
エンドユーザー 64535-65535 ビルド機能への SSH 接続
管理者 80 または 443 CircleCI API アクセス (正しいシャットダウンなど)
管理者 22 SSH
Services VM 4647、8585、7171、3001 内部通信

GitHub

CircleCI では、認証に GitHub または GitHub Enterprise 認証情報が使用され、認証時には LDAP、SAML、または SSH を使用してアクセスできます。 また CircleCI では、一元管理された SSO インフラストラクチャでサポートされる認証が継承されます。 以下の表に、GitHub を実行するマシンで Services および Nomad クライアントインスタンスと通信する際に使用されるポートを示します。

ソース ポート 用途
Services 22 Git アクセス
Services 80、443 API アクセス
Nomad クライアント 22 Git アクセス
Nomad クライアント 80、443 API アクセス

インストール

以下のセクションでは、Services VM と Nomad クラスタのインストールの手順について説明します。

前提条件

インストールを開始する前に、以下を準備してください。

  • CircleCI の Platinum サポート契約。 まずは、CircleCI サポートまたはお客様のアカウント担当者にお問い合わせください。
  • CircleCI ライセンスファイル (.rli)。 ライセンスが必要な場合は、CircleCI サポートにお問い合わせください。
  • Services VM 用に、100 GB 以上のストレージ、32 GB 以上の RAM、4つ以上の CPU (8つを推奨) を搭載した、Ubuntu 14.04 または 16.04 を実行するマシン。
  • Nomad クライアント VM 用に、それぞれ 8 GB 以上の RAM と 4つ以上の CPU を搭載し、ビルドが必要とする Docker Registry へのネットワークアクセスを有する、Ubuntu 14.04 または 16.04 を実行するマシンのクラスタ。

Services マシンのインストール

  1. Services の init スクリプトを Services VM マシンにコピーします。

  2. Services VM 用にプロビジョニングされたマシンにログインし、sudo su コマンドを実行します。

  3. ./provision-services-ubuntu.sh を実行してスクリプトを起動します。

  4. HTTPS を使用して、ポート 8800 上のホストのパブリック IP に移動します。

  5. ライセンスを入力します。

  6. Storage セクションを完了します。 クラウドサービスを使用していない場合は、None を選択します (詳細については以下を参照してください)。

  7. VM プロバイダーを None に設定します。

  8. 1.0 ビルドを Off に設定します。

  9. 2.0 ビルドを Clustered に設定します。

Nomad クライアントのインストール

  1. クライアントの init スクリプトを Nomad サーバーマシンにコピーします。

  2. Nomad サーバー用にプロビジョニングされたマシンにログインし、sudo su コマンドを実行します。

  3. スクリプトを起動するには、NOMAD_SERVER_ADDRESS 環境変数を Services マシンのルーティング可能な IP に設定した状態で (例:NOMAD_SERVER_ADDRESS=0.0.0.0 ./provision-nomad-client-ubuntu.sh)、./provision-nomad-client-ubuntu.sh を実行します。

ストレージ

None ストレージドライバは、すべての CircleCI データをローカルに保存します。 つまり、アーティファクト、テスト結果、およびアクションログがローカルの /data/circle/storage-fileserver に保存されます。 ベストプラクティスとして、このストレージオプションを使用する場合は、外部ボリュームをマウントし、そのボリュームとの間にシンボリックリンクを作成することをお勧めします。 メモ: データの転送速度は、外部ボリュームで許容される上限に制限されてしまうため、SSD を使用することをお勧めします。

トラブルシューティング

ここでは、システムのセットアップおよびインストールに伴って発生する可能性がある一般的な問題について、考えられる対処法を示します。

  • 症状:ジョブが queued ステータスにとどまった後、最終的には失敗して正常に実行されない。
    • Nomad クライアントのログに以下のようなエラーメッセージが含まれる場合は、ポート 8585 をチェックしてください。
      • {“error”:”rpc error: code = Unavailable desc = grpc: the connection is unavailable”,”level”:”warning”,”msg”:”error fetching config, retrying”,”time”:”2018-04-17T18:47:01Z”}