fabric8-pipeline-libraryプロジェクトのreadmeには、複数のポッドテンプレートを組み合わせて、複数のビルド機能を混在させたpodをどのように組み合わせて、mavenとdockerバイナリの両方を利用できるようにするかについて説明する、「混合とマッチング」の章があります。Jenkinsfileでファブリック8のポッドテンプレートを混在させて一致させる - これは本当に動作するのでしょうか?
このドキュメントから:
我々は、単一のテンプレートよりも多くを必要とするかもしれない、より複雑な設定を必要とするかもしれない場合があります。 (例えば、ドッカービルドを実行できるMavenコンテナ)。
dockerTemplate {
mavenTemplate(label: 'maven-and-docker') {
node('maven-and-docker') {
container(name: 'maven') {
sh 'mvn clean package fabric8:build fabric8:push'
}
}
}
}
このMVNコールは、明らかに「達人」の容器に利用できるようにするのmavenプラスローカルドッキングウィンドウ機能を必要とする:あなたが一緒にドッキングウィンドウのテンプレートとMavenテンプレートを追加組み合わせることができ、この場合の
。
1つのfabric8対応プロジェクトでも同様の問題がありますが、上に "npm"バイナリを追加する必要があります。 npm呼び出しは、execプラグインを介してmavenビルドからも行われるので、maven + docker + npmを備えたコンテナが必要です。
私はこれを動作させるのに苦労していますが、jenkins kubernetes pluginのドキュメントもクロスチェックしました。また、ポッドテンプレートをネスト/継承する方法についても説明していますが、実際には両方のテンプレートの機能を組み合わせた単一のコンテナーになるとは思われません。このメカニズムは、親テンプレートの上にコンテナの設定を追加または変更するだけのようなものです。それは実際に画像を結合するものではありません。このドキュメントから
:
A podTemplateをしたり、既存のテンプレートから継承されない場合があります。つまり、podTemplateはノードセレクタ、サービスアカウント、イメージプルシークレット、containerTemplates、およびボリュームをinheritsFromのテンプレートから継承します。
「parent」テンプレート内のcontainerTemplate(同じ名前のcontainerTemplate)と一致するpodTemplateに追加されるコンテナテンプレートは、親containerTemplateの設定を継承します。一致するcontainerTemplateが見つからない場合、テンプレートはそのまま追加されます。
これは、私が私の組み合わせの試みの結果を解釈する方法でもあります。 dockerとmavenのテンプレートを組み合わせても、単一のdocker + mavenコンテナは作成されませんが、それぞれが1つの機能を持つ2つのコンテナ "docker"と "maven"がポッド内に作成されます。しかし、機能が組み合わされたコンテナや、ドッカーが必要とするmvnコールはありません。
docker + mavenがまだ動作するのはなぜですか?私は、mavenビルダーのイメージ「fabric8/maven-builder:2.2.297」は、単にすでにドッカーを箱から出していると思います。そのイメージに基づくコンテナの端末は、親テンプレートが関与することなく、ドッカーバイナリを呼び出すことができます。
だから私は恐ろしいことをはっきりと誤解していると思います。誰かがこのトピックについていくつかの光を放つことができますか?