とことんDevOps | 日本仮想化技術が提供するDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けするとことんDevOpsでは、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果など、DevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、アジャイル開発、コンテナ開発など

開催予定の勉強会

各種SNSのフォローもよろしくお願いいたします。

オンプレミスでCircleCI Serverを動かそう(その3) コアサービスのインストール編

オンプレミスで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とクライアントシークレットを入力してください。

GitHub連携の設定

S3の設定です。前回作成したS3バケットの名前、バケットを作成したリージョン、アクセスに使うIAMユーザーのアクセスキーとシークレットキーをそれぞれ入力してください。

S3の設定

Nomadの設定です。具体的にはNomadロードバランサーのエンドポイントと、クライアントとの通信に使う証明書情報を入力するのですが、これはCircleCI Serverのデプロイと、Nomadクライアントの構築が完了しないと入力することができません。しかし空欄のままでは必須項目が不足しているとして、設定を完了できません。そこで一時的に「Enable mTLS」をDisabledにしてください。ここはデプロイ完了後に再度有効化します。

NomadのmTLSを一時的に無効にする

最後にページ末尾にある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のログイン画面

ログインが完了し、GitHub上のリポジトリが見えるようになった状態

CircleCI Serverのフロントエンドはこれでもう動作します。しかし現時点では、まだジョブを実行することはできません。次回はジョブを実行するNomadクライアントを構築します。