Ubuntu16.04にConcourseCIをインストールする方法
序章
Concourse CI は、構成可能な宣言型構文を使用してパイプラインのテストを自動化するように設計された、最新のスケーラブルな継続的インテグレーションシステムです。 Concourseは、以前のCIシステムの成功を基に、パイプライン管理を簡素化し、「スノーフレーク」サーバーを排除して、テストサーバーが処理するコードと同様に規制されるようにすることを目的としています。
このチュートリアルでは、Ubuntu16.04サーバーにConcourseCIをインストールする方法を示します。 バックエンドとして使用するPostgreSQLデータベースを構成し、Concourseバイナリをダウンロードしてインストールしてから、継続的インテグレーションパイプラインを構築して実行できるようにするWebプロセスとワーカープロセスを構成します。
前提条件
このガイドを完了するには、少なくとも1GBのRAMを備えたUbuntu16.04サーバーが必要です。 非ルートを構成する sudo
続行する前に、Ubuntu16.04初期サーバーセットアップガイドで説明されているユーザーとファイアウォール。
PostgreSQLのインストールと構成
Concourse CIバイナリをダウンロードする前に、サーバーにPostgreSQLインスタンスを設定する必要があります。 Concourseは、PostgreSQLデータベースを使用してパイプラインデータを保存します。
まず、ローカルパッケージインデックスを更新して、使用可能なファイルのローカルビューを更新します。 その後、をインストールします postgresql
と postgresql-contrib
Ubuntuのデフォルトリポジトリからのパッケージ:
- sudo apt-get update
- sudo apt-get install postgresql postgresql-contrib
データベースソフトウェアがインストールされたら、次の名前の専用PostgreSQLユーザーを作成します。 concourse
データベースシステム内のConcourseアセットを管理します。 このユーザーを作成するには、 sudo
として機能する postgres
データベースシステムへの管理者アクセス権を持つシステムユーザー:
- sudo -u postgres createuser concourse
デフォルトでは、Concourseはと呼ばれるデータベースへの接続を試みます atc
. Concourseは、メインのWebおよびAPIハブを「ATC」と呼びます。これは「航空交通管制」の略です。 このデータベースを作成し、所有権をに割り当てることができます concourse
適切なアクセスを提供するデータベースユーザー:
- sudo -u postgres createdb --owner=concourse atc
データベースが整ったら、ConcourseCIバイナリをダウンロードしてインストールする準備が整いました。
ConcourseCI実行可能ファイルをダウンロードしてインストールします
Concourseは、WebサイトとGitHubの両方で、Linuxプラットフォーム用にコンパイルされた実行可能ファイルへのリンクを提供します。
それらを見つける最も簡単な場所は、ConcourseCIダウンロードページです。 ダウンロードセクションのコンコースバイナリセクションで、右クリックしてLinuxプラットフォームダウンロードのリンクの場所をコピーします。 このページはすぐに戻ってきますので、開いたままにしてください。
サーバーで、に切り替えます /tmp
ディレクトリを使用してから curl
コピーしたリンクをダウンロードするには:
- cd /tmp
- curl -LO copied_URL_for_concourse_binary
次に、最新のものをダウンロードします fly
コマンドラインクライアント。 Concourse CIダウンロードページに戻り、DownloadsセクションのFlyBinaries セクションで、右クリックしてのリンクの場所をコピーします。 Linuxプラットフォームのダウンロード。
サーバーで、コピーしたリンクを次の場所にダウンロードします。 /tmp
再び curl
:
- cd /tmp
- curl -LO copied_URL_for_fly_binary
ダウンロードリクエストでエラーが発生した場合、ファイルにはバイナリプログラムではなくHTTPエラーメッセージが含まれます。 次のように入力して、ファイルが実際にバイナリ実行可能ファイルであることを確認します。
- file *linux_amd64 | grep executable
Outputconcourse_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
次のように入力してディレクトリを作成します。
- chmod +x concourse* fly*
- sudo mv concourse* /usr/local/bin/concourse
- sudo mv fly* /usr/local/bin/fly
各プログラムのバージョンを尋ねることは、すべてが正しく動作していることを確認するための小さなチェックとして役立ちます。
- cd ~
- concourse --version
- fly --version
Output3.0.1
3.0.1
バイナリが配置されたので、Concourseの構成を開始できます。
コンコースCI構成アセットを作成する
次に、Concourseが起動に使用する構成とキーの組み立てを開始できます。
始める前に、関連するすべてのファイルを保持できる構成ディレクトリを作成します。
- sudo mkdir /etc/concourse
これで、暗号化キーを生成し、Concourse構成を定義するファイルを作成できます。
キーファイルの作成
Concourseは、相互に安全に通信できる必要があるいくつかの関連コンポーネントで構成されています。
ATC は、WebおよびAPIリクエストを処理し、パイプラインを調整するメインハブです。 Workers は、パイプラインで定義されたCI/CDタスクを実行するためのコンテナーを管理します。 TSA は、ワーカーをATCに安全に登録するカスタムSSHサーバーです。
これらすべてのコンポーネントを単一のサーバーで実行しますが、ワーカーとTSAは安全に通信することを期待しています。 この期待に応えるために、次の3つのキーセットを作成します。
- TSAコンポーネントのキーペア
- 労働者のためのキーペア
- ユーザーセッションおよびTSAからATCへの通信用のトークンに署名するために使用されるセッション署名キーペア
これらは各コンポーネントの起動時に自動的に使用されるため、パスワードなしでこれらのキーを作成する必要があります。 これらのキーペアのそれぞれをで作成できます /etc/concourse
次のように入力してディレクトリを作成します。
- sudo ssh-keygen -t rsa -q -N '' -f /etc/concourse/tsa_host_key
- sudo ssh-keygen -t rsa -q -N '' -f /etc/concourse/worker_key
- sudo ssh-keygen -t rsa -q -N '' -f /etc/concourse/session_signing_key
コンコースディレクトリをチェックインすると、3つの公開キーと3つの秘密キーが使用可能になっていることがわかります。
- ls -l /etc/concourse
Outputtotal 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は、許可されたキーファイルをチェックすることにより、システムへの接続を許可されているワーカーを決定します。 正常に接続できるように、許可されたキーファイルに生成したワーカーの公開キーを事前に入力する必要があります。
これが私たちの唯一のワーカーなので、ファイルをコピーするだけです。
- sudo cp /etc/concourse/worker_key.pub /etc/concourse/authorized_worker_keys
これで、許可されたワーカーのキーファイルと初期ファイルができたので、Concourse構成を定義するファイルを作成できます。
環境構成ファイルの作成
Concourseバイナリは、構成ファイルからネイティブに読み取りません。 ただし、プロセスの開始時に渡された環境変数から構成値を取得できます。
すぐに作成します systemd
Concourseサービスを定義および管理するためのユニットファイル。 ユニットファイルは、ファイルから環境変数を読み取り、プロセスの開始時にそれらをプロセスに渡すことができます。 コンコースの変数を定義するファイルを作成します web
ATCおよびTSAコンポーネントを開始するプロセス、およびコンコースの別のファイル worker
処理する。
のファイルを作成して開きます web
次のように入力して処理します。
- sudo nano /etc/concourse/web_environment
内部では、ATCおよびTSAコンポーネントに必要な環境変数を定義します。 各変数はで始まります CONCOURSE_
.
まず、変更する必要のない静的な値をいくつか定義します。 これらの変数は、秘密のTSAとセッションキーの場所、許可されたワーカーを定義するファイル、およびPostgreSQLソケットの場所を定義します。
# 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
コンコース管理グループとして機能するチーム。 ここで任意のユーザー名とパスワードを選択できます。 これらの値を変更してサービスを再起動することにより、いつでも管理者の資格情報を変更できます。
# 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
処理する:
- sudo nano /etc/concourse/worker_environment
内部では、ワーカーの秘密鍵、TSAの公開鍵、およびワーカーがファイルを保存するディレクトリの場所を定義します。 また、TSAに到達できるアドレス(この場合はローカルホスト)を設定します。 以下の値を変更せずに使用できます。
# 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
次のように入力します。
- sudo adduser --system --group concourse
新しいユーザーに所有権を与えることができます /etc/concourse
次のように入力して、ディレクトリとその内容を入力します。
- sudo chown -R concourse:concourse /etc/concourse
環境ファイルには、CIサーバーの管理ユーザー名やパスワードなどの機密データが含まれています。 通常のユーザーがこれらのファイルの値を読み取ったり変更したりできないように、環境ファイルのアクセス許可を調整します。
- sudo chmod 600 /etc/concourse/*_environment
現在、構成資産は concourse
他のユーザーの権限が制限されているシステムユーザー。
Webおよびワーカープロセス用のSystemdUnitファイルを作成する
これで、アプリケーションプロセスを開始および管理するConcourseCIユニットファイルを定義する準備が整いました。 のファイルを1つ作成します web
TSAおよびATCコンポーネントと1つのファイルを処理するプロセス worker
パイプラインタスクのコンテナを処理するプロセス。
コンコースWebユニットファイルの作成
作成することから始めます concourse-web.service
内のファイル /etc/systemd/system
ファイル:
- sudo nano /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
処理する:
- sudo nano /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
ファイアウォール:
- sudo ufw allow 8080
によって使用されるコンテナ worker
プロセスは、インターネットに正しく到達してDNSクエリを解決できるように、転送アクセスを必要とします。 これを有効にするには、次のように入力します。
- sudo ufw default allow routed
これで、次のように入力してサービスを開始できます。
- sudo systemctl start concourse-web concourse-worker
次のように入力すると、両方のサービスが正しく開始されたことを確認できます。
- 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
ログ行がデータベースへの接続の問題を示していないことを確認するためのサービス。
サービスが正常に開始された場合は、サーバーが起動するたびにサービスが開始されるようにサービスを有効にします。
- sudo systemctl enable concourse-web concourse-worker
コマンドラインおよびWebインターフェイスを介したアクセスを確認します
コンコースサービスが実行されているので、アクセスできることを確認する必要があります。
コマンドラインでのアクセスの確認
まず、コンコースサービスにアクセスできることを確認しましょう。 fly
コマンドラインクライアント。
で設定した管理ユーザー名とパスワードを使用してログインする必要があります /etc/concourse/web_environment
を使用してファイル login
サブコマンド。 独身者 fly
バイナリを使用して複数のConcourseサーバーに接続および管理できるため、このコマンドは「ターゲット」と呼ばれる概念をさまざまなサーバーのエイリアスとして使用します。 ターゲットを「ローカル」と呼び、ローカルのConcourseサーバーにログインします。
- fly -t local login -c http://127.0.0.1:8080
のユーザー名とパスワードの入力を求められます main
チーム、私たちが設定した web_environments
ファイル。 クレデンシャルを入力すると、「ターゲットが保存されました」と表示されます。
Outputlogging in to team 'main'
username: sammy
password:
target saved
これは、正常にログインできたことを示しています。 ここにいる間に、次のように入力して、ワーカープロセスがTSAコンポーネントに正常に登録できたことを確認しましょう。
- fly -t local workers
Outputname 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」の例を確認してください。