序章

GoCD は、テストとリリースのプロセスを自動化するように設計された強力な継続的インテグレーションおよびデリバリープラットフォームです。 GoCDは、ビルドの比較、複雑なワークフローの視覚化、ビルドバージョンの追跡の自動化などの多くの高度な機能を備えており、チームが十分にテストされたソフトウェアを本番環境に提供するのに役立つ柔軟なツールです。

このガイドでは、Ubuntu16.04でGoCDサーバーをセットアップする方法を示します。 サーバーとエージェントをインストールして、プロジェクトが提供するパッケージを使用してCI/CD作業を完了します。 その後、認証を構成し、サーバーをセットアップするためのいくつかの基本的なオプションを変更します。

前提条件

GoCDプロジェクトの推奨事項に基づいて、このガイドを完了するには、少なくとも2GのRAMと2つのCPUコアを備えたUbuntu16.04サーバーが必要です。 さらに、データを破損せずにビルドアーティファクトを処理するために、サーバーにはアーティファクトの保存場所として機能する専用のパーティションまたはディスクが必要です。 我々は使用するだろう /mnt/artifact-storage このガイドのアーティファクトストレージのマウントポイントとして:

  • サーバーホストとしてDigitalOceanを使用している場合は、アーティファクトの保存場所としてブロックストレージボリュームを使用できます。 このガイドに従って、 DigitalOceanブロックストレージボリュームをプロビジョニング、フォーマット、およびマウントする方法を学習してください。
  • DigitalOceanを使用していない場合は、このガイドに従って、汎用ホストでデバイスをパーティション分割、フォーマット、およびマウントする方法を学習してください。

サーバーが追加のストレージで構成されたら、 /mnt/artifact-storage Ubuntu 16.04初期サーバーセットアップガイドに従って、root以外のユーザーをセットアップします。 sudo 特権を設定し、基本的なファイアウォールを有効にします。 これらの手順を完了したら、このガイドに進んでください。

GoCDサーバーとエージェントのインストール

まず、GoCDプロジェクトが提供する専用リポジトリからサーバーとエージェントのパッケージをダウンロードしてインストールします。

まず、次のように入力して、新しいリポジトリ定義をAPTソース構成ディレクトリに追加します。

  1. echo "deb https://download.gocd.org /" | sudo tee /etc/apt/sources.list.d/gocd.list

また、GoCDパッケージの署名を検証できるように、GoCDGPGキーをAPTに追加する必要があります。 次のように入力して、キーをダウンロードしてシステムに追加できます。

  1. curl https://download.gocd.org/GOCD-GPG-KEY.asc | sudo apt-key add -

これで、ローカルパッケージインデックスを更新して、新しいパッケージのリストを取得し、ソフトウェアをインストールできます。 GoCDを実行するにはJava8が必要なので、 default-jre CIサーバーおよびエージェントと一緒にパッケージ化します。 また、インストールします apache2-utils パッケージ。認証ファイルを生成するために使用します。

  1. sudo apt-get update
  2. sudo apt-get install default-jre go-server go-agent apache2-utils

依存関係と継続的インテグレーションソフトウェアがダウンロードされ、サーバーにインストールされます。

初めて使用するためのGoCDの準備

GoCDサーバーを起動する前に、コマンドラインでいくつかのタスクを完了して準備をします。

まず、GoCDプロセスがアーティファクトのマウントポイントにアクセスできることを確認して、そこにアセットを保存できるようにする必要があります。 CIサーバーは次のように実行されます go ユーザーとグループ。これにより、の所有権を割り当てることができます。 /mnt/artifact-storage それに応じてマウントポイント:

  1. sudo chown -R go:go /mnt/artifact-storage

次に、認証情報用のパスワードファイルを作成して入力します。 GoCDのファイルベースの認証プラグインは、 htpasswd 効用。

The -B 以下のコマンドのオプションは、 bcrypt 暗号化アルゴリズム。 The -c オプションは教えます htpasswd 指定されたパスに新しい認証ファイルを作成します。 コマンドは、パスワードを作成するユーザー名で終了します。 このユーザー名はオペレーティングシステムのユーザーとは完全に別のものであるため、この値には好きなものを使用できます。

  1. sudo htpasswd -B -c /etc/go/authentication sammy

新しいユーザーのパスワードを入力して確認するように求められます。 ユーザー名とパスワードの暗号化されたバージョンがファイルに書き込まれます。

Output
New password: Re-type new password: Adding password for user sammy

