マラソンとメソスによるシンプルなジェンキンスパイプライン
1前書き
この記事では、https://jenkins.io/[Jenkins]、https://mesosphere.github.io/marathon/[Marathon]、およびhttp://mesos.apacheを使用して単純なContinuous Deliveryパイプラインを実装します.org/[Mesos]。
最初に、すべてがどのように組み合わさっているかについて説明しながら、テクノロジスタックとアーキテクチャの概要を説明します。
それに続いて、実用的なステップバイステップの例に進みます。
その結果は、Marathonを使用してアプリケーションをMesosクラスターにデプロイする、完全に自動化されたJenkinsパイプラインになります。
2テクノロジスタックの概要
コンテナーやマイクロサービスアーキテクチャーを扱うとき、私たちはもっと伝統的なスタックではしなかったであろう新しい運用上の問題に直面します。
たとえば、クラスタにデプロイするときは、拡張、フェイルオーバー、ネットワークなどに対処する必要があります。これらの困難な分散コンピューティングの問題は、Apache MesosやMarathonなどの分散カーネルとスケジューラを使用して解決できます。
2.1. メソス
Mesosは、最も簡単に言えば、アプリケーションが実行される単一のサーバーと見なすことができます。実際には、私たちにはクラスターがありますが、それはとても抽象的な抽象概念です。
2.2. マラソン
Marathonは、私たちのアプリケーションをMesosにデプロイするために使われるフレームワークで、私たちにとって難しい問題(ヘルスチェック、オートスケーリング、フェイルオーバー、モニタリングなど)を解決します。
3セットアップとインストール
この記事では、Jenkins、Mesos、およびMarathonを既に実行していることを前提としています。そうでない場合は、それらを設定する方法を学ぶためにそれぞれの公式文書を調べてください。これがなければ、あなたはガイドのどのステップも実行することができません。
4私達の配達パイプライン
以下のJenkinsパイプラインを作成します。
リンク:/uploads/pipeline__1-2-1024×157-768×118.png%20768w[]
このアプローチについて特に複雑なことは何もありません – それはあなたが最新のCDパイプラインの大部分の流れと同義語です。私たちの場合、構築はアプリケーションをコンテナ化することを意味し、デプロイすることはMarathonを使用してMesosクラスター上でそれをスケジュールすることを意味します。
** 5アプリケーションのテストと構築
最初のステップは、アプリケーションを構築してテストすることです。簡単にするために、これから扱うアプリケーションはSpring Bootアプリケーションです。このため、結果のアーティファクトは実行可能jarになります。 JRE以外に外部の依存関係がないため、実行は非常に簡単です。
5.1. 仕事を創る
最初にしたいことは、Jenkinsの仕事を作成することです。左側のナビゲーションバーで[新しい項目]を選択し、[フリースタイルプロジェクトの作成]を選択して「
marathon-mesos-demo
」
「
」とします。
リンク:/uploads/Screen-Shot-2017-01-24-at-22.13.07-1024×494-768×371.png%20768w[]
5.2. Git
との統合
次に、このアプリケーションを含むhttps://github.com/eugenp/tutorials/tree/master/mesos-marathon[Githubレポジトリのクローンを作成する]に設定します。
リンク:/uploads/Screen-Shot-2017-02-18-at-15.12.59-1024×513-768×385.png%20768w
簡単にするために、私たちのリポジトリはパブリックです。つまり、https
__.
__上でクローンを作成することができるということです。SSH上でクローンを作成する場合、SSHユーザーとプライベートを設定する追加ステップがあります。この記事の範囲を超えてキー。
5.3. ビルドトリガーの設定
次に、ビルドトリガーを設定して、私たちの仕事が毎分新しいコミットをgitにポーリングするようにしましょう:
リンク:/uploads/Screen-Shot-2017-02-04-at-17.50.47-1024×691-768×518.png%20768w[]
5.4. ビルドスクリプトを生成する
実行時にシェルスクリプトを実行するようにジョブに指示できます。単純なSpring Boot Mavenプロジェクトで作業しているので、「
mvn clean install
」というコマンドを実行するだけです。これですべてのテストが実行され、実行可能jarを作成します
_:
_
link:/uploads/Screen-Shot-2017-02-18-at-15.14.24-1024×401-768 x 301.png%20768w
5.5. 私たちのプロジェクトを構築する
これで、パイプラインの開始を設定しました。ジョブの[今すぐビルド]をクリックして手動で開始しましょう。仕事が終わったら、私たちはそれが青としてマークされていることによってそれが通過したことを確認することができます。
** 6. アプリケーションをコンテナ化する
パイプラインの次の段階、つまりDockerによるアプリケーションのパッケージ化と公開に進みましょう。コンテナーは特にMarathonが管理するものであるため、Dockerを使用する必要があります。事実上何でもコンテナ内で実行できるので、これは不合理ではありません。 Marathonのようなツールでは、これらによって与えられた抽象化を使用する方が簡単です。
6.1. Dockerfileを作成する
まず、プロジェクトルートにhttps://docs.docker.com/engine/reference/builder/[Dockerfile]を作成しましょう。基本的に、DockerfileはDocker Deamonにイメージを構築する方法についての指示を含むファイルです。
FROM openjdk:8-jre-alpine
ADD target/mesos-marathon-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8082
ENTRYPOINT["java","-jar","/app.jar"]----
私たちが構築しているイメージは単純です - それが含むすべては実行可能なjarファイルとコンテナが始まるときそれを実行するシェルコマンドです。
また、アプリケーションが待機するポート、この場合は「8082」を公開していることを確認する必要があります。
==== ** 6.2. 画像を公開する**
これでイメージをビルドできたので、それをビルドしてプライベートhttps://hub.docker.com/[Docker Hub]リポジトリに公開する単純なbashスクリプトを作成し、それをプロジェクトルートに配置しましょう。
[source,bash,gutter:,true]
#!/usr/bin/env bash
set -e
docker login -u baeldung -p $DOCKER
PASSWORD
docker build -t baeldung/mesos-marathon-demo:$BUILD
NUMBER .
docker push baeldung/mesos-marathon-demo:$BUILD__NUMBER
あなたはあなたのイメージを公共のdockerレジストリまたはあなたの個人的なレジストリにプッシュする必要があるかもしれません。 __ $ BUILD__NUMBER__環境変数はJenkinsによって設定され、ビルドごとに増加します。少し壊れやすいですが、それは各ビルドにバージョン番号を増やすための素早い方法です。 __ $ DOCKER__PASSWORD__はJenkinsによっても入力されています。この場合、秘密にするためにhttps://wiki.jenkins-ci.org/display/JENKINS/EnvInjectプラグイン[EnvInjectプラグイン]を使用します。 このスクリプトを直接Jenkinsに保存することはできますが、それをバージョン管理してプロジェクトの残りの部分と一緒にバージョン管理および監査できるようにすることをお勧めします。 ==== ** 6.3. Jenkins ** での構築と公開 それでは、jarをビルドした後に「Dockerise.sh」が実行されるように、Jenkinsの仕事を変更しましょう。 リンク:/uploads/Screen-Shot-2017-02-04-at-17.52.27-1024x553-768x415.png%20768w[] それから、もう一度確認するために私たちの仕事を実行しましょう。 === ** 7. 私たちのイメージをデプロイする** 私たちのパイプラインはほぼ完成しています。もう1つステージがあります。それは、Marathonを使用してアプリケーションをMesosクラスターにデプロイすることです。 Jenkinsには「https://wiki.jenkins-ci.org/display/JENKINS/Marathonプラグイン[Deploy with Marathon]]プラグインが付属しています。これはMarathon APIのラッパーとして機能し、従来のシェルスクリプトを使用する場合よりも簡単になります。あなたはプラグインマネージャを通してそれをインストールすることができます。 ==== ** ** 7.1. __Marathon .__ ** ** json ** ファイルを作成する** Marathonプラグインを使用する前に、“ marathon.json”ファイルを作成してプロジェクトルートに保存する必要があります。これは、プラグインがそれに依存しているためです。 このファイル“ marathon.json”にはhttps://mesosphere.github.io/marathon/docs/application-basics.html[メソアプリケーション定義]が含まれています。これは、実行したい長期実行サービス(アプリケーション)の説明です。最終的に、Jenkins Marathonプラグインはファイルの内容をMarathon __/v2/apps__エンドポイントにPOSTします。マラソンは、定義されたアプリケーションをMesos上で実行するようにスケジュールします。 [source,text,gutter:,true]
{
“id”: “mesos-marathon-demo”,
“container”: {
“type”: “DOCKER”,
“docker”: {
“image”: “”,
“network”: “BRIDGE”,
“portMappings”:[ { “containerPort”: 8082, “hostPort”: 0 }
] }
}
}
これはコンテナ化されたアプリケーション用にできる最も簡単な設定です。 Mesosスレーブからアプリケーションにアクセスできるようにするには、プロパティ "__portMappings__"を正しく設定する必要があります。それは基本的に、コンテナのポート__8082__をホスト上のランダムなポート(mesosスレーブ)にマッピングすることを意味しているので、私たちは外の世界から私たちのアプリケーションと話すことができます。 アプリケーションをデプロイした後、Marathonはそのポートが何を使用していたかを教えてくれます。 ==== ** 7.2. マラソン展開ビルドステップの追加** 私たちの仕事にMarathon Deploymentポストビルドアクションを追加しましょう。 リンク:/uploads/Screen-Shot-2017-02-04-at-17.59.54-1-1024x660-768x495.png%20768w Marathonが実行されている場所、この場合は「localhost:8081」をプラグインに伝えていることに注意してください。展開したいイメージも伝えています。 これが、ファイル内の空の「画像」フィールドが置き換えられたものです。 これでパイプラインの最終段階が完成しました。もう一度ジョブを実行して、まだ成功していることを確認します。今回は、アプリケーションをMarathonに送信するという追加のステップを追加します。 ==== ** 7.3. マラソン** での展開の確認 これでデプロイされました。マラソンのUIを見てみましょう。 リンク:/uploads/Screen-Shot-2017-01-30-at-23.59.00-1024x276-768x207.png%20768w[] ご覧のとおり、アプリケーションはUIに表示されています。アクセスするには、割り当てられているホストとポートを確認するだけです。 リンク:/uploads/Screen-Shot-2017-01-31-at-00.01.30-1024x524-768x393.png%20768w[] この場合、localhostのポート31143がランダムに割り当てられています。これは、アプリケーション定義で設定されているように、コンテナのポート8082に内部的にマッピングされます。その後、ブラウザでこのURLにアクセスして、アプリケーションが正しく配信されていることを確認できます。 === ** 8結論** この記事では、Jenkins、Marathon、Mesosを使用して簡単なContinuous Deliveryパイプラインを作成しました。コードに変更を加えるたびに、数分後に環境で実行されるようになります。 このシリーズの後半の記事では、アプリケーションのヘルスチェック、スケーリング、フェイルオーバーなど、より高度なマラソンのトピックについて説明します。 Mesosの他のユースケース、例えばバッチ処理もカバーされるかもしれません。 我々のアプリケーションのソースコードはhttps://github.com/eugenp/tutorials/tree/master/mesos-marathon[over on GitHub]で入手可能です。これはMavenプロジェクトであり、そのまま実行できます。