開発者ドキュメント

Ubuntu16.04にConcourseCIをインストールする方法

序章

Concourse CI は、構成可能な宣言型構文を使用してパイプラインのテストを自動化するように設計された、最新のスケーラブルな継続的インテグレーションシステムです。 Concourseは、以前のCIシステムの成功を基に、パイプライン管理を簡素化し、「スノーフレーク」サーバーを排除して、テストサーバーが処理するコードと同様に規制されるようにすることを目的としています。

このチュートリアルでは、Ubuntu16.04サーバーにConcourseCIをインストールする方法を示します。 バックエンドとして使用するPostgreSQLデータベースを構成し、Concourseバイナリをダウンロードしてインストールしてから、継続的インテグレーションパイプラインを構築して実行できるようにするWebプロセスとワーカープロセスを構成します。

前提条件

このガイドを完了するには、少なくとも1GBのRAMを備えたUbuntu16.04サーバーが必要です。 続行する前に、 Ubuntu 16.04初期サーバーセットアップガイドの説明に従って、非ルートsudoユーザーとファイアウォールを構成します。

PostgreSQLのインストールと構成

Concourse CIバイナリをダウンロードする前に、サーバーにPostgreSQLインスタンスを設定する必要があります。 Concourseは、PostgreSQLデータベースを使用してパイプラインデータを保存します。

まず、ローカルパッケージインデックスを更新して、使用可能なファイルのローカルビューを更新します。 その後、Ubuntuのデフォルトリポジトリからpostgresqlおよびpostgresql-contribパッケージをインストールします。

  1. sudo apt-get update
  2. sudo apt-get install postgresql postgresql-contrib

データベースソフトウェアがインストールされたら、concourseという名前の専用PostgreSQLユーザーを作成して、データベースシステム内のConcourseアセットを管理します。 このユーザーを作成するには、sudoを使用して、データベースシステムへの管理者アクセス権を持つpostgresシステムユーザーとして機能します。

  1. sudo -u postgres createuser concourse

デフォルトでは、Concourseはatcというデータベースへの接続を試みます。 Concourseは、メインのWebおよびAPIハブを「ATC」と呼びます。これは「航空交通管制」の略です。 このデータベースを作成し、concourseデータベースユーザーに所有権を割り当てて、適切なアクセスを提供できます。

  1. sudo -u postgres createdb --owner=concourse atc

データベースが整ったので、ConcourseCIバイナリをダウンロードしてインストールする準備が整いました。

ConcourseCI実行可能ファイルをダウンロードしてインストールします

Concourseは、WebサイトとGitHubの両方で、Linuxプラットフォーム用にコンパイルされた実行可能ファイルへのリンクを提供します。

それらを見つける最も簡単な場所は、ConcourseCIダウンロードページです。 ダウンロードセクションのコンコースバイナリセクションで、右クリックしてLinuxプラットフォームダウンロードのリンクの場所をコピーします。 このページはすぐに戻ってきますので、開いたままにしてください。

サーバーで、/tmpディレクトリに切り替え、curlを使用して、コピーしたリンクをダウンロードします。

  1. cd /tmp
  2. curl -LO copied_URL_for_concourse_binary

次に、最新のflyコマンドラインクライアントをダウンロードします。 Concourse CIダウンロードページに戻り、DownloadsセクションのFlyBinaries セクションで、右クリックしてのリンク位置をコピーします。 Linuxプラットフォームのダウンロード。

サーバーで、コピーしたリンクを/tmpcurlで再度ダウンロードします。

  1. cd /tmp
  2. curl -LO copied_URL_for_fly_binary

ダウンロードリクエストでエラーが発生した場合、ファイルにはバイナリプログラムではなくHTTPエラーメッセージが含まれます。 次のように入力して、ファイルが実際にバイナリ実行可能ファイルであることを確認します。

  1. file *linux_amd64 | grep executable
Output
concourse_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=3f24eae5da950594d8d1aaea7631bc20883afba3, not stripped fly_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

