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

前書き

継続的インテグレーションは、開発者が1日に何度も頻繁に変更されたコードを共有リポジトリにマージできるDevOpsソフトウェア開発プラクティスです。マージのたびに、コードの問題を検出するために自動ビルドとテストが実行されます。これにより、開発者はエラーをすばやく見つけて解決し、ソフトウェアの品質を向上させ、ソフトウェアを継続的に提供できます。Concourseとの間で切り替えを行うと、すべての構成がバージョン管理にチェックインできる宣言ファイルに保持されるため、非常に簡単です。また、ビルド情報をインタラクティブに表示するWebユーザーインターフェイスも提供します。

コンコースコンポーネント。
  • ATC はコンコースの主要コンポーネントです。Web UIおよびAPIの実行を担当します。また、すべてのパイプラインのスケジューリングも処理します。
  • TSA はカスタム構築されたSSHサーバーです。労働者をATCに安全に登録する責任があります。
  • ワーカーは さらに2つの異なるサービスを実行します。
    1. Garden はコンテナーランタイムであり、ワーカーをリモートでコンテナーをオーケストレーションするためのインターフェイスです。
    2. Baggageclaim は、キャッシュおよびアーティファクト管理サーバーです。
  • Fly は、ATCと対話してコンコースパイプラインを構成するために使用するコマンドラインインターフェイスです。

前提条件

192.0.2.1 およびの ci.example.com 実際のVultrパブリックIPアドレスと実際のドメイン名をすべて置き換え てください。

How to Update Ubuntu 16.04のガイドを使用してベースシステムを更新します 。システムが更新されたら、PostgreSQLのインストールに進みます。

PostgreSQLデータベースのインストールと構成

PostgreSQLはオブジェクトリレーショナルデータベースシステムです。ConcourseはそのパイプラインデータをPostgreSQLデータベースに保存します。PostgreSQLリポジトリを追加します。

echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update

PostgreSQLデータベースサーバーをインストールします。

sudo apt -y install postgresql

PostgreSQLサーバーを起動し、起動時に自動的に起動するようにします。

sudo systemctl start postgresql
sudo systemctl enable postgresql

デフォルトのPostgreSQLユーザーのパスワードを変更します。

sudo passwd postgres

PostgreSQLユーザーとしてログインします。

sudo su - postgres

Concourse CIの新しいPostgreSQLユーザーを作成します。

createuser concourse

データベースの認証にはデフォルトのPostgreSQLユーザーを使用できますが、本番環境のセットアップではConcourseデータベースの認証に専用ユーザーを使用することをお勧めします。

PostgreSQLは、データベースでクエリを実行するためのシェルを提供します。PostgreSQLシェルに切り替えます。

psql

新しく作成したConcourseデータベースユーザーのパスワードを設定します。

ALTER USER concourse WITH ENCRYPTED password 'DBPassword';

重要 強力なパスワードに置き換え DBPasswordてください。チュートリアルの後半で必要になるため、パスワードを書き留めておきます。

Concourseの新しいデータベースを作成します。

CREATE DATABASE concourse OWNER concourse;

psql シェルを終了し ます。

\q

現在のpostgresユーザーからsudoユーザーに切り替えます。

exit

Concourse CIをダウンロードしてインストールする

Concourse実行可能ファイルの最新バージョンをダウンロードして保存し、 /usr/bin 直接実行できるようにします。ConcourseおよびFlyバイナリの最新バージョンは、Concourseダウンロードページから入手 できます新しいリリースは非常に頻繁です。 以下のリンクを最新バージョンの新しいリンクに置き換えます。

sudo wget https://github.com/concourse/concourse/releases/download/v3.10.0/concourse_linux_amd64 -O /usr/bin/concourse

同様に、最新バージョンのfly実行可能ファイルをダウンロードして、に保存し /usr/binます。

sudo wget https://github.com/concourse/concourse/releases/download/v3.10.0/fly_linux_amd64 -O /usr/bin/fly

Flyは、Concourse CIのATC APIへの接続に使用されるコマンドラインインターフェースです。Flyは、Linux、Windows、MacOSなどの複数のプラットフォームで利用できます。

