Rancherの記事

前書き

効果的な継続的インテグレーション(CI)は、成功する開発チームにとって重要な要件です。 CIは最前線のサービスではないため、多くの場合、中間層または余剰のハードウェアで実行されます。 プルリクエスト、自動展開、受け入れテスト、コンテンツのアップロード、およびその他のタスクのためにビルドを追加すると、ビルドマシンのリソースがすぐに圧倒される可能性があります。特に、コミットや展開アクティビティが多い場合は、起動間近です。

この記事では、Dockerを使用して分散ビルドシステムを構築し、Jenkinsイメージを作成して実行し、Rancherを使用してDockerクラスターを調整します。 Jenkinsは、最も有名なオープンソースCIソリューションの1つです。 Dockerはソフトウェアコンテナー内でのアプリケーションの展開を自動化し、Rancherは本番環境でDockerを管理するための完全なプラットフォームを提供します。

この記事では、クラウドベースのJenkinsのみの展開について説明します。 ただし、別の方法として、社内のJenkinsマスターとクラウドサーバーを使用して、より多くのリソースが必要なときにオーバーフロー容量を提供する方法があります。 これがDockerとRancherの真の輝きです:Dockerはどのノードでもほぼ同一のデプロイメント環境を提供し、Rancherはさまざまなクラウドプロバイダーまたは社内サーバーからのノードを、独自のVPNで実行される単一のクラスターに結合できます。 このチュートリアルの終わりまでに、任意の数のスレーブを使用してDockerized Jenkinsデプロイメントを簡単にセットアップできるようになります。

前提条件

このチュートリアルでは、合計3つのドロップレットを使用します。1つはRancherサーバー用、1つはJenkinsマスターを実行するRancher計算ノード用、もう1つはJenkinsスレーブを実行する2つ目のRancher計算ノード用です。

image:https://assets.digitalocean.com/articles/Jenkins_Rancher/1.png [image]

これらのドロップレットのIPアドレスは、それぞれ「」、「」、「++」で参照します。このチュートリアルでこれらの変数が表示されている場合は、それらを適切なIPアドレスに置き換えてください。

最初に、Rancherサーバー用のDropletを1つ作成します。 2つの計算ノードの作成については、後の手順で説明します。 したがって、このチュートリアルを開始するには、次のものが必要です。

  • Docker 1.5.0イメージを含む1つのUbuntu 14.04ドロップレット。 このDropletはRancherサーバーとしてのみ使用されるため、小さなDropletサイズを選択できます。

Docker 1.5.0画像オプションは、[アプリケーションの選択]タブの[アプリケーション]タブにあるドロップレット作成ページにあります。 このDropletには、カスタムユーザーデータも必要です。 これを追加するには、[利用可能な設定]セクションで[*ユーザーデータを有効にする]をクリックし、表示されるテキストボックスに以下のスクリプトを入力します。 このスクリプトは、起動時にRancherサーバーを実行するようDropletに指示します。

#!/bin/bash
docker run -d --name rancher-server -p 8080:8080 rancher/server

ステップ1-認証の構成

Rancherサーバーが作成されると、しばらくすると、「+ http://:8080 / +」を指すブラウザーを介してUIにアクセスできるようになります。 Rancherサーバーはインターネットに公開されているため、認証を設定することをお勧めします。 このステップでは、Github OAuthベースの認証をセットアップします。これは現在Rancherがサポートしているものです。

右上隅に*アクセス制御が構成されていません*という警告が表示され、*設定*へのリンクが続きます。 *設定*をクリックし、そこに表示される指示に従ってGithubに新しいアプリケーションを登録し、クライアントIDとシークレットをそれぞれのテキストフィールドにコピーします。

終了したら、ポップアップウィンドウで[* Githubで認証*]をクリックし、[アプリケーションの認証]をクリックします。 これを行うと、ページがリロードされ、OAuthのセットアップ手順が*認可の設定*セクションに置き換えられます。 Rancherへのアクセスを許可する必要があるユーザーおよび組織を追加します。 変更を加えると、*承認設定を保存*というボタンが表示されます。 完了したらクリックします。

承認設定を保存したら、右上隅の警告をGithubプロファイル画像とプロジェクト選択メニュー(最初は* Default *と表示されます)に置き換える必要があります。 [デフォルト]をクリックしてプロジェクト選択メニューを開き、[プロジェクトの管理]をクリックして、最後に[プロジェクトの作成]をクリックします。 Jenkinsというプロジェクトを追加し、プロジェクト選択メニューを再度使用してJenkinsプロジェクトを選択します。

image:https://assets.digitalocean.com/articles/Jenkins_Rancher/2.png [image]

これにより、Rancherで実行するさまざまなプロジェクトを分離しておくことで、Rancherのインターフェイスをすっきりさせることができます。 同じRancherクラスタでJenkinsに加えて他のサービスを実行する場合は、追加のプロジェクト(追加の計算ノードが必要)を作成できます。 また、デフォルトプロジェクトはログインしているユーザーに固有であるため、複数のユーザーにRancherエージェントへのアクセスを許可する場合は、デフォルトプロジェクトを使用しないでください。

ステップ2-Rancher計算ノードの登録

サーバーと認証が設定されたので、いくつかの計算ノードを登録してJenkins展開を実行できます。

注意:認証の前に、登録トークンを提供せずにRancher計算ノードを登録できます。 ただし、認証を有効にしているため、すべてのエージェントはクラスターに追加する登録トークンを提供する必要があります。

