ランチャーからの記事

序章

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

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

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

前提条件

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

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

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

  • Docker1.5.0イメージを含む1つのUbuntu14.04ドロップレット。 このドロップレットはランチャーサーバーとしてのみ使用されるため、小さなドロップレットサイズを選択できます。

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

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

ステップ1—認証の構成

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

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

終了したら、 Githubで認証をクリックし、ポップアップウィンドウでアプリケーションの承認をクリックします。 これを行うと、ページが再読み込みされ、OAuthの設定手順が認証の構成セクションに置き換えられます。 Rancherへのアクセスを許可する必要があるユーザーと組織を追加します。 変更を加えると、認証設定の保存というボタンが表示されます。 終わったらクリックしてください。

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

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

ステップ2—ランチャー計算ノードの登録

サーバーと認証が設定されたので、Jenkinsデプロイメントを実行するためのいくつかの計算ノードを登録できます。

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

ランチャーUIで、ホスト(左側のメニュー)をクリックし、新しいホストの登録をクリックします。 ポップアップ表示されるウィンドウからDockerrunコマンドをコピーして、ウィンドウを閉じます。 DigitalOceanコントロールパネルに戻り、Rancherサーバーのように、Docker1.5.0イメージを使用して2つの追加のドロップレットを作成します。 ビルドにリソースが集中する場合は、これら2つのドロップレットに対してより大きなインスタンスサイズを選択することをお勧めします。

これらの両方のドロップレットのユーザーデータについては、#!/bin/bashの後に、前にコピーしたDockerrunコマンドを追加します。 これに似ているはずです。

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

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

数分後、RancherUIに両方のRancher計算ノードが表示されるはずです。 下の画像のRancherAgentと書かれているドロップレットの名前が表示されます。

ステップ3—Jenkinsマスターノードを起動する

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

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

  • Name の横のテキストボックスで、コンテナ名としてMasterを使用します。
  • Select Image の横のテキストボックスで、ソースイメージとしてjenkinsを使用します。

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

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

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

ステップ4—Jenkinsスレーブノードを起動する

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

ブラウザでhttp://your_jenkins_master_ip:8080をポイントして、JenkinsUIをロードします。

Jenkins UIで、左側の Manage Jenkins 、次のメニューの Manage Nodes 、最後に New Node を参照して、ノード構成を作成します。最終ページの左側。 次のメニューで、ノード名の横のテキストボックスにスレーブの名前を入力し(覚えておいてください。すぐにまた必要になります)、ダムスレーブを選択します。タイプとして、OKをクリックします。

このノードに関する詳細が記載されたページにリダイレクトされます。 リモートルートディレクトリには、/var/jenkinsと入力します。 起動方法の場合は、 Java WebStartを介してスレーブエージェントを起動するを選択します。 また、 executorsの数設定をデフォルトの1よりも高く更新して、スレーブで許可される並列ビルドの数を増やすこともできます。 残りの設定はデフォルト値のままにしておくことができます。 保存をクリックして、スレーブ構成をコミットします。

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

  • Name の横のテキストボックスで、コンテナ名として Slave1を使用します。
  • Select Image の横のテキストボックスで、ソースイメージとして usman /jenkins-slaveを使用します。

次に、詳細オプションをクリックします。 コマンドタブから始めます。 EnvironmentVarsの横にある+をクリックし、 NameMASTER_HOSTValueyour_jenkins_master_ip + をもう一度クリックし、 NameNODEとして、Valueを[X158X ]このステップの前半のJenkinsUIを介した新しいノード