Ubuntu 16.04にConcourse CIをインストールする方法

前書き

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

このチュートリアルでは、Ubuntu 16.04サーバーにConcourse CIをインストールする方法を示します。 バックエンドとして使用するようにPostgreSQLデータベースを構成し、Concourseバイナリをダウンロードおよびインストールしてから、継続的な統合パイプラインを構築および実行できるWebおよびワーカープロセスを構成します。

前提条件

このガイドを完了するには、* 1 GB以上のRAM *を備えたUbuntu 16.04サーバーが必要です。 Ubuntu 16.04サーバーの初期セットアップの説明に従って、非ルートの「+ sudo +」ユーザーとファイアウォールを設定ガイド]続行する前に。

PostgreSQLのインストールと構成

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

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

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

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

sudo -u postgres createuser concourse

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

sudo -u postgres createdb --owner=concourse atc

データベースを配置したら、Concourse CIバイナリをダウンロードしてインストールする準備ができました。

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

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

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

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

cd /tmp
curl -LO

次に、最新の `+ fly +`コマンドラインクライアントをダウンロードします。 Concourse CIダウンロードページの[ダウンロード]セクションの[フライバイナリ]セクションで、右クリックして* Linuxのリンクの場所をコピーします。 *プラットフォームのダウンロード。

サーバー上で、コピーされたリンクを `+ curl `で再度 ` / tmp +`にダウンロードします。

cd /tmp
curl -LO

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

file *linux_amd64 | grep executable
Outputconcourse_linux_amd64: ELF 64-bit LSB , 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 , 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
Output

バイナリが配置されたので、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バイナリは、構成ファイルからネイティブに読み取りません。 ただし、プロセスの開始時に渡される環境変数から構成値を取得できます。

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

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

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に設定します。

また、Concourse管理グループとして機能する `+ 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=
CONCOURSE_BASIC_AUTH_PASSWORD=
CONCOURSE_EXTERNAL_URL=http://:8080

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

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

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の「+ web +」プロセスを実行する専用のLinuxユーザーを作成する必要があります。 これにより、限られた権限でウェブ向けサービスを開始できます。

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およびワーカープロセス用のシステムユニットファイルを作成する

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

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

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

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 +`プロセスを定義します。

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 」ユニットと同様に機能します。 今回は、Concourseの ` web `プロセスが開始された後に、 ` worker `プロセスを開始するようシステムに指示します。 ` worker `プロセスは、コンテナ管理に管理者権限を必要とするため、 ` concourse `の代わりに ` root `ユーザーとして実行されます。 ` worker_environment `ファイルをロードし、 ` concourse worker +`コマンドを使用してプロセスを開始します。

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

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

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

`+ 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:  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:  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インターフェイスを介したアクセスの確認

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

コマンドラインでアクセスを確認する

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

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

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

`+ web_environments `ファイルで設定した ` main +`チームのユーザー名とパスワードの入力を求められます。 資格情報を入力すると、「ターゲットが保存されました」が表示されます。

Outputlogging in to team 'main'

username:
password:

target saved

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

fly -t local workers
Outputname              containers  platform  tags  team  state    version
concourse-server  0           linux     none  none  running  1.0

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

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

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

http://:8080

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

image:https://assets.digitalocean.com/articles/concourseci_install_1604/initial_screen.png [Concourse CI初期画面]

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

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

image:https://assets.digitalocean.com/articles/concourseci_install_1604/select_main_team.png [Concourse CI select main team]

次のページで、資格情報の入力を求められます。

`+ web_environment +`ファイル内で設定した認証情報を入力すると、ログインしてデフォルトのプレースホルダーインターフェイスに戻ります。

image:https://assets.digitalocean.com/articles/concourseci_install_1604/placeholder_interface.png [Concourse CI select main team]

パイプライン設定を「+ fly +」でサーバーに送信すると、この画面は、パイプラインのアクティビティを監視できるインターフェイスに置き換えられます。

結論

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

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

「+ fly +」を使用してConcourseサーバーにパイプラインを追加する方法については、https://concourse.ci/hello-world.html [Concourseドキュメントの「hello world」の例]をご覧ください。

Related