上記の出力は、ファイルが実行可能ファイルであることを示しています。 ファイルに実行可能アクセス許可を追加し、_linux_amd64サフィックスを削除して、次のように入力して/usr/local/binディレクトリに移動できます。

  1. chmod +x concourse* fly*
  2. sudo mv concourse* /usr/local/bin/concourse
  3. sudo mv fly* /usr/local/bin/fly

各プログラムのバージョンを尋ねることは、すべてが正しく動作していることを確認するための小さなチェックとして役立ちます。

  1. cd ~
  2. concourse --version
  3. fly --version
Output
3.0.1 3.0.1

バイナリが配置されたので、Concourseの構成を開始できます。

コンコースCI構成アセットを作成する

次に、Concourseが起動に使用する構成とキーの組み立てを開始できます。

始める前に、関連するすべてのファイルを保持できる構成ディレクトリを作成します。

  1. sudo mkdir /etc/concourse

これで、暗号化キーを生成し、Concourse構成を定義するファイルを作成できます。

キーファイルの作成

Concourseは、相互に安全に通信できる必要があるいくつかの関連コンポーネントで構成されています。

ATC は、WebおよびAPIリクエストを処理し、パイプラインを調整するメインハブです。 Workers は、パイプラインで定義されたCI/CDタスクを実行するためのコンテナーを管理します。 TSA は、ワーカーをATCに安全に登録するカスタムSSHサーバーです。

これらすべてのコンポーネントを単一のサーバーで実行しますが、ワーカーとTSAは安全に通信することを期待しています。 この期待に応えるために、次の3つのキーセットを作成します。

これらは各コンポーネントの起動時に自動的に使用されるため、パスワードなしでこれらのキーを作成する必要があります。 次のように入力すると、/etc/concourseディレクトリにこれらの各キーペアを作成できます。

  1. sudo ssh-keygen -t rsa -q -N '' -f /etc/concourse/tsa_host_key
  2. sudo ssh-keygen -t rsa -q -N '' -f /etc/concourse/worker_key
  3. sudo ssh-keygen -t rsa -q -N '' -f /etc/concourse/session_signing_key

コンコースディレクトリをチェックインすると、3つの公開キーと3つの秘密キーが使用可能になっていることがわかります。

  1. ls -l /etc/concourse
Output
total 24 -rw------- 1 root root 1679 May 11 17:19 session_signing_key -rw-r--r-- 1 root root 394 May 11 17:19 session_signing_key.pub -rw------- 1 root root 1679 May 11 17:19 tsa_host_key -rw-r--r-- 1 root root 394 May 11 17:19 tsa_host_key.pub -rw------- 1 root root 1675 May 11 17:19 worker_key -rw-r--r-- 1 root root 394 May 11 17:19 worker_key.pub

TSAは、許可されたキーファイルをチェックすることにより、システムへの接続を許可されているワーカーを決定します。 正常に接続できるように、許可されたキーファイルに生成したワーカーの公開キーを事前に入力する必要があります。

これが私たちの唯一のワーカーなので、ファイルをコピーするだけです。

  1. sudo cp /etc/concourse/worker_key.pub /etc/concourse/authorized_worker_keys

これで、許可されたワーカーのキーファイルと初期ファイルができたので、Concourse構成を定義するファイルを作成できます。

環境構成ファイルの作成

Concourseバイナリは、構成ファイルからネイティブに読み取りません。 ただし、プロセスの開始時に渡された環境変数から構成値を取得できます。

すぐに、Concourseサービスを定義および管理するためのsystemdユニットファイルを作成します。 ユニットファイルは、ファイルから環境変数を読み取り、プロセスの開始時にそれらをプロセスに渡すことができます。 ATCおよびTSAコンポーネントを開始するConcoursewebプロセスの変数を定義するファイルと、Concourseworkerプロセスの別のファイルを作成します。

次のように入力して、webプロセスのファイルを作成して開きます。

  1. sudo nano /etc/concourse/web_environment

内部では、ATCおよびTSAコンポーネントに必要な環境変数を定義します。 各変数はCONCOURSE_で始まります。

まず、変更する必要のない静的な値をいくつか定義します。 これらの変数は、秘密TSAとセッションキーの場所、許可されたワーカーを定義するファイル、およびPostgreSQLソケットの場所を定義します。

