コンテナーで実行されているJenkinsスレーブのDocker(dind)でのDockerの代替方法は何ですか?


7

コンテナーで実行されているJenkinsスレーブを使用する場合、DockerのDockerの代替または「安全な」(セキュリティの観点から)実装とは何ですか

アーキテクチャの例:

  1. Dockerコンテナーとして実行されているJenkinsマスター
  2. Dockerコンテナーとして実行されているJenkinsスレーブ
  3. Dockerコンテナで実行されるテストタスク

いくつかの既知の選択肢:

制約の明確化:アイデアは、Jenkinsをオーケストレーターとして使用し、Dockerをクリーンな環境で使用することです。残りのアーキテクチャは変更される可能性があります。


2
質問のおかげで、あなたは私に次のことを教えてくれましたDocker-in-docker-トピックに新しい人は誰でも、JérômePetazzoniのの利点と欠点の説明を読む価値があります。
Richard Slater

1
@RichardSlaterワークロードの定義方法(ジョブ/日、スレーブ/マスター、cpu、データ/ジョブ)によって異なりますが、質問はより一般的です。記載されているすべてのセキュリティ、カメ、パフォーマンスは回避すべき正当な候補であり、「JérômePetazzoniの利点と欠点の説明」で言及されている「ハッキングハック」の匂い
ロンボブ

1
いいえ、あなたのアーキテクチャがまだdocker内のjenkinsスレーブに依存する必要があるかどうかはまだ不明です。とにかく、同じホスト(またはdocker image FWIW)に複数のバージョンがあるruby / python / javaのトリックはよく知られており、nodejsやGoのトリックは「一般的」ではなく、設定も簡単ではありません。だから私はあなたがどうやってオープンしているのか、そうでないのか本当にわかりません 計画がまだジェンキンスをオーケストレーターとして、Dockerをクリーンな環境で使用することである場合、答える場所があります。スレーブがDocker環境内にある必要がある場合、すべてが実際にはテスト結果を信頼できない醜いハックになります。
Tensibai 2017年

1
@Tensibaiは質問についての説明を指示してくれてありがとう、私の指摘は、あなたが言及したことを含め、回答に創造性のためのより多くの余地を残すことをより一般的にすることでした。特定のケースについては、トリックが知られており、使用されている場合、Dockerが提供する機会は、すべてのタイプのワークロードに対して1つの実装方法を持つことです。可能であれば、安定して安全にすることに焦点を当ててみてください。
ロンボブ2017年

1
@Tensibaiフィードバックをありがとうございます。質問に説明が追加されました。
ロンボブ2017年

回答:


5

dind(大丈夫なはずのdockerfileから新しいイメージを構築するのではなく)依存しないようにするために、Jenkinsのkubernetesプラグインを見回します。

明らかにkubernetesクラスターを有効にする必要がありますが、クリーンな隔離された環境でテストを実行するために一度だけJenkinsエージェントを使用できるようにし、それを切り離します。kubernetesクラスターのメンテナンスコストは、Jenkinsスレーブのメンテナンスよりも高くないはずです。

ボーナスポイントは、特定の環境でスレーブをバージョン管理でき、ruby / java / pythonの複数のバージョンをいじる必要がなく、使用するエージェントイメージを指定して適切な「環境」をタスクに選択させ、事前の微調整なしで環境をテストする準備ができています。

構成と保守が比較的軽いので、コンテナースケジューラとしてkurbenetesに向かいます。


優れたアプローチ、代替メソとして、swarmを使用できます
。IMOswarmは

@rombobは確かにあり、mesosは維持するのがかなり重く、おそらくこの使用例ではやりすぎです。この比較/ポイントがこの回答で意味をなすかどうか疑問に思いました。
Tensibai 2017年

多分比較が新しい質問の素晴らしい候補になるかもしれません
ロンボブ2017年

@rombob通常、それらは非常に迅速に有用性を失います。特に、swarmが活発に開発されている場合、ほぼ毎週更新が必要になります。ですから、私はそれを避けます。リスト全体または賛否両論の後で、ブログの投稿でさえ質問が明確ではありません
Tensibai

Jenkins Kubernetesプラグインを使用する場合、ビルドするコンテナーを動的にどのように選択しますか?私はJenkins Kubernetesプラグインを使用していますが、コンテナー内でビルドしたいので、引き続きdindを使用します。私はそれが入っているスレーブコンテナを持っていますが、もっと良い方法がなければなりません。
David West
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.