ダウンロードconcourse したfly バイナリと バイナリに実行権限を割り当てます 。

sudo chmod +x /usr/bin/concourse /usr/bin/fly

バージョンを確認して、コンコースとフライが正しく動作しているかどうかを確認します。

concourse -version
fly -version

RSAキーの生成とセットアップ

RSAキーペアは、コンコースのコンポーネント間の通信を暗号化する方法を提供します。

Concourseを機能させるには、少なくとも3組のキーを生成する必要があります。セッションデータを暗号化するには、を生成し session_signing_keyます。このキーは、TSAがATCに対して行う要求に署名するためにも使用されます。TSA SSHサーバーを保護するには、を生成し tsa_host_keyます。最後に、worker_key ワーカーごとにを生成し ます。

Concourse CIに関連するキーと設定を保存するための新しいディレクトリを作成します。

sudo mkdir /opt/concourse

必要なキーを生成します。

sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/session_signing_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/tsa_host_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/worker_key

内容をauthorized_worker_keys ファイルにコピーして、ワーカーの公開鍵を承認し ます。

sudo cp /opt/concourse/worker_key.pub /opt/concourse/authorized_worker_keys

コンコースの開始

Concourseは、開始する必要がある2つの別々のコンポーネントを提供します:Webとワーカーです。Concourse Webを開始します。

sudo concourse web \
  --basic-auth-username admin \
  --basic-auth-password StrongPass \
  --session-signing-key /opt/concourse/session_signing_key \
  --tsa-host-key /opt/concourse/tsa_host_key \
  --tsa-authorized-keys /opt/concourse/authorized_worker_keys \
  --postgres-user=concourse \
  --postgres-password=DBPassword \
  --postgres-database=concourse \
  --external-url http://192.0.2.1:8080

basic-auth 必要に応じて、のユーザー名とパスワードを変更します 。キーファイルへのパスが正しいことを確認し、PostgreSQLデータベース構成でユーザー名とパスワードの正しい値が指定されていることを確認してください。

ATCはデフォルトポートをリッスンし、 8080 TSAはポートをリッスンします 2222。認証が--no-really-i-dont-want-any-auth不要な場合は、基本認証オプションを削除してからオプションを渡し ます。

Webサーバーが起動すると、次の出力が表示されます。

{"timestamp":"1503657859.661247969","source":"tsa","message":"tsa.listening","log_level":1,"data":{}}
{"timestamp":"1503657859.666907549","source":"atc","message":"atc.listening","log_level":1,"data":{"debug":"127.0.0.1:8079","http":"0.0.0.0:8080"}}

まだいくつかセットアップする必要があるので、今のところサーバーを停止します。

Concourse CIワーカーを開始します。

sudo concourse worker \
  --work-dir /opt/concourse/worker \
  --tsa-host 127.0.0.1 \
  --tsa-public-key /opt/concourse/tsa_host_key.pub \
  --tsa-worker-private-key /opt/concourse/worker_key

上記のコマンドは、TSAがlocalhostで実行されていて、デフォルトのポートをリッスンしていると想定しています 2222

上記のコマンドを使用してConcourse Webとワーカーを簡単に起動できますが、サーバーの管理にはSystemdを使用することをお勧めします。

環境とSystemdサービスの構成

Systemdサービスを使用してアプリケーションを管理することで、障害発生時および起動時にアプリケーションが自動的に開始されます。Concourseサーバーは設定ファイルからデータを取得しませんが、環境変数からデータにアクセスできます。グローバル環境変数を設定する代わりに、環境変数を格納する新しいファイルを作成し、Systemdサービスを使用して変数をConcourse CIに渡します。

Concourse Webの新しい環境ファイルを作成します。

sudo nano /opt/concourse/web.env

ファイルに入力します。

CONCOURSE_SESSION_SIGNING_KEY=/opt/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/opt/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/opt/concourse/authorized_worker_keys

CONCOURSE_POSTGRES_USER=concourse
CONCOURSE_POSTGRES_PASSWORD=DBPassword
CONCOURSE_POSTGRES_DATABASE=concourse