/ etc / concourse / web_environment
# These values can be used as-is
CONCOURSE_SESSION_SIGNING_KEY=/etc/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/etc/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/etc/concourse/authorized_worker_keys
CONCOURSE_POSTGRES_SOCKET=/var/run/postgresql

次に、環境に合わせて変更する必要のあるいくつかの変数を設定します。 CONCOURSE_EXTERNAL_URLは、サービスがバインドするIPアドレスとポートを定義します。 これをサーバーのパブリックIPアドレスとポート8080に設定します。

また、コンコース管理グループとして機能するmainチームのユーザー名とパスワードを設定します。 ここで、任意のユーザー名とパスワードを選択できます。 これらの値を変更してサービスを再起動することにより、いつでも管理者の資格情報を変更できます。

/ etc / concourse / web_environment
# These values can be used as-is
CONCOURSE_SESSION_SIGNING_KEY=/etc/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/etc/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/etc/concourse/authorized_worker_keys
CONCOURSE_POSTGRES_SOCKET=/var/run/postgresql

# Change these values to match your environment
CONCOURSE_BASIC_AUTH_USERNAME=sammy
CONCOURSE_BASIC_AUTH_PASSWORD=theshark
CONCOURSE_EXTERNAL_URL=http://servers_public_IP:8080

終了したら、ファイルを保存して閉じます。

次に、workerプロセスの環境ファイルを作成します。

  1. sudo nano /etc/concourse/worker_environment

内部では、ワーカーの秘密鍵、TSAの公開鍵、およびワーカーがファイルを保存するディレクトリの場所を定義します。 また、TSAに到達できるアドレス(この場合はローカルホスト)を設定します。 以下の値を変更せずに使用できます。

/ etc / concourse / worker_environment
# These values can be used as-is
CONCOURSE_WORK_DIR=/var/lib/concourse
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/etc/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/etc/concourse/tsa_host_key.pub
CONCOURSE_TSA_HOST=127.0.0.1:2222

終了したら、ファイルを保存して閉じます。

専用システムユーザーの作成と権限の調整

先に進む前に、Concoursewebプロセスを実行するための専用のLinuxユーザーを作成する必要があります。 これにより、制限された権限でWeb向けサービスを開始できるようになります。

PostgreSQLがデフォルトで認証を処理する方法のため、ユーザー名が前に作成したPostgreSQLユーザー名と一致することが重要です。 次のように入力して、concourseというシステムユーザーとグループを作成します。

  1. sudo adduser --system --group concourse

次のように入力することで、/etc/concourseディレクトリとその内容に対する所有権を新しいユーザーに与えることができます。

  1. sudo chown -R concourse:concourse /etc/concourse

