序章

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

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

前提条件

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

PostgreSQLのインストールと構成

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

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

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

データベースソフトウェアがインストールされたら、次の名前の専用PostgreSQLユーザーを作成します。 concourse データベースシステム内の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プラットフォームのダウンロード。

サーバーで、コピーしたリンクを次の場所にダウンロードします。 /tmp 再び curl:

  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つのキーセットを作成します。

  • TSAコンポーネントのキーペア
  • 労働者のためのキーペア
  • ユーザーセッションおよびTSAからATCへの通信用のトークンに署名するために使用されるセッション署名キーペア

これらは各コンポーネントの起動時に自動的に使用されるため、パスワードなしでこれらのキーを作成する必要があります。 これらのキーペアのそれぞれをで作成できます /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バイナリは、構成ファイルからネイティブに読み取りません。 ただし、プロセスの開始時に渡された環境変数から構成値を取得できます。

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

のファイルを作成して開きます 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

次に、環境に合わせて変更する必要のあるいくつかの変数を設定します。 The 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

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

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

先に進む前に、Concourseを実行するための専用のLinuxユーザーを作成する必要があります web 処理する。 これにより、制限された権限で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およびワーカープロセス用のSystemdUnitファイルを作成する

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

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

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

  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ユニットの後に開始する必要があることを示します。

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

The [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 単位。 今回は、システムに開始するように指示します worker コンコース後のプロセス web プロセスが開始されました。 The worker プロセスは次のように実行されます root 代わりにユーザー concourse コンテナ管理には管理者権限が必要なためです。 ロードします worker_environment ファイルを作成して使用します concourse worker プロセスを開始するコマンド。

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

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

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

The 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インターフェイスを介したアクセスを確認します

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

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

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

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

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

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

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

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

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

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

http://servers_public_IP:8080

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

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

右上隅にある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」の例を確認してください。