:ファイルに複数のユーザー名とパスワードの組み合わせを追加して、追加のログインを許可できます。 ただし、最初のユーザーが追加された後、 htpasswd なしのコマンド -c オプション:

  1. sudo htpasswd -B /etc/go/authentication next_user

を使用して -c 最初のユーザーの後のオプションが発生します htpasswd 既存のクレデンシャルを追加するのではなく、すべて置き換える。

認証ファイルを取得したら、GoCDサーバーとエージェントのプロセスを開始できます。 これは完了するまでに時間がかかる場合があります。

  1. sudo systemctl start go-server go-agent

コマンドが終了した後でも、プロセスは完全には稼働していません。 まず、サービスが正常に開始されたことを確認します。

  1. sudo systemctl status go-*

出力がこれに似ている場合は、両方のプロセスがsystemdによって初期化されています。

Output
● go-agent.service - LSB: Go Agent Loaded: loaded (/etc/init.d/go-agent; bad; vendor preset: enabled) Active: active (exited) since Thu 2017-07-27 19:39:18 UTC; 1min 36s ago Docs: man:systemd-sysv-generator(8) Process: 8911 ExecStart=/etc/init.d/go-agent start (code=exited, status=0/SUCCESS) . . . Jul 27 19:39:18 go5 systemd[1]: Started LSB: Go Agent. ● go-server.service - LSB: Go Server Loaded: loaded (/etc/init.d/go-server; bad; vendor preset: enabled) Active: active (exited) since Thu 2017-07-27 19:39:33 UTC; 1min 21s ago Docs: man:systemd-sysv-generator(8) Process: 8867 ExecStop=/etc/init.d/go-server stop (code=exited, status=0/SUCCESS) Process: 8907 ExecStart=/etc/init.d/go-server start (code=exited, status=0/SUCCESS) . . . Jul 27 19:39:33 go5 systemd[1]: Started LSB: Go Server.

次に、サービスがポート8153と8154にバインドされるのを待つ必要があります。 GoCDは、最初のポートでHTTPトラフィックをリッスンし、2番目のポートでHTTPSで保護されたトラフィックをリッスンします。 プロセスは完了していますが、まだWebトラフィックの受け入れを開始していない可能性があります。

次のように入力して、現在リッスンされているポートを監視します。

  1. sudo watch netstat -plnt

これにより、リッスンしているTCPポートがチェックされ、2秒ごとに画面が更新されます。 GoCDがポート8153および8154のリッスンを開始すると、画面は次のようになります。

Output
Every 2.0s: netstat -plnt Thu Jul 27 20:16:20 2017 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1736/sshd tcp6 0 0 :::22 :::* LISTEN 1736/sshd tcp6 0 0 :::8153 :::* LISTEN 8942/java tcp6 0 0 :::8154 :::* LISTEN 8942/java

これらのリスニングポートが表示されたら、CTRL-Cを押してプロセスモニターを終了します。

ソフトウェアが完全に稼働しているので、UFWファイアウォールでGoCDのHTTPSポート(ポート8154)を開くことができます。 すべての接続を安全にしたいので、HTTPポートを開く必要はありません。

  1. sudo ufw allow 8154

警告:ポート8154が開かれると、すべてのインターフェイスでGoCDWebインターフェイスにアクセスできるようになります。 を作成してインターフェースをロックダウンする準備をしている間 /etc/go/authentication とファイル htpasswd コマンド、パスワード認証は現在GoCDで有効になっていません。 これは次のセクションで構成する最初の項目であり、CI/CDサーバーを保護するためにできるだけ早くその手順を完了する必要があります。

これでサーバーが稼働しています。 Webインターフェイスに接続して、構成を続行します。

パスワード認証の設定

GoCDサーバーコンポーネントが初期化されて接続をリッスンし、ファイアウォールが接続を許可すると、Webブラウザーでサービスに接続できます。

ブラウザで、 https:// プロトコルの後にサーバーのドメイン名またはIPアドレスが続き、最後に :8154 ポート仕様:

https://server_domain_or_IP:8154

ブラウザには、サービスのSSL証明書が信頼できる認証局によって署名されていないことを示す警告が表示される可能性があります。

GoCDは証明書に自己署名するため、これは予想される動作です。 ADVANCED またはブラウザで利用可能な同様のオプションをクリックして、とにかくリクエストを続行することを選択します。