CONCOURSE_BASIC_AUTH_USERNAME=admin
CONCOURSE_BASIC_AUTH_PASSWORD=StrongPass
CONCOURSE_EXTERNAL_URL=http://192.0.2.1:8080

BASIC_AUTH 必要に応じて、のユーザー名とパスワードを変更します 。キーファイルへのパスが正しいことを確認し、PostgreSQLデータベース構成でユーザー名とパスワードの正しい値が指定されていることを確認してください。

同様に、ワーカーの環境ファイルを作成します。

sudo nano /opt/concourse/worker.env

ファイルに入力します。

CONCOURSE_WORK_DIR=/opt/concourse/worker
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/opt/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/opt/concourse/tsa_host_key.pub
CONCOURSE_TSA_HOST=127.0.0.1

環境ファイルにはユーザー名とパスワードが含まれているため、他のユーザーがアクセスできないようにアクセス許可を変更します。

sudo chmod 600 /opt/concourse/*.env

次に、ConcourseがWeb環境を実行するための新しいユーザーを作成します。これにより、Webサーバーが隔離された環境で確実に実行されます。

sudo useradd concourse

コンコースのCIファイルのディレクトリに対するコンコースユーザーの所有権を付与します。

sudo chown -R concourse:concourse /opt/concourse

Concourse Webサービス用の新しいsystemdサービスファイルを作成します。

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

ファイルに入力します。

[Unit]
Description=Concourse CI web server

[Service]
Type=simple
User=concourse
Group=concourse
Restart=on-failure
EnvironmentFile=/opt/concourse/web.env
ExecStart=/usr/bin/concourse web
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_web

[Install]
WantedBy=multi-user.target

ファイルを保存して閉じます。コンコースワーカーサービスの新しいサービスファイルを作成します。

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

ファイルに入力します。

[Unit]
Description=Concourse CI worker process

[Service]
Type=simple
Restart=on-failure
EnvironmentFile=/opt/concourse/worker.env
ExecStart=/usr/bin/concourse worker
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_worker

[Install]
WantedBy=multi-user.target

Webサービスとワーカーサービスを直接開始できるようになりました。

sudo systemctl start concourse-web concourse-worker

ワーカーとWebプロセスが起動時に自動的に開始するようにするには、次のコマンドを実行します。

sudo systemctl enable concourse-worker concourse-web

サービスのステータスを確認するには、次のコマンドを実行します。

sudo systemctl status concourse-worker concourse-web

サービスが開始されていない場合、または FAILED 状態にある場合は、/tmp ディレクトリからキャッシュを削除し ます。

sudo rm -rf /tmp/*

サービスを再起動します。

sudo systemctl restart concourse-worker concourse-web

今回はサービスが正しく開始されていることに注意してください。サービスのステータスを確認したときの出力は、次のようになります。

[user@vultr ~]$ sudo systemctl status concourse-worker concourse-web
● concourse-worker.service - Concourse CI worker process
   Loaded: loaded (/etc/systemd/system/concourse-worker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
 Main PID: 3037 (concourse)
   CGroup: /system.slice/concourse-worker.service
           └─3037 /usr/bin/concourse worker

Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.934722900","source":"tsa","message":"t...""}}
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.941227913","source":"guardian","messag...0"}}

...

● concourse-web.service - Concourse CI web server
   Loaded: loaded (/etc/systemd/system/concourse-web.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
 Main PID: 3036 (concourse)
   CGroup: /system.slice/concourse-web.service
           └─3036 /usr/bin/concourse web

Aug 26 07:27:57 vultr.guest concourse_web[3036]: {"timestamp":"1503732477.925554752","source":"tsa","message":"tsa...ve"}}
Aug 26 07:28:02 vultr.guest concourse_web[3036]: {"timestamp":"1503732482.925430775","source":"tsa","message":"tsa...ve"}}
...
Hint: Some lines were ellipsized, use -l to show in full.

サーバーへの接続

サーバーが起動すると、Concourse CIのWebインターフェースhttp://192.0.2.1:8080 に任意のブラウザーでからアクセスできます 。環境ファイルで提供されているユーザー名とパスワードを使用してログインします。

Flyを使用してサーバーに接続するには、次のコマンドを実行します。

fly -t my-ci login -c http://192.0.2.1:8080

上記のコマンドは、サーバーへの最初のログインに使用されます。 -t ターゲット名を提供するために使用されます。my-ci 目的のターゲット名に置き換え ます。上記のコマンドは、デフォルトのチームにログインします main。環境ファイルで提供されたユーザー名とパスワードを要求します。

出力は次のようになります。

[user@vultr ~]$ fly -t my-ci login -c http://192.0.2.1:8080
logging in to team 'main'

username: admin
password:

target saved

ターゲットログインは1日間保存されます。その後、有効期限が切れます。

すぐにログアウトします。

fly -t my-ci logout

Flyは、ネットワークの外側のサーバーへのログインに使用できますが、サーバーにパブリックIPアドレスがあり、ネットワークの外側からアクセスできる場合のみです。WindowsまたはMacOSバイナリは、ダウンロードサイトまたはサーバーのWeb UIからダウンロードできます。

Nginxリバースプロキシの設定

ログイン、およびWeb UIを介してConcourseサーバーに送信されるその他の情報は保護されません。接続は暗号化されていません。Nginxリバースプロキシは、Let's Encryptの無料SSLを使用して設定できます。

Nginxをインストールします。

sudo apt -y install nginx

Nginxを起動し、起動時に自動的に起動するようにします。

sudo systemctl start nginx
sudo systemctl enable nginx

Certbotリポジトリを追加します。

sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update

Let's Encrypt CAのクライアントアプリケーションであるCertbotをインストールします。

sudo apt -y install certbot

Let's Encrypt CAから証明書を取得するには、証明書を生成するドメインをサーバーに向ける必要があります。そうでない場合は、ドメインのDNSレコードに必要な変更を加え、DNSが伝播するのを待ってから、証明書要求を再度行ってください。証明書ボットは、証明書を提供する前にドメイン認証局をチェックします。

SSL証明書を生成します。

sudo certbot certonly --webroot -w /var/www/html -d ci.example.com

生成された証明書は、/etc/letsencrypt/live/ci.example.com/ ディレクトリに格納される可能性があります 。SSL証明書はとして保存され fullchain.pem 、秘密鍵はとして保存され privkey.pemます。

証明書を暗号化しましょう90日で期限が切れますので、cronjobsを使用して証明書の自動更新を設定することをお勧めします。Cronは、定期的なタスクを実行するために使用されるシステムサービスです。

cronジョブファイルを開きます。

sudo crontab -e

ファイルの最後に次の行を追加します。

30 5 * * * /usr/bin/certbot renew --quiet

上記のcronジョブは、毎日5:30 AMに実行されます。証明書の有効期限が切れる場合、証明書は自動的に更新されます。

新しい仮想ホストを作成します。

sudo nano /etc/nginx/sites-available/concourse

ファイルに入力します。

server {
    listen 80;
    server_name ci.example.com;
    return 301 https://$host$request_uri;
}
server {

    listen 443;
    server_name ci.example.com;

    ssl_certificate           /etc/letsencrypt/live/ci.example.com/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/ci.example.com/privkey.pem;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log    /var/log/nginx/concourse.access.log;

    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;

      proxy_redirect      http://localhost:8080 https://ci.example.com;
    }
  }

実際のドメインに置き換え くださいci.example.com

構成ファイルをアクティブにします。

sudo ln -s /etc/nginx/sites-available/concourse /etc/nginx/sites-enabled/concourse

コンコースWeb用に作成された環境ファイルを編集します。

sudo nano /opt/concourse/web.env

の値を変更し CONCOURSE_EXTERNAL_URL 、ファイルの最後に2行追加します。

CONCOURSE_EXTERNAL_URL=https://ci.example.com
CONCOURSE_BIND_IP=127.0.0.1
CONCOURSE_BIND_PORT=8080

ファイルを保存して、Concourse Web、Worker、およびNginxを再起動します。

sudo systemctl restart concourse-worker concourse-web nginx

ブラウザとの間で送受信されるすべてのデータは、SSL暗号化で保護されています。



Leave a Comment

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。