環境ファイルには、CIサーバーの管理ユーザー名やパスワードなどの機密データが含まれています。 通常のユーザーがこれらのファイルの値を読み取ったり変更したりできないように、環境ファイルのアクセス許可を調整します。

  1. sudo chmod 600 /etc/concourse/*_environment

現在、構成資産はconcourseシステムユーザーによって所有されており、他のユーザーに対する特権は制限されています。

Webおよびワーカープロセス用のSystemdユニットファイルを作成する

これで、アプリケーションプロセスを開始および管理するConcourseCIユニットファイルを定義する準備が整いました。 TSAおよびATCコンポーネントを処理するwebプロセス用に1つのファイルを作成し、パイプラインタスクのコンテナーを処理するworkerプロセス用に1つのファイルを作成します。

コンコースWebユニットファイルの作成

/etc/systemd/systemファイル内にconcourse-web.serviceファイルを作成することから始めます。

  1. sudo nano /etc/systemd/system/concourse-web.service

中に、次の内容を貼り付けます。

/etc/systemd/system/concourse-web.service
[Unit]
Description=Concourse CI web process (ATC and TSA)
After=postgresql.service

[Service]
User=concourse
Restart=on-failure
EnvironmentFile=/etc/concourse/web_environment
ExecStart=/usr/local/bin/concourse web

[Install]
WantedBy=multi-user.target

ファイルの最初のセクションは、webプロセスのユニットの説明を設定し、注文を決定するときにこのユニットをPostgreSQLユニットの後に開始する必要があることを示しています。

[Service]セクションは、サービスの実行方法を定義します。 以前に構成したconcourseユーザーとしてサービスを実行し、失敗した場合はサービスを自動的に再起動するようにsystemdに指示します。これは、プロセスがメモリの制約や同様の問題で停止した場合に役立ちます。 前に定義したweb_environmentファイルをロードして環境を確立し、concourse webを呼び出して実際のプロセスを開始します。

[Install]セクションは、起動時に開始するようにサービスを構成する場合に、ユニットをシステムの開始順序に関連付ける方法をsystemdに指示します。

終了したら、ファイルを保存して閉じます。

コンコースワーカーユニットファイルの作成

次に、同様のファイルを開いてworkerプロセスを定義します。

  1. sudo nano /etc/systemd/system/concourse-worker.service

中に、次の内容を貼り付けます。

/etc/systemd/system/concourse-worker.service
[Unit]
Description=Concourse CI worker process
After=concourse-web.service

[Service]
User=root
Restart=on-failure
EnvironmentFile=/etc/concourse/worker_environment
ExecStart=/usr/local/bin/concourse worker

[Install]
WantedBy=multi-user.target

このユニットは、concourse-webユニットと同様に機能します。 今回は、コンコースwebプロセスが開始された後、workerプロセスを開始するようにシステムに指示します。 workerプロセスは、コンテナ管理に管理者権限が必要なため、concourseではなくrootユーザーとして実行されます。 worker_environmentファイルをロードし、concourse workerコマンドを使用してプロセスを開始します。

終了したら、ファイルを保存して閉じます。

ファイアウォールを調整してサービスを開始する

ユニットファイルが配置されたら、ファイアウォールを介したアクセスを許可してサービスを開始できます。

webプロセスはポート8080で接続をリッスンするため、ufwファイアウォールでそのポートへのアクセスを開く必要があります。

  1. sudo ufw allow 8080

workerプロセスで使用されるコンテナーは、インターネットに正しく到達してDNSクエリを解決できるように、転送アクセスが必要です。 これを有効にするには、次のように入力します。

  1. sudo ufw default allow routed

これで、次のように入力してサービスを開始できます。

  1. sudo systemctl start concourse-web concourse-worker

次のように入力すると、両方のサービスが正しく開始されたことを確認できます。

  1. sudo systemctl status concourse-web concourse-worker
Output
● concourse-web.service - Concourse CI web process (ATC and TSA) Loaded: loaded (/etc/systemd/system/concourse-web.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2017-05-11 20:18:16 UTC; 1min 40s ago Main PID: 9954 (concourse) Tasks: 7 Memory: 100.0M CPU: 2.058s CGroup: /system.slice/concourse-web.service └─9954 /usr/local/bin/concourse web May 11 20:19:51 testatc concourse[9954]: {"timestamp":"1494533991.818562269","source":"tsa","message":"tsa.connection.keepalive","log_level":1,"data":{"remote":"127.0.0.1:48764","session":"1","type":"keepalive"}} . . . ● concourse-worker.service - Concourse CI worker process Loaded: loaded (/etc/systemd/system/concourse-worker.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2017-05-11 20:18:16 UTC; 1min 39s ago Main PID: 9960 (concourse) Tasks: 9 Memory: 619.6M CPU: 20.353s CGroup: /system.slice/concourse-worker.service └─9960 /usr/local/bin/concourse worker May 11 20:19:12 testatc concourse[9960]: {"timestamp":"1494533952.909682751","source":"tsa","message":"tsa.connection.channel.forward-worker.heartbeat.start","log_level":1,"data":{"remote":"127.0.0.1:48764","session":"1.1.1.7","worker-address":"127.0.0.1:38993","worker-platform":"linux","worker-tags":""}} . . .

両方のサービスが「アクティブ(実行中)」と表示されていること、およびログ行に明らかなエラーが含まれていないことを確認してください。 webサービスに特に注意して、ログ行がデータベースへの接続の問題を示していないことを確認してください。

サービスが正常に開始された場合は、サーバーが起動するたびにサービスが開始されるようにサービスを有効にします。

  1. sudo systemctl enable concourse-web concourse-worker

コマンドラインおよびWebインターフェイスを介したアクセスを確認します

Concourseサービスが実行されているので、アクセスできることを確認する必要があります。

コマンドラインでのアクセスの確認

まず、flyコマンドラインクライアントを使用してConcourseサービスにアクセスできることを確認しましょう。

loginサブコマンドを使用して/etc/concourse/web_environmentファイルで構成した管理ユーザー名とパスワードを使用してログインする必要があります。 単一のflyバイナリを使用して、複数のConcourseサーバーに接続および管理できるため、このコマンドは、さまざまなサーバーのエイリアスとして「ターゲット」と呼ばれる概念を使用します。 ターゲットを「ローカル」と呼び、ローカルのConcourseサーバーにログインします。

  1. fly -t local login -c http://127.0.0.1:8080

web_environmentsファイルで設定したmainチームのユーザー名とパスワードの入力を求められます。 クレデンシャルを入力すると、「ターゲットが保存されました」と表示されます。

Output
logging in to team 'main' username: sammy password: target saved

これは、正常にログインできたことを示しています。 ここにいる間に、次のように入力して、ワーカープロセスがTSAコンポーネントに正常に登録できたことを確認しましょう。

  1. fly -t local workers
Output
name containers platform tags team state version concourse-server 0 linux none none running 1.0

flyコマンドは、パイプラインを構成し、ConcourseCIサービスを管理するために使用されます。 fly helpコマンドは、追加のコマンドに関する情報を提供します。

Webインターフェイスを介したアクセスの確認

次に、サーバーのIPアドレスにアクセスし、続いてWebブラウザで:8080にアクセスして、Webアクセスを確認します。

http://servers_public_IP:8080

最初のConcourseCIページにアクセスできるはずです。

ここから、オプションで、プラットフォームに対応する画像をクリックして、flyコマンドをコマンドラインクライアントとしてローカルコンピューターにダウンロードできます。 これにより、サーバーにログインせずにCI環境を管理できます。 flyで初めてログインするときは、127.0.0.1ではなくサーバーのパブリックIPアドレスを指定することを忘れないでください(リモートでログインする前に、以下の暗号化に関する警告をお読みください)。

右上隅にあるloginリンクをクリックすると、Webインターフェイスにログインできます。 まず、チームを選択するように求められます。 管理グループであるmainチームは、デフォルトで使用可能な唯一の選択です。

次のページで、クレデンシャルを入力するように求められます。

警告:Concourse CIによって提供されるWebインターフェイスとAPIゲートウェイはデフォルトで暗号化されていないため、ユーザー名とパスワードはプレーンテキストとしてサーバーに送信されます。 このインストールを評価目的以外の目的で使用することを計画している場合は、ログインする前にWebインターフェイスをSSLで保護してください。 Concourse CI 用のSSL保護されたNginxリバースプロキシのセットアップに関する指示に従って、安全なアクセスを構成します。

web_environmentファイル内で構成した資格情報を入力すると、ログインしてデフォルトのプレースホルダーインターフェイスに戻ります。

flyを使用してパイプライン構成をサーバーに送信すると、この画面は、パイプラインアクティビティを監視できるインターフェイスに置き換えられます。

結論

このガイドでは、PostgreSQLとConcourseバイナリをインストールし、暗号化キーを設定し、Concourseとネットワークアクセスを構成しました。 サービスを開始した後、flyコマンドを使用してローカルにログインし、Webインターフェイスにアクセスして機能を確認しました。

前述のように、実際の作業にConcourseを使用する前に、SSLを使用してWebおよびAPIゲートウェイを保護することが重要です。 サーバーとリモートで対話する前に、 Nginxを使用したConcourseCIのSSLリバースプロキシのセットアップに関するガイドに従って、サーバーへの安全なアクセスを構成します。

flyを使用してパイプラインをConcourseサーバーに追加する方法については、Concourseドキュメント「helloworld」の例を確認してください。

モバイルバージョンを終了