オンプレミスでCircleCI Serverを動かすシリーズの第3回目です。前回までで、インストールの準備は整いましたので、いよいよCircleCI Server本体をインストールしていきます。
コアサービスのインストール
以下のようにKOTS
を使ってアプリをインストールします。コマンドを実行すると、途中で対話的に「デプロイ先のnamespace」と「管理者コンソールのパスワード」を聞かれますので、適宜入力してください。ここではnamespaceをcircleci-server
としています。
$ kubectl kots install circleci-server Enter the namespace to deploy to: circleci-server ← namespaceを入力 • Deploying Admin Console • Creating namespace ✓ • Waiting for datastore to be ready ✓ Enter a new password to be used for the Admin Console: •••••••• ← 管理者コンソールのパスワードを入力 • Waiting for Admin Console to be ready ✓ • Press Ctrl+C to exit • Go to http://localhost:8800 to access the Admin Console
Go to http://localhost:8800 to access the Admin Console
と表示されたら、WebブラウザーからこのURLを開いてください。ただし手元のPC以外から構築作業を行っている場合は、localhost
が開けませんので、次節を参考にポートフォワードを行ってください。
ローカルPC以外から構築作業を行っている場合の対応
管理コンソールのアドレスは、見ての通りlocalhost
となっています。これはKOTSがTCPの8800番ポートを待ち受け、クラスター上の管理コンソールにフォワードしているのですが、localhost
ですから、当然KOTSを実行しているノード自身からしかアクセスできません。そのため今回のようにEC2ノード上で構築作業を行っている場合は、Webブラウザーを動かす手元のPCから、EC2ノードへのトンネルを掘る必要があります。
具体的には新しいターミナルを開き、以下のコマンドでSSHを利用したポートフォワーディングが行えます。
$ ssh -L 8800:localhost:8800 -l ubuntu (作業用EC2のIPアドレス)
このSSHセッションを開きっぱなしにした状態で、Webブラウザーからhttp://localhost:8800
を開けば、管理コンソールにアクセスできます。
管理コンソールへのログイン
Webブラウザーからhttp://localhost:8800
を開くと、以下の画面が表示されます。先ほど設定した、管理コンソールのパスワードを入力してください。
ログインに成功すると、ライセンスのアップロードを要求されます。CircleCIから提供されているYAMLファイルをアップロードしてください。
完了すると、CircleCI Serverの設定画面に遷移します。
CircleCI Serverの設定
それでは最低限必要の設定を行っていきましょう。まずはフロントエンドの設定です。
「CircleCI Domain Name」には、CircleCI ServerをホストするFQDNを入力します。GitHubのOAuthアプリを作成した際に入力したURLと同じものになります。
「Enable HTTPS Termination」と「Automatically request and manage Let's Encrypt TLS certificates」にチェックを入れてください。これでLet's EncryptによるSSL証明書の自動取得・更新が有効になります。またLet's Encryptに登録するメールアドレスを入力してください。
アーティファクトの署名と暗号化の設定です。前回作成した署名キーと、暗号化キーを入力してください。
GitHubとの連携の設定です。前回作成したOAuthアプリのクライアントIDとクライアントシークレットを入力してください。
S3の設定です。前回作成したS3バケットの名前、バケットを作成したリージョン、アクセスに使うIAMユーザーのアクセスキーとシークレットキーをそれぞれ入力してください。
Nomadの設定です。具体的にはNomadロードバランサーのエンドポイントと、クライアントとの通信に使う証明書情報を入力するのですが、これはCircleCI Serverのデプロイと、Nomadクライアントの構築が完了しないと入力することができません。しかし空欄のままでは必須項目が不足しているとして、設定を完了できません。そこで一時的に「Enable mTLS」をDisabled
にしてください。ここはデプロイ完了後に再度有効化します。
最後にページ末尾にあるContinue
ボタンをクリックしてください。しばらく待つと、デプロイが完了します。ただし一部のサービスがまだ動作していないため、ステータスはUnavailable
となっています。
EKSクラスターにExternalDNSをデプロイしている場合は、この段階で自動的に、CircleCI Domain Nameに設定したDNSレコードがRoute53に登録されています。ブラウザーからこのURLにアクセスすると、ログイン画面が表示されるはずです。Sign Up
をクリックするとGitHubとのOAuth連携処理が走り、GitHubアカウントでログインができるようになります。
なおExternalDNSをデプロイしていない場合は、以下のコマンドを実行してCircleCI Serverのエンドポイントを調べた上で、名前解決ができるよう、DNSレコードを追加してください。DNSレコードはCircleCI Domain Nameに設定したFQDNだけでなく、それにapp
というサブドメインを追加したものも必要となります(例: circleci.example.comとapp.circleci.example.comなど。どちらも指し示すアドレスは同じ)。
$ kubectl get svc circleci-server-traefik -n circleci-server -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
CircleCI Serverのフロントエンドはこれでもう動作します。しかし現時点では、まだジョブを実行することはできません。次回はジョブを実行するNomadクライアントを構築します。