最初にGoCDに接続すると、パイプライン定義画面が表示されます。 パイプラインをすぐに定義するのではなく、以前に作成したパスワードファイルを使用して認証を有効にすることを優先する必要があります。 htpasswd. 上部のナビゲーションメニューでADMINをクリックし、セキュリティサブメニューで認証構成を選択します。

次のページで、右上隅にある追加ボタンをクリックします。 認証プロバイダーの詳細を入力できる画面が表示されます。

まず、Idフィールドに新しい認証方法の任意の名前を入力します。 プラグインIDの選択を「GoCD用のパスワードファイル認証プラグイン」に設定したままにします。 最後に、パスワードファイルパスボックスに次のように入力します /etc/go/authentication、で作成したファイル htpasswd. 終了したら、接続の確認をクリックして、GoCDがファイルに正しくアクセスできることを確認します。

GoCDに「接続OK」メッセージが表示された場合は、保存をクリックして新しい認証を実装します。

新しいスキームを使用して認証するように求められます。 これは、最初に標準のブラウザログインボックスとして表示されるか、GoCDログインページにリダイレクトされる場合があります。 構成したユーザー名とパスワードを使用してログインします。

GoCDのインストールは、不正アクセスを防ぐためにパスワードで保護されています。

サイトのURLとアーティファクトの場所の設定

Webインターフェースが適切に保護されたので、WebUIを介してCIサーバーの構成を完了することができます。

Webインターフェイスに再度ログインした後、トップメニューの ADMIN をクリックし、ドロップダウンメニューからサーバー構成を選択します。

いくつかの設定を調整できるメインの構成ページに移動します。

最初に確認する必要があるのは、ページのサーバー管理セクション内のサイトURLです。 GoCDは、CIサーバーのURLを決定する2つの設定、「サイトURL」と「セキュアサイトURL」を提供します。 「サイトURL」は、ほとんどの状況で使用されるデフォルトのサイトURLです。 「セキュアサイトURL」は、通常の「サイトURL」がHTTPを使用するように構成されており、GoCDが機密データを送信する必要がある場合に使用されます。 「サイトURL」がHTTPSアドレスを使用する場合、すべての接続が暗号化され、「セキュアサイトURL」を設定する必要はありません。

ファイアウォールを介したHTTPSポートへのアクセスのみを許可しているため、サイトのURLに次のように入力します。 https:// プロトコル指定子、サーバーのドメインまたはIPアドレス、続いて :8154. 通常のURLはすでに安全であるため、安全なサイトのURLは空白のままにします。

次に、ページの PipelineManagementセクションまで下にスクロールします。 アーティファクトディレクトリの場所/mnt/artifact-storage 以前に作成したマウントポイント。 GoCDでアーティファクトの保持を自動的に管理する場合は、オプションでアーティファクトの削除ポリシーを調整できます。 アーティファクトを手動で管理するには、「しない」のままにします。

終了したら、ページの下部にある SAVE ボタンをクリックして、変更を実装します。

上部のメニューバーに警告が表示される場合があります。

警告インジケータをクリックすると、GoCDが使用しないことを通知する完全な警告メッセージが表示されます。 /mnt/artifact-storage 再起動するまでの場所。

X をクリックして、警告メッセージを終了します。

サーバーを再起動する前に、エージェントがサーバーに正常に登録されたことを確認しましょう。 トップメニューのAGENTS項目をクリックします。 エージェントのリストが表示されます。

開始したエージェントプロセスはサーバーに正常に登録され、そのステータスは「アイドル」に設定されています。 これは、エージェントが有効になっているが、作業が割り当てられていないことを意味します。これは、私たちが期待していることです。

エージェントが存在することを確認したので、GoCDサーバープロセスを再起動して、アーティファクトの場所の変更を完了することができます。 コマンドラインに戻り、次のように入力してサービスを再起動します。

  1. sudo systemctl restart go-server

サービスが再起動し、ポート8154での接続のリッスンを再開すると、WebUIに再接続できるようになります。

結論

このガイドでは、Ubuntu16.04で実行されるGoCDサーバーとエージェントをインストールして構成しました。 生成されたビルドアセットを処理するために別のパーティションに専用のアーティファクトストレージスペースを設定し、Webインターフェイスを保護するために認証を構成しました。

GoCDが起動して実行されたら、次のステップとして、信頼できるSSL証明書を使用してインストールを保護することをお勧めします。 Let’s Encrypt SSL証明書を使用してGoCDを構成する方法のガイドに従って、これを設定する方法を学習してください。