0

ドッカーのworlflowにはかなり新しく、ドッカーのCD/CIワークフローのためのベストプラクティスは何か疑問に思っています...現在の記事のほとんどは、ドッカーの "展開" 、登録のみ。私が何をしたいかDocker CD/CIワークフローのベストプラクティスは何ですか?

  1. いくつかのコードは、Gitの
  2. から
  3. プッシュ
  4. ジェンキンスユニットテスト/ EEテスト
  5. ジェンキンスは、レジストリにドッキングウィンドウの画像
  6. ストアドッキングウィンドウのイメージを構築するに変更してください
  7. サーバー上でドッキング・イメージを実行します。

手順1〜5を達成するために、以下のスタックがあります。

ユーザーがgitlabをプッシュ - > Gitlab webhookがjenkinsに通知 - > jenkinsがプロジェクトをビルド - > gitlabドッカーレジストリにイメージを格納します。

私はドッカーイメージの展開にRancherを使用しています...私はRancherの分散が本当に好きです。つまり、実行するドッカーイメージを指定することができます。ランチャーは、コンテナを展開するサーバーを管理します。

理想的には、私は「分散」させるステップ#6が好き(つまり私は、サーバーにsshとdocker run {imagename}を実行したいいけない)と、いくつかのサービスが展開

ための権限も持っているだろうが、現在そのようなものがあります私はこれを達成することができますか?

答えて

0

これを達成するためのアプローチは非常に多くあります。

最も簡単な方法の1つは、コンフィグレーション管理ツールを使用してに新しいイメージを展開することです。 Ansibleは良い選択ですが、人形やシェフのような人も大丈夫です。これらのツールを使用すると、どこに展開する必要があるかを完全に制御できます。このexampleに記載されているように、トラフィックを中断することなく簡単に更新をロールバックすることができます。

もう1つのアプローチは、クラスタ自体に依存してサービスを自動的に展開することです。このアプローチは通常、振り付けと呼ばれます。 kubernetesのようなツールや、いくつかの魔法を使った最近のドッカー集団が良い選択です。

後者のアプローチはマイクロサービスアーキテクチャに向いており、より魅力的であるように見えますが、実際は実装するのがより複雑です。これは、クラスタによって実行されるサービスが構築される方法についていくつかの仮定を行います。しかし、最初のアプローチはあらゆる種類のソフトウェアに適合します。

+0

kubernetesを使用している場合はどうなりますか? 画像を自動展開するような「呼び出し」はありますか? – nate

+0

私は答えを提供するのに十分なくらいのkubernetesを知っていませんが、ドッカーでは組み込みの[scheduler](https://docs.docker.com/engine/swarm/swarm-tutorial/rolling-update/)を使うことができます。 )と 'docker service update'を定期的に呼び出すcronジョブがあります。また、CIサーバーから[RESTエンドポイント](https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/)service/name/updateを呼び出すこともできます。 –

1

最後のステップとして、例としてRancher(他の多くのREST APIも同様の機能を備えています)の場合、独自のスタックを定義する必要がある場合、JenkinsにRancher APIを呼び出してサービスをアップグレードさせることができますRancherカスタムサービスカタログに追加します。

私はまた、軽量のソリューションと喜んで代替案を探しています。

関連する問題