Rancher UIで、(左側のメニューの)*ホスト*をクリックしてから、*新しいホストを登録*します。 ポップアップするウィンドウからDocker実行コマンドをコピーして、ウィンドウを閉じます。 DigitalOceanコントロールパネルに戻り、Rancherサーバーなど、Docker 1.5.0イメージを使用して2つの追加のドロップレットを作成します。 ビルドがリソースを集中的に使用する場合は、これら2つのドロップレットに対してより大きなインスタンスサイズを選択できます。

これらの両方のドロップレットのユーザーデータに対して、 `+#!/ bin / bash +`を追加し、その後に先ほどコピーしたDocker実行コマンドを追加します。 これは次のようになります。

#!/bin/bash
sudo docker run -d --privileged
 -v /var/run/docker.sock:/var/run/docker.sock rancher/agent
 http://:8080/v1/scripts/

末尾の数字と文字の長い文字列は、コマンドによって異なります。 トークンはプロジェクトごとに一意であるため、*新しいホストを登録*をクリックする前に、プロジェクトを選択したことを確認してください。

数分後、Rancher UIでRancher計算ノードの両方を確認できるはずです。 下の画像の* RancherAgent *と表示されているドロップレットの名前が表示されます。

image:https://assets.digitalocean.com/articles/Jenkins_Rancher/3.png [image]

手順3-Jenkinsマスターノードの起動

これで、公式のJenkinsイメージを使用してJenkinsマスターノードを起動する準備ができました。

コンテナを起動するには、使用する計算ノードの下にある[コンテナの追加]をクリックし、次のオプションを追加します。

  • * Name の横のテキストボックスで、コンテナ名として Master *を使用します。

  • * Select Image の横にあるテキストボックスで、ソースイメージとして jenkins *を使用します。

次に、* Port Map の横にある + をクリックします。 両方のフィールドに8080を入力し、TCPをプロトコルのままにします。 これにより、Jenkins Web UIにアクセスできます。 もう一度 + *をクリックして、両方のフィールドにポート50000を追加し、プロトコルとしてTCPを残します。 これにより、スレーブがマスターに接続できます。

次に、[詳細オプション]、[ボリューム]タブの順にクリックします。 * Volumes *の横にある + *をクリックし、表示されるテキストボックスに `+ / var / jenkins_home +`を指定します。 Jenkinsのホームディレクトリをボリュームに保持すると、コンテナーを再起動しても構成を保持でき、別のコンテナー機能のボリュームを使用してコンテナーをバックアップすることもできます。

最後に、[作成]をクリックしてJenkinsコンテナを起動します。

[[step-4-­–launching-the-jenkins-slave-node]]
=== ステップ4-Jenkinsスレーブノードの起動

このステップでは、Jenkinsスレーブを起動します。

ブラウザで `+ http://:8080 +`を指定して、Jenkins UIをロードします。

image:https://assets.digitalocean.com/articles/Jenkins_Rancher/4.png [image]

Jenkins UIで、左側の* Jenkinsの管理*、次のメニューの*ノードの管理*、最後のページの左側の*新しいノード*を参照して、ノード構成を作成します。 次のメニューで、* Node name の横にあるテキストボックスにスレーブの名前を入力し(覚えておいてください-すぐに再び必要になります)、タイプとして Dumb Slave を選択し、 OKをクリックします*。

このノードに関する詳細が記載されたページにリダイレクトされます。 リモートルートディレクトリ*には、「+ / var / jenkins」と入力します。 [*起動方法]で、[* Java Web Startを介してスレーブエージェントを起動*]を選択します。 また、スレーブで許可される並列ビルドの数を増やすために、*#of executors *設定をデフォルトの1より大きい値に更新することもできます。 残りの設定はデフォルト値のままにすることができます。 * save *をクリックして、スレーブ設定をコミットします。

これで、スレーブコンテナを起動する準備が整いました。 Rancher UIで、残りの計算ノードで*コンテナの追加*をクリックし、次のオプションを追加します。

  • * Name の隣のテキストボックスで、コンテナ名として Slave 1 *を使用します。

  • * Select Image の横にあるテキストボックスで、ソースイメージとして usman / jenkins-slave *を使用します。

次に、詳細オプション*をクリックします。 [コマンド]タブから開始します。 * Environment Vars *の横にある + をクリックし、 Name を `+ MASTER_HOST `として、* Value *を `+`として1つのエントリを追加します。 もう一度 + をクリックし、この手順の前の方でJenkins UIを介して New Node メニューで指定された Name を `+ NODE +`として、 Value *をJenkinsスレーブの名前として別のエントリを追加します。

次に、* Volumes タブをクリックします。 * Volumes *の横にある + *をクリックし、表示されるテキストボックスに `+ / var / jenkins +`を指定します。

最後に、[作成]をクリックします。

`+ jenkins-slave +`コンテナは、Jenkinsマスターからjarファイルをダウンロードし、Jenkinsスレーブノードを実行します。 スレーブが起動すると、Jenkins UIで中断した[ノードの管理]ページを更新した後、スレーブのステータスを確認できるはずです。 以下に示すように、応答時間の値があり、コンピューターアイコンに赤いXがないスレーブノードが表示されます。

image:https://assets.digitalocean.com/articles/Jenkins_Rancher/5.png [image]

結論

この記事では、DockerとRancherを使用してJenkins CIデプロイメントをセットアップしました。 これで、Jenkinsクラスターは、さらに設定を行い、ビルドジョブを作成する準備ができました。

DockerはJenkinsを実行するための一貫した環境を提供し、Rancherはホスト間のネットワークを提供し、ドロップレットに手動でアクセスしたりサーバーをプロビジョニングしたりすることなく、Web UIからクラスターを管理できます。 このツールセットを使用すると、ビルドシステムのリソースを迅速に増減できます。 これは、起動などの重要な時期に控えめなビルドシステムを維持するために不可欠です。