CI: Website updated

Signed-off-by: Marc Nuri <marc@marcnuri.com>
diff --git a/docs/kubernetes-gradle-plugin/index.html b/docs/kubernetes-gradle-plugin/index.html
index cf28bc3..9e7bc64 100644
--- a/docs/kubernetes-gradle-plugin/index.html
+++ b/docs/kubernetes-gradle-plugin/index.html
@@ -189,7 +189,7 @@
 <div class="title">Example for setting up the kubernetes-gradle-plugin in build.gradle</div>
 <div class="content">
 <pre class="highlight"><code class="language-groovy" data-lang="groovy">plugins {
-  id 'org.eclipse.jkube.kubernetes' version '1.5.0'
+  id 'org.eclipse.jkube.kubernetes' version '1.5.1'
 }</code></pre>
 </div>
 </div>
@@ -2530,7 +2530,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-groovy" data-lang="groovy">entryPoint {
     // Shell Form
-    shell = 'java -jar maven/hello-world-1.5.0.jar'
+    shell = 'java -jar maven/hello-world-1.5.1.jar'
 }</code></pre>
 </div>
 </div>
@@ -2542,7 +2542,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-groovy" data-lang="groovy">entryPoint {
     // exec form
-    exec = ['java','-jar','maven/hello-world-1.5.0.jar']
+    exec = ['java','-jar','maven/hello-world-1.5.1.jar']
 }</code></pre>
 </div>
 </div>
diff --git a/docs/kubernetes-maven-plugin/index.html b/docs/kubernetes-maven-plugin/index.html
index ce1efc6..fe1e5db 100644
--- a/docs/kubernetes-maven-plugin/index.html
+++ b/docs/kubernetes-maven-plugin/index.html
@@ -362,7 +362,7 @@
 
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;jkube-maven-sample-zero-config&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;packaging&gt;jar&lt;/packaging&gt;
 
   &lt;parent&gt;
@@ -387,7 +387,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
         &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt; <i class="conum" data-value="4"></i><b>(4)</b>
-        &lt;version&gt;1.5.0&lt;/version&gt;
+        &lt;version&gt;1.5.1&lt;/version&gt;
       &lt;/plugin&gt;
     &lt;/plugins&gt;
   &lt;/build&gt;
@@ -820,7 +820,7 @@
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">KMP 1.5.0</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">KMP 1.5.1</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td>
@@ -949,7 +949,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
 
   &lt;configuration&gt;
      ....
@@ -4474,7 +4474,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
 
   &lt;!-- Connect k8s:resource, k8s:build and k8s:helm to lifecycle phases --&gt;
   &lt;executions&gt;
@@ -4512,7 +4512,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
     &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
     &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-    &lt;version&gt;1.5.0&lt;/version&gt;
+    &lt;version&gt;1.5.1&lt;/version&gt;
     &lt;configuration&gt;
         &lt;enricher&gt;
             &lt;excludes&gt;
@@ -6620,7 +6620,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;goals&gt;
@@ -7485,7 +7485,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -7556,7 +7556,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -7616,7 +7616,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -7677,7 +7677,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -7724,7 +7724,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8113,7 +8113,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8182,7 +8182,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8267,7 +8267,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8493,7 +8493,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;configuration&gt;
     &lt;enricher&gt;
       &lt;config&gt;
diff --git a/docs/openshift-gradle-plugin/index.html b/docs/openshift-gradle-plugin/index.html
index b45f062..de0983a 100644
--- a/docs/openshift-gradle-plugin/index.html
+++ b/docs/openshift-gradle-plugin/index.html
@@ -195,7 +195,7 @@
 <div class="title">Example for setting up the openshift-gradle-plugin in build.gradle</div>
 <div class="content">
 <pre class="highlight"><code class="language-groovy" data-lang="groovy">plugins {
-  id 'org.eclipse.jkube.openshift' version '1.5.0'
+  id 'org.eclipse.jkube.openshift' version '1.5.1'
 }</code></pre>
 </div>
 </div>
@@ -2746,7 +2746,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-groovy" data-lang="groovy">entryPoint {
     // Shell Form
-    shell = 'java -jar maven/hello-world-1.5.0.jar'
+    shell = 'java -jar maven/hello-world-1.5.1.jar'
 }</code></pre>
 </div>
 </div>
@@ -2758,7 +2758,7 @@
 <div class="content">
 <pre class="highlight"><code class="language-groovy" data-lang="groovy">entryPoint {
     // exec form
-    exec = ['java','-jar','maven/hello-world-1.5.0.jar']
+    exec = ['java','-jar','maven/hello-world-1.5.1.jar']
 }</code></pre>
 </div>
 </div>
diff --git a/docs/openshift-maven-plugin/index.html b/docs/openshift-maven-plugin/index.html
index 975dc8a..dd59a27 100644
--- a/docs/openshift-maven-plugin/index.html
+++ b/docs/openshift-maven-plugin/index.html
@@ -364,7 +364,7 @@
 
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;jkube-maven-sample-zero-config&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;packaging&gt;jar&lt;/packaging&gt;
 
   &lt;parent&gt;
@@ -389,7 +389,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
         &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt; <i class="conum" data-value="4"></i><b>(4)</b>
-        &lt;version&gt;1.5.0&lt;/version&gt;
+        &lt;version&gt;1.5.1&lt;/version&gt;
       &lt;/plugin&gt;
     &lt;/plugins&gt;
   &lt;/build&gt;
@@ -822,7 +822,7 @@
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">OMP 1.5.0</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">OMP 1.5.1</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td>
@@ -951,7 +951,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
 
   &lt;configuration&gt;
      ....
@@ -2295,7 +2295,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;configuration&gt;
     &lt;enricher&gt;
       &lt;config&gt;
@@ -2322,7 +2322,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;configuration&gt;
     &lt;enricher&gt;
       &lt;config&gt;
@@ -4874,7 +4874,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
 
   &lt;!-- Connect oc:resource, oc:build and oc:helm to lifecycle phases --&gt;
   &lt;executions&gt;
@@ -4912,7 +4912,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
     &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
     &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-    &lt;version&gt;1.5.0&lt;/version&gt;
+    &lt;version&gt;1.5.1&lt;/version&gt;
     &lt;configuration&gt;
         &lt;enricher&gt;
             &lt;excludes&gt;
@@ -7020,7 +7020,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;goals&gt;
@@ -7885,7 +7885,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -7956,7 +7956,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8016,7 +8016,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8077,7 +8077,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8124,7 +8124,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8513,7 +8513,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8582,7 +8582,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8667,7 +8667,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;executions&gt;
     &lt;execution&gt;
       &lt;id&gt;jkube&lt;/id&gt;
@@ -8893,7 +8893,7 @@
 <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;
   &lt;artifactId&gt;openshift-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;1.5.0&lt;/version&gt;
+  &lt;version&gt;1.5.1&lt;/version&gt;
   &lt;configuration&gt;
     &lt;enricher&gt;
       &lt;config&gt;
diff --git a/page-data/docs/kubernetes-gradle-plugin/page-data.json b/page-data/docs/kubernetes-gradle-plugin/page-data.json
index fcc0fbc..ea12398 100644
--- a/page-data/docs/kubernetes-gradle-plugin/page-data.json
+++ b/page-data/docs/kubernetes-gradle-plugin/page-data.json
@@ -1,5 +1,5 @@
 {
     "componentChunkName": "component---src-templates-doc-jsx",
     "path": "/docs/kubernetes-gradle-plugin",
-    "result": {"data":{"asciidocCopy":{"html":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>&#169; 2021 The original authors.</p>\n</div>\n<div id=\"toc\" class=\"toc\">\n<div id=\"toctitle\" class=\"title\">kubernetes-gradle-plugin</div>\n<ul class=\"sectlevel1\">\n<li><a href=\"#introduction\">1. Introduction</a></li>\n<li><a href=\"#common-scenarios\">2. Common Scenarios</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#zero-config-scenario\">2.1. Zero Configuration</a></li>\n<li><a href=\"#groovy-scenario\">2.2. Using Groovy Configuration</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#groovy-scenario-image\">2.2.1. Configuring Images</a></li>\n<li><a href=\"#resource-labels-annotations\">2.2.2. Kubernetes Labels and Annotations</a></li>\n<li><a href=\"#controller-resource-generation\">2.2.3. Kubernetes Controller Generation</a></li>\n<li><a href=\"#ingress-generation\">2.2.4. Ingress Generation</a></li>\n<li><a href=\"#serviceaccount-generation\">2.2.5. ServiceAccount Generation</a></li>\n</ul>\n</li>\n<li><a href=\"#dockerfile-scenario\">2.3. Using Dockerfile</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#simple-dockerfile-mode-scenario\">2.3.1. Placing Dockerfile in project root directory</a></li>\n<li><a href=\"#docker-file-provided-mode-scenario\">2.3.2. Placing Dockerfile in some other directory</a></li>\n<li><a href=\"#docker-file-mode-include-exclude\">2.3.3. Controlling what gets copied to image</a></li>\n<li><a href=\"#docker-file-mode-property-placeholders\">2.3.4. Using Property placeholders in Dockerfiles</a></li>\n</ul>\n</li>\n<li><a href=\"#kubernetes-resource-fragments\">2.4. Kubernetes Resource Fragments</a></li>\n</ul>\n</li>\n<li><a href=\"#tasks\">3. Tasks Overview</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#task-overview-build\">3.1. Build And Deployment Tasks</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#jkubeBuild\">3.1.1. <strong>k8sBuild</strong></a></li>\n<li><a href=\"#jkubePush\">3.1.2. <strong>k8sPush</strong></a></li>\n<li><a href=\"#jkubeResource\">3.1.3. <strong>k8sResource</strong></a></li>\n<li><a href=\"#jkubeApply\">3.1.4. <strong>k8sApply</strong></a></li>\n<li><a href=\"#jkubeHelm\">3.1.5. <strong>k8sHelm</strong></a></li>\n</ul>\n</li>\n<li><a href=\"#task-overview-develop\">3.2. Development Tasks</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#jkubeDebug\">3.2.1. <strong>k8sDebug</strong></a></li>\n<li><a href=\"#jkubeLog\">3.2.2. <strong>k8sLog</strong></a></li>\n<li><a href=\"#jkubeUndeploy\">3.2.3. <strong>k8sUndeploy</strong></a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"#groovy-configuration\">4. Gradle Groovy DSL Configuration</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#global-configuration\">4.1. Global Configuration</a></li>\n<li><a href=\"#_image_configuration\">4.2. Image Configuration</a></li>\n<li><a href=\"#build-configuration\">4.3. Build Configuration</a></li>\n<li><a href=\"#build-assembly\">4.4. Assembly</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#build-assembly-layer\">4.4.1. Assembly - Inline/Layer</a></li>\n</ul>\n</li>\n<li><a href=\"#misc-env\">4.5. Environment and Labels</a></li>\n<li><a href=\"#misc-startup\">4.6. Startup Arguments</a></li>\n<li><a href=\"#build-buildargs\">4.7. Build Args</a></li>\n<li><a href=\"#kuberetes-resource-configuration\">4.8. Kubernetes Resources Configuration</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#labels-annotation-configuration\">4.8.1. Labels/Annotations</a></li>\n<li><a href=\"#controller-resource-groovy-configuration\">4.8.2. Controllers</a></li>\n<li><a href=\"#ingress-groovy-configuration\">4.8.3. Ingress</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"#registry\">5. Registry handling</a></li>\n<li><a href=\"#authentication\">6. Registry Authentication</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_pull_vs_push_authentication\">6.1. Pull vs. Push Authentication</a></li>\n</ul>\n</li>\n<li><a href=\"#kind-filename-mapping\">7. Kind/Filename Mapping</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#appendix-kind-mapping\">7.1. Default Kind/Filename Mapping</a></li>\n<li><a href=\"#custom-kind-mapping\">7.2. Custom Kind/Filename Mapping</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"introduction\">1. Introduction</h2>\n<div class=\"sectionbody\">\n<div class=\"admonitionblock important\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-important\" title=\"Important\"></i>\n</td>\n<td class=\"content\">\n<strong>This is a preview feature to get early feedback.  Only the set of documented features are available to users.</strong>\n</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>The <strong>kubernetes-gradle-plugin</strong> brings your Gradle Java applications on to\n<a href=\"http://kubernetes.io/\">Kubernetes</a>.\nThis plugin focuses on two tasks:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Building Container images.</p>\n</li>\n<li>\n<p>Creating Kubernetes resource descriptors.</p>\n</li>\n</ul>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"common-scenarios\">2. Common Scenarios</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>When working with kubernetes-gradle-plugin, you&#8217;ll probably be facing similar situations and following\nthe same patterns other users do. These are some of the most common scenarios and\nconfiguration modes:</p>\n</div>\n<div class=\"sect2\">\n<h3 id=\"zero-config-scenario\">2.1. Zero Configuration</h3>\n<div class=\"paragraph\">\n<p>It&#8217;s very common, especially when dealing with the inner development loop, that you\ndon&#8217;t need to provide any configuration for your Gradle project.\nYou can get started simply by adding the plugin to your build.gradle file:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for setting up the kubernetes-gradle-plugin in build.gradle</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">plugins {\n  id 'org.eclipse.jkube.kubernetes' version '1.5.0'\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>In this case, kubernetes-gradle-plugin analyzes your project and configures the container image and the\ncluster configuration manifests using a set of opinionated defaults.</p>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"groovy-scenario\">2.2. Using Groovy Configuration</h3>\n<div class=\"paragraph\">\n<p>If the <a href=\"#zero-config-scenario\">zero configuration</a> mode doesn&#8217;t fit your use case, and you want more\nflexibility, you can also use kubernetes-gradle-plugin Groovy configuration to configure\nplugin as per your needs.\nkubernetes-gradle-plugin provides a rich set of configuration in form of Groovy DSL which\ncan be used to tune plugin&#8217;s output as per your specific requirements.</p>\n</div>\n<div class=\"paragraph\">\n<p>The plugin configuration can be roughly divided into the following sections:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Global configuration options are responsible for tuning the behavior of plugin tasks.</p>\n</li>\n<li>\n<p><code>images</code> defines which container <a href=\"#config-image\">images</a> are used and configured.</p>\n</li>\n<li>\n<p><code>resources</code> defines the resource descriptors for deploying on Kubernetes cluster.</p>\n</li>\n<li>\n<p><code>enricher</code> configures various aspects of creating and enhancing resource descriptors.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>A working example can be found in <a href=\"https://github.com/eclipse/jkube/tree/master/quickstarts/gradle/groovy-dsl-config\"><code>quickstarts/gradle/groovy-dsl-config</code></a> directory.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"groovy-scenario-image\">2.2.1. Configuring Images</h4>\n<div class=\"paragraph\">\n<p>This section provides an overview of <code>images</code> element with which you can configure different aspects of container images generated by kubernetes-gradle-plugin.\nHere is an example of providing Groovy DSL configuration for a simple image:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for providing image using Groovy DSL configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"jkube/${project.name}:${project.version}\" <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n            alias = \"camel-service\" <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n            build {\n                from = \"quay.io/jkube/jkube-java-binary-s2i:0.0.9\" <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n                assembly { <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n                    targetDir = \"/deployments\" <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n                    layers = [{ <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n                        fileSets = [{ <i class=\"conum\" data-value=\"7\"></i><b>(7)</b>\n                            directory = file(\"${project.rootDir}/build/dependencies\")\n                       }]\n                    }]\n                }\n                env { <i class=\"conum\" data-value=\"8\"></i><b>(8)</b>\n                    JAVA_LIB_DIR = \"/deployments/dependencies/*\"\n                    JAVA_MAIN_CLASS = \"org.apache.camel.cdi.Main\"\n                }\n                labels { <i class=\"conum\" data-value=\"9\"></i><b>(9)</b>\n                    labelWithValue = \"foo\"\n                    version = \"${project.version}\"\n                    artifactId = \"${project.name}\"\n                }\n                ports = [\"8787\"] <i class=\"conum\" data-value=\"10\"></i><b>(10)</b>\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Name with which we want our image to be built; See <code>name</code> field in <a href=\"#config-image\">Image Configuration</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Shortcut name for image; See <code>alias</code> field in <a href=\"#config-image\">Image Configuration</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td>Base image on which this image would be built upon; See <code>from</code> field in <a href=\"#config-image-build\">Image Build Configuration</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>Assembly Configuration for copying files/directories into image.\nSee <a href=\"#config-image-build-assembly\">Assembly Configuration</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td>Target directory inside image for copying a directory into image</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td>Assembly layer; See <a href=\"#build-assembly-layer\">Assembly Inline/Layer Configuration</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"7\"></i><b>7</b></td>\n<td>FileSet Assembly Configuraton for copying directories.\nSee <code>fileSets</code> field in <a href=\"#build-assembly-layer\">Assembly Layer Configuration</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"8\"></i><b>8</b></td>\n<td>Environment variables added to image.\nSee <a href=\"#misc-env\">Environment and Labels</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"9\"></i><b>9</b></td>\n<td>Labels added to image.\nSee <a href=\"#misc-env\">Environment and Labels</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"10\"></i><b>10</b></td>\n<td>Ports to be exposed.\nSee <code>port</code> field in <a href=\"#config-image-build\">Image Build Configuration</a> for details.</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>You can read more about supported fields in <code>image</code> configuration element in <a href=\"#config-image\">Image Configuration</a> section.</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"groovy-scenario-image-copy-files\">Copying Files/Directories into Image</h5>\n<div class=\"paragraph\">\n<p>If you want to copy some files/directories into your image.\nYou can make use of kubernetes-gradle-plugin <a href=\"#config-image-build-assembly\">Assembly Configuration</a>.\nYou would need to provide <code>assembly</code> element in <code>image</code> &gt; <code>build</code>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here is an example of copying a single jar file into image.\nThis configuration would copy a jar file located in <code>build/libs/</code> to  <code>/deployments</code> folder inside the image:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for copying a file to image using Groovy DSL configuration:</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"${project.group}/${project.name}:${project.version}\"\n            build {\n                from = \"quay.io/jkube/jkube-java-binary-s2i:0.0.9\"\n                assembly {\n                    targetDir = \"/deployments\"\n                    layers = [{\n                        id = \"custom-assembly-for-copying-file\"\n                        files = [{\n                            source = file(\"build/libs/${project.name}-${project.version}-all.jar\")\n                            outputDirectory = \".\"\n                        }]\n                    }]\n                }\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>In order to copy directories, you would be using <code>fileSets</code> configuration element instead of <code>files</code>.\nHere is an example of copying directories.\nThis example would copy <code>build/dependencies</code> directory to <code>/deployments</code> directory inside image.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for copying a directory to image using Groovy DSL configuration:</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"${project.group}/${project.name}:${project.version}\"\n            build {\n                from = \"quay.io/jkube/jkube-java-binary-s2i:0.0.9\"\n                assembly {\n                    targetDir = \"/deployments\"\n                    layers = [{\n                        id = \"custom-assembly-for-copying-directory\"\n                        fileSets = [{\n                            directory = file(\"${project.rootDir}/build/dependencies\")\n                       }]\n                    }]\n                }\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"resource-labels-annotations\">2.2.2. Kubernetes Labels and Annotations</h4>\n<div class=\"paragraph\">\n<p>Labels and annotations can be easily added to any resource object.\nThis is best explained by an example.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for label and annotations</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    labels { <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n      all { <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n        extraLabel = \"quickstart-groovy-dsl-configuration\"\n      }\n      service { <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n        database = 'mysql'\n        persistent = 'true'\n      }\n      replicaSet { <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n        // ...\n      }\n      pod { <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n        // ...\n      }\n      deployment { <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n        // ...\n      }\n    }\n    annotations { <i class=\"conum\" data-value=\"7\"></i><b>(7)</b>\n       // ...\n    }\n }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td><code>labels</code> section with <code>resources</code> contains labels which should be applied to objects of various kinds</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Within <code>all</code> labels which should be applied to <strong>every</strong> object can be specified</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td><code>service</code> labels are used to label services</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td><code>replicaSet</code> labels are for replica set and replication controller</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td><code>pod</code> holds labels for pod specifications in replication controller, replica sets and deployments</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td><code>deployment</code> is for labels on deployments (kubernetes) and deployment configs (openshift)</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"7\"></i><b>7</b></td>\n<td>The subelements are also available for specifying annotations.</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>Labels and annotations can be specified in free form as a map.\nIn this map, the element name is the name of the label or annotation respectively, whereas the content is the value to set.\nSee <a href=\"#labels-annotation-configuration\">Labels and Annotations Configuration</a> for more details.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"controller-resource-generation\">2.2.3. Kubernetes Controller Generation</h4>\n<div class=\"paragraph\">\n<p>In JKube terminology, a Controller resource is a Kubernetes resource which manages Pods created for your application.\nThese can be one of the following resources:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/\">ReplicationController</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/\">ReplicaSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/\">Deployment</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/\">StatefulSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\">DaemonSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/job/\">Job</a></p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>By default Deployment is generated in Kubernetes mode.\nYou can easily configure different aspects of generated Controller resource using Groovy DSL configuration.\nHere is an example:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example of Controller Resource Configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    labels {\n      all {\n        extraLabel = \"quickstart-groovy-dsl-configuration\"\n      }\n    }\n    env { <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n      organization = \"Eclipse Foundation\"\n      projectName = \"jkube\"\n    }\n    controllerName = \"${project.name}-controller\" <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n    containerPrivileged = true <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n    imagePullPolicy = \"Always\" <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n    replicas = \"2\" <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n    liveness { <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n      getUrl = \"http://:8080/q/health\"\n      tcpPort = \"8080\"\n      initialDelaySeconds = \"3\"\n      timeoutSeconds = \"3\"\n    }\n    volumes = [{ <i class=\"conum\" data-value=\"7\"></i><b>(7)</b>\n      name = \"scratch\"\n      type = \"emptyDir\"\n      medium = \"Memory\"\n      mounts = [\"/var/scratch\"]\n    }]\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Environment variables added to all of your application Pods</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Name of Controller(<code>metadata.name</code> set in generated Deployment, Job, ReplicaSet etc)</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td>Setting <a href=\"https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod\">Security Context</a> of all application Pods.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>Configure how images would be updated. Can be one of <code>IfNotPresent</code>, <code>Always</code> or <code>Never</code>. Read <a href=\"https://kubernetes.io/docs/concepts/containers/images/#updating-images\">Kubernetes Images docs</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td>Number of replicas of pods we want to have in our application</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td>Define an HTTP liveness request, see <a href=\"https://kubernetes.io/docs/concepts/containers/images/#updating-images\">Kubernetes Liveness/Readiness probes</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"7\"></i><b>7</b></td>\n<td>Mounting an EmptyDir Volume to your application pods</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>See <a href=\"#controller-resource-groovy-configuration\">Kubernetes Controller Configuration</a> for more details.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"ingress-generation\">2.2.4. Ingress Generation</h4>\n<div class=\"paragraph\">\n<p>Once you&#8217;ve enabled <code>jkube.createExternalUrls</code> property, you should be able to generate an opinionated ingress during k8sResource task. You can also configure it as per your needs using Groovy DSL configuration or by providing your own resource fragments.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here is an example of configuring Ingress using Groovy DSL configuration:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Enable Ingress Generation by enabling createExternalUrl property</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-properties\" data-lang=\"properties\">jkube.createExternalUrls = true</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Services which are exposed by Ingress should also contain <code>expose = true</code> label. If not, you can configure plugin to expose them like this:\n.Example for exposing Service for Ingress</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    enricher {\n        config {\n            \"jkube-service\" {\n                expose = \"true\"\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Ingress Configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    ingress {\n      ingressTlsConfigs = [{ <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n        hosts = [\"foo.bar.com\"]\n        secretName = \"testsecret-tls\"\n      }]\n      ingressRules = [{\n        host = \"foo.bar.com\" <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n        paths = [{\n          pathType = \"Prefix\" <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n          path = \"/foo\" <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n          serviceName = \"service1\" <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n          servicePort = \"8080\" <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n        }]\n      }]\n    }\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td><a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/#tls\">Ingress TLS</a> Configuration to specify Secret that contains TLS private key and certificate</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Host names, can be precise matches or a wildcard. See <a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/#hostname-wildcards\">Kubernetes Ingress Hostname</a> documentation for more details</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td><a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types\">Ingress Path Type</a>, Can be one of <code>ImplementationSpecific</code>, <code>Exact</code> or <code>Prefix</code></td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>Ingress path corresponding to provided <code>service.name</code></td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td>Service Name corresponding to path</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td>Service Port corresponding to path</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>For more information, please see <a href=\"#ingress-groovy-configuration\">Ingress Configuration</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>You can create Ingress using yaml fragment also. You would need to place a fragment of yaml in <code>src/main/jkube</code> directory like this:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Ingress fragment Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">apiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n  name: tls-example-ingress\nspec:\n  tls:\n  - hosts:\n    - https-example.foo.com\n    secretName: testsecret-tls\n  rules:\n  - host: https-example.foo.com\n    http:\n      paths:\n      - path: /\n        pathType: Prefix\n        backend:\n          service:\n            name: service1\n            port:\n              number: 80</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"serviceaccount-generation\">2.2.5. ServiceAccount Generation</h4>\n<div class=\"paragraph\">\n<p>You can configure <code>resources</code> configuration to generate a ServiceAccount or configure an already existing ServiceAccount into your generated Deployment.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here is an example of Groovy DSL configuration to generate a ServiceAccount:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Creating ServiceAccount via Groovy DSL</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    serviceAccounts = [{\n      name = \"my-serviceaccount\" <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n      deploymentRef = \"my-deployment-name\" <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n    }]\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Name of ServiceAccount to be created</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Deployment which will be using this ServiceAccount</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>If you don&#8217;t want to generate ServiceAccount but just use an existing ServiceAccount in your Deployment. You can configure it via <code>serviceAccount</code> field in resource configuration. Here is an example:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Configuring already existing ServiceAccount into generated Deployment</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    serviceAccount = \"my-existing-serviceaccount\"\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p><strong>Service Account Resource fragment</strong>:</p>\n</div>\n<div class=\"paragraph\">\n<p>If you don&#8217;t want to use Groovy DSL configuration, you can provide a resource fragment for ServiceAccount resource. Here is how it would look like:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">ServiceAccount resource fragment</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: build-robot</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"dockerfile-scenario\">2.3. Using Dockerfile</h3>\n<div class=\"paragraph\">\n<p>You can build a container image and deploy to Kubernetes with kubernetes-gradle-plugin by just providing a <a href=\"#external-dockerfile\">Dockerfile</a>.\nkubernetes-gradle-plugin builds a container image based on your Dockerfile and generates\nopinionated Kubernetes manifests by inspecting it.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"simple-dockerfile-mode-scenario\">2.3.1. Placing Dockerfile in project root directory</h4>\n<div class=\"paragraph\">\n<p>You can place the Dockerfile in the project root directory along with\n<code>build.gradle</code>.\nkubernetes-gradle-plugin detects it and automatically builds an image based on this Dockerfile.\nThere is no need to provide any sort of configuration apart from Dockerfile and project root directory as docker context directory.\nThe Image is created with an opinionated name from group, artifact and version.\nThe name can be overridden by using the <code>jkube.image.name</code> property.\nRead <a href=\"#simple-dockerfile-build\">Simple Dockerfile</a> section for more details.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"docker-file-provided-mode-scenario\">2.3.2. Placing Dockerfile in some other directory</h4>\n<div class=\"paragraph\">\n<p>You can choose to place your Dockerfile at some other location.\nBy default, the plugin assumes it to be <code>src/main/docker</code>, but you&#8217;ll need to configure docker context directory in plugin configuration.\nWhen not specified, context directory is assumed to be Dockerfile&#8217;s parent directory.\nYou can take a look at <a href=\"https://github.com/eclipse/jkube/tree/master/quickstarts/gradle/docker-file-provided-docker-file\">Docker File Provided Quickstarts</a> for more details.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"docker-file-mode-include-exclude\">2.3.3. Controlling what gets copied to image</h4>\n<div class=\"paragraph\">\n<p>When using Dockerfile mode, every file and directory present in the Docker build context directory\ngets copied to the created Docker image.\nIn case you want to ignore some files, or you want to include only a specific set of files,\nthe kubernetes-gradle-plugin provides the following options to achieve this:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"#ex-build-dockerinclude\"><code>.jkube-dockerinclude</code></a> : Include only a specific set of files specified in this file</p>\n</li>\n<li>\n<p><a href=\"#ex-build-dockerexclude\"><code>.jkube-dockerexclude</code></a> : Exclude a certain set of files from being copied into container image</p>\n</li>\n<li>\n<p><a href=\"#ex-build-dockerexclude\"><code>.jkube-dockerignore</code></a>  : Same as <code>.jkube-dockerexclude</code>, ignore certain files from being copied into container image</p>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"docker-file-mode-property-placeholders\">2.3.4. Using Property placeholders in Dockerfiles</h4>\n<div class=\"paragraph\">\n<p>You can reference properties in your Dockerfiles using standard maven property placeholders <code>${*}</code>. For example, if you have a property in your <code>gradle.properties</code> like this:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">gradle.properties</div>\n<div class=\"content\">\n<pre>fromImage = fabric8/s2i-java</pre>\n</div>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Dockerfile</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-dockerfile\" data-lang=\"dockerfile\">FROM ${fromImage}:latest-java11</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>You can override placeholders using the filter field in image build configuration, see <a href=\"#build-filtering\">Build Filtering</a> for more details.</p>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"kubernetes-resource-fragments\">2.4. Kubernetes Resource Fragments</h3>\n<div class=\"paragraph\">\n<p>You can also use an external configuration in form of YAML resource descriptors which are located in the  <code>src/main/jkube</code> directory. Each resource gets its own file, which contains a skeleton of a resource descriptor. The plugin will pick up the resource, enrich it and then combine all to a single <code>kubernetes.yml</code> and <code>openshift.yml</code> file. Within these descriptor files you are can freely use any Kubernetes feature.</p>\n</div>\n<div class=\"paragraph\">\n<p>Let&#8217;s have a look at an example from\n<a href=\"https://github.com/eclipse/jkube/tree/master/quickstarts/gradle/external-resources\">quickstarts/gradle/external-resources</a>.\nThis is a plain Spring Boot application, whose images are auto generated like in case of no configuration.\nThe resource fragments are in <code>src/main/jkube</code>.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example fragment \"deployment.yml\"</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">spec:\n  replicas: 1\n  template:\n    spec:\n      volumes:\n        - name: config\n          gitRepo:\n            repository: 'https://github.com/jstrachan/sample-springboot-config.git'\n            revision: 667ee4db6bc842b127825351e5c9bae5a4fb2147\n            directory: .\n      containers:\n        - volumeMounts:\n            - name: config\n              mountPath: /app/config\n          env:\n            - name: KUBERNETES_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n      serviceAccount: ribbon</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>As you can see, there is no <code>metadata</code> section as would be expected for Kubernetes resources because it will be automatically added by the <code>kubernetes-gradle-plugin</code>. The object&#8217;s <code>Kind</code>, if not given, is automatically derived from the\nfilename. In this case, the <code>kubernetes-gradle-plugin</code> will create a <code>Deployment</code> because the file is called <code>deployment.yml</code>. Similar mappings between file names and resource type exist for each supported resource kind, the\ncomplete list of which (along with associated abbreviations) can be found in the <a href=\"#appendix-kind-mapping\">Kind Filename Mapping</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Additionally, if you name your fragment using a name prefix followed by a dash and the mapped file name, the plugin will automatically use that name for your resource. So, for example, if you name your deployment fragment\n<code>myapp-deployment.yml</code>, the plugin will name your resource <code>myapp</code>. In the absence of such provided name for your resource, a name will be automatically derived from your project&#8217;s metadata (in particular, its project <code>name</code> as specified in your <code>build.gradle</code>).</p>\n</div>\n<div class=\"paragraph\">\n<p>No image is also referenced in this example because the plugin also fills in the image details based on the configured image you are building with (either from a generator or from a dedicated image plugin configuration, as seen before).</p>\n</div>\n<div class=\"paragraph\">\n<p>Enrichment of resource fragments can be fine-tuned by using profile sub-directories. For more details see <a href=\"#profiles\">Profiles</a>.</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"tasks\">3. Tasks Overview</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>This plugin supports a rich set for providing a smooth Java developer experience.\nThese tasks can be categorized in multiple groups:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"#tasks-build\">Build and Deployment tasks</a> are all about creating and managing Kubernetes build artifacts like Docker images or S2I builds.</p>\n</li>\n<li>\n<p><a href=\"#tasks-develop\">Development tasks</a> target help not only in developing resource descriptors to the development cluster but also to manage the lifecycle of the development cluster as well.</p>\n</li>\n</ul>\n</div>\n<table id=\"tasks-build\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 1. Build &amp; Deployment Tasks</caption>\n<colgroup>\n<col style=\"width: 25%;\">\n<col style=\"width: 75%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Task</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeBuild\"><strong>k8sBuild</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Build images</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubePush\"><strong>k8sPush</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Pushes the built images to the container image registry</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeResource\"><strong>k8sResource</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generate resource manifests for your application</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeApply\"><strong>k8sApply</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Applies the generated resources to the connected cluster</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeHelm\"><strong>k8sHelm</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generate Helm charts for your application</p></td>\n</tr>\n</tbody>\n</table>\n<table id=\"tasks-develop\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 2. Development Tasks</caption>\n<colgroup>\n<col style=\"width: 25%;\">\n<col style=\"width: 75%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Task</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeDebug\"><strong>k8sDebug</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Debug your Java app running on the cluster</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeLog\"><strong>k8sLog</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Show the logs of your Java app running on the cluster</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeUndeploy\"><strong>k8sUndeploy</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Deletes the kubernetes resources that you deployed via the <a href=\"#jkubeApply\"><strong>k8sApply</strong></a> task</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"sect2\">\n<h3 id=\"task-overview-build\">3.1. Build And Deployment Tasks</h3>\n<div class=\"sect3\">\n<h4 id=\"jkubeBuild\">3.1.1. <strong>k8sBuild</strong></h4>\n<div class=\"paragraph\">\n<p>This task is for building container images for your application.</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"build-kubernetes\">Kubernetes Build</h5>\n<div class=\"paragraph\">\n<p>A normal Docker build is performed by default.For Kubernetes builds the kubernetes-gradle-plugin uses the Docker remote API so the URL of your Docker Daemon must be specified.The URL can be specified by the dockerHost or machine configuration, or by the <code>DOCKER_HOST</code> environment variable.</p>\n</div>\n<div class=\"paragraph\">\n<p>The Docker remote API supports communication via SSL and authentication with certificates.The path to the certificates can be specified by the certPath or machine configuration, or by the <code>DOCKER_CERT_PATH</code> environment variable.</p>\n</div>\n<div class=\"paragraph\">\n<p>If you don&#8217;t have access to docker daemon, you can change build strategy using <code>buildStrategy</code> option in Groovy configuration like this:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example of overriding default build strategy</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    buildStrategy = 'jib'\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>These are the different options supported by <code>buildStrategy</code>:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 3. JKube Build Strategies</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildStrategy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Description</strong></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>docker</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Docker build with a binary source</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jib</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Deamonless container image creation using <a href=\"https://github.com/GoogleContainerTools/jib\">JIB</a> build</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>kubernetes-gradle-plugin by default tries to build up an opinionated <a href=\"#config-image\">Image Configuration</a> by inspecting <code>build.gradle</code>.\nYou can also provide your own <a href=\"#dockerfile-scenario\">Dockerfile</a> or provide Custom ImageConfiguration via <a href=\"#groovy-scenario-image\">Groovy DSL configuration</a>.</p>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubePush\">3.1.2. <strong>k8sPush</strong></h4>\n<div class=\"paragraph\">\n<p>This task uploads images to the registry which have a <code>build</code> configuration section.\nThe images to push can be restricted with the global option <code>filter</code> (see <a href=\"#build-configuration\">Build Goal Configuration</a> for details).\nThe registry to push is by default <code>docker.io</code> but can be specified as part of the images&#8217;s <code>name</code> the Docker way.\nE.g. <code>docker.test.org:5000/data:1.5</code> will push the image <code>data</code> with tag <code>1.5</code> to the registry <code>docker.test.org</code> at port\n<code>5000</code>.\nRegistry credentials (i.e. username and password) can be specified in multiple ways as described in section <a href=\"#authentication\">Authentication</a>.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeResource\">3.1.3. <strong>k8sResource</strong></h4>\n<div class=\"paragraph\">\n<p>This task generates Kubernetes resources based on your project.\nIt can either be opinionated defaults or based on the configuration provided in Groovy DSL configuration or resource fragments in <code>src/main/jkube</code>.\nGenerated resources are in <code>build/classes/java/main/META-INF/jkube/kubernetes</code> directory.\nYou can find all Groovy DSL configuration options for k8sResource in <a href=\"#kuberetes-resource-configuration\">Kubernetes Resource configuration</a> section.</p>\n</div>\n<div class=\"paragraph\">\n<p>Resource task also validates the generated resource descriptors using API specification of <a href=\"https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json\">Kubernetes</a>.\nYou can see configuration options regarding Kubernetes resource validation in <a href=\"#global-configuration\">Global Configuration</a> section.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeApply\">3.1.4. <strong>k8sApply</strong></h4>\n<div class=\"paragraph\">\n<p>This task applies the resources created with <a href=\"#jkubeResource\"><strong>k8sResource</strong></a> to a connected Kubernetes cluster.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sApply</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeHelm\">3.1.5. <strong>k8sHelm</strong></h4>\n<div class=\"paragraph\">\n<p>This task is for creating\n<a href=\"https://helm.sh/docs/topics/charts\">Helm charts</a>\nfor your Gradle project so that you can install, update or delete your app in Kubernetes\nusing <a href=\"https://github.com/helm/helm\">Helm</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>For creating a Helm chart you simply call <code>k8sHelm</code> task on the command line:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sResource k8sHelm</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The <code>k8sResource</code> goal is required to create the resource descriptors which are included in the Helm chart.\nIf you have already built the resource then you can omit this task.</p>\n</div>\n<div class=\"paragraph\">\n<p>The configuration is defined in a <code>helm</code> section within the plugin&#8217;s configuration:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example Helm configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  helm {\n    chart = 'Jenkins'\n    keywords = ['ci', 'cd', 'server']\n    dependencies = [{\n      name = 'ingress-nginx'\n      version = '1.26.0'\n      repository = 'https://kubernetes.github.io/ingress-nginx'\n    }]\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This configuration section knows the following sub-elements in order to configure your Helm chart.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 4. Helm configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>chart</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart name.</p>\n<p class=\"tableblock\">Defaults to project name.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.chart</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>version</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart SemVer version.</p>\n<p class=\"tableblock\">Defaults to project version</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.version</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>description</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart single-sentence description.</p>\n<p class=\"tableblock\">Defaults to project description.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.description</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>home</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart URL for this project&#8217;s home page.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.home</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>sources</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart list of URLs to source code for this project.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>maintainers</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart list of maintainers (name+email).</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>icon</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart URL to an SVG or PNG image to be used as an icon, default is extracted from the kubernetes manifest\n  (<code>kubernetes.yml</code>) <code>jkube.io/iconUrl</code> annotation if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.icon</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>keywords</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Comma separated list of keywords to add to the chart.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>engine</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The template engine to use.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>additionalFiles</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The list of additional files to be included in the Chart archive. Any file named <code>README</code> or <code>LICENSE</code> will <strong>always</strong>\n  be included by default.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>type</strong> / <strong>types</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Platform for which to generate the chart. By default this is <code>kubernetes</code>, but can be also <code>openshift</code> for using\n  OpenShift specific resources in the chart. You can also add both values as a comma separated list.</p>\n<p class=\"tableblock\">  <em>Please note that there is no OpenShift support yet for charts, so this is experimental.</em></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.type</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>sourceDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to find the resource descriptors generated with <code>k8sResource</code>.\n  By default this is <code>${basedir}/build/classes/java/main/classes/META-INF/jkube</code>, which is also the output directory used by <code>k8sResource</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.sourceDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>outputDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to create the Helm chart, which is <code>${basedir}/build/jkube/helm</code> by default for Kubernetes\n  and <code>${basedir}/build/jkube/helmshift</code> for OpenShift.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.outputDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tarballOutputDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to create the the Helm chart archive, which is <code>${basedir}/build</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.tarballOutputDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>chartExtension</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Helm chart file extension (<code>tgz</code>, <code>tar.bz</code>, <code>tar.bzip2</code>, <code>tar.bz2</code>), default value is <code>tar.gz</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.chartExtension</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dependencies</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The list of dependencies for this chart</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>In a next step you can install this via the <a href=\"https://github.com/helm/helm/releases\">helm command line tool</a> as follows:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">helm install nameForChartInRepository build/jkube/helm/${chartName}/Kubernetes</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>or</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">helm install build/jkube/helm/${chartName}/Kubernetes --generate-name</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>In addition, this task will also create a tar-archive below <code>${basedir}/build</code> which contains the chart with its template.\nThis tar is added as an artifact with classifier <code>helm</code> to the build (<code>helmshift</code> for the OpenShift mode).</p>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"task-overview-develop\">3.2. Development Tasks</h3>\n<div class=\"sect3\">\n<h4 id=\"jkubeDebug\">3.2.1. <strong>k8sDebug</strong></h4>\n<div class=\"paragraph\">\n<p>This task enables debugging in your Java app and then port forwards from localhost to the latest running pod of your app so that you can easily debug your app from your Java IDE.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sDebug</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then follow the on screen instructions.</p>\n</div>\n<div class=\"paragraph\">\n<p>The default debug port is <code>5005</code>.If you wish to change the local port to use for debugging then pass in the <code>jkube.debug.port</code> parameter:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sDebug -Djkube.debug.port=8000</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then in your IDE you start a Remote debug execution using this remote port using localhost and you should be able to set breakpoints and step through your code.</p>\n</div>\n<div class=\"paragraph\">\n<p>This lets you debug your apps while they are running inside a Kubernetes cluster - for example if you wish to debug a REST endpoint while another pod is invoking it.</p>\n</div>\n<div class=\"paragraph\">\n<p>Debug is enabled via the <code>JAVA_ENABLE_DEBUG</code> environment variable being set to <code>true</code>.This environment variable is used for all the standard Java docker images used by Spring Boot, flat classpath and executable JAR projects and Wildfly Swarm.If you use your own custom docker base image you may wish to also respect this environment variable too to enable debugging.</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"_speeding_up_debugging\">Speeding up debugging</h5>\n<div class=\"paragraph\">\n<p>By default the <code>k8sDebug</code> task has to edit your Deployment to enable debugging then wait for a pod to start.It might be in development you frequently want to debug things and want to speed things up a bit.</p>\n</div>\n<div class=\"paragraph\">\n<p>If so you can enable debug mode for each build via the <code>jkube.debug.enabled</code> property.</p>\n</div>\n<div class=\"paragraph\">\n<p>e.g. you can pass this property on the command line:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sResource k8sApply -Djkube.debug.enabled=true</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then whenever you type the <code>k8sDebug</code> task there is no need for the gradle task to edit the <code>Deployment</code> and wait for a pod to restart; we can immediately start debugging when you type:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sDebug</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect4\">\n<h5 id=\"_debugging_with_suspension\">Debugging with suspension</h5>\n<div class=\"paragraph\">\n<p>The <code>k8sDebug</code> task allows to attach a remote debugger to a running container, but the application is free to execute when the debugger is not attached.\nIn some cases, you may want to have complete control on the execution, e.g. to investigate the application behavior at startup. This can be done using the <code>jkube.debug.suspend</code> flag:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sDebug -Djkube.debug.suspend</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The suspend flag will set the <code>JAVA_DEBUG_SUSPEND</code> environment variable to <code>true</code> and <code>JAVA_DEBUG_SESSION</code> to a random number in your deployment.\nWhen the <code>JAVA_DEBUG_SUSPEND</code> environment variable is set, standard docker images will use <code>suspend=y</code> in the JVM startup options for debugging.</p>\n</div>\n<div class=\"paragraph\">\n<p>The <code>JAVA_DEBUG_SESSION</code> environment variable is always set to a random number (each time you run the debug task with the suspend flag) in order to tell Kubernetes to restart the pod.\nThe remote application will start only after a remote debugger is attached. You can use the remote debugging feature of your IDE to connect (on <code>localhost</code>, port <code>5005</code> by default).</p>\n</div>\n<div class=\"admonitionblock warning\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-warning\" title=\"Warning\"></i>\n</td>\n<td class=\"content\">\nThe <code>jkube.debug.suspend</code> flag will disable readiness probes in the Kubernetes deployment in order to start port-forwarding during the early phases of application startup\n</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeLog\">3.2.2. <strong>k8sLog</strong></h4>\n<div class=\"paragraph\">\n<p>This task tails the log of the app that you deployed via the <a href=\"#jkube:deploy\">k8sApply</a> task</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>You can then terminate the output by hitting <code>Ctrl+C</code></p>\n</div>\n<div class=\"paragraph\">\n<p>If you wish to get the log of the app and then terminate immediately then try:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog -Djkube.log.follow=false</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This lets you pipe the output into grep or some other tool</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog -Djkube.log.follow=false | grep Exception</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If your app is running in multiple pods you can configure the pod name to log via the <code>jkube.log.pod</code> property, otherwise it defaults to the latest pod:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog -Djkube.log.pod=foo</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If your pod has multiple containers you can configure the container name to log via the <code>jkube.log.container</code> property, otherwise it defaults to the first container:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog -Djkube.log.container=foo</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeUndeploy\">3.2.3. <strong>k8sUndeploy</strong></h4>\n<div class=\"paragraph\">\n<p>This task is for deleting the kubernetes resources that you deployed via the  <a href=\"#jkubeApply\">k8sApply</a> or <a href=\"#jkube:deploy\">k8sDeploy</a> tasks.</p>\n</div>\n<div class=\"paragraph\">\n<p>It iterates through all the resources generated by the <a href=\"#jkubeResource\">k8sResource</a> task and deletes them from your current Kubernetes cluster.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sUndeploy</code></pre>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"groovy-configuration\">4. Gradle Groovy DSL Configuration</h2>\n<div class=\"sectionbody\">\n<div class=\"sect2\">\n<h3 id=\"global-configuration\">4.1. Global Configuration</h3>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 5. Global configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>apiVersion</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Use this variable if you are using an older version of docker not compatible with the current default use to\ncommunicate with the server.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.apiVersion</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>authConfig</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Authentication information when pulling from or pushing to Docker registry. There is a dedicated section\n  <a href=\"#authentication\">Authentication</a> for how to do security.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>access</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Group of configuration parameters to connect to Kubernetes/OpenShift cluster.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>autoPull</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Decide how to pull missing base images or images to start:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>on</code> : Automatic download any missing images (default)</p>\n</li>\n<li>\n<p><code>off</code> : Automatic pulling is switched off</p>\n</li>\n<li>\n<p><code>always</code> : Pull images always even when they already exist locally</p>\n</li>\n<li>\n<p><code>once</code> : For multi-module builds images are only checked once and pulled for the whole build.</p>\n</li>\n</ul>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.autoPull</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildRecreate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>If the effective build mode is <code>openshift</code> then this option decides how the OpenShift resource objects\nassociated with the build should be treated when they already exist:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>buildConfig</code> or <code>bc</code> : Only the BuildConfig is recreated</p>\n</li>\n<li>\n<p><code>imageStream</code> or <code>is</code> : Only the ImageStream is recreated</p>\n</li>\n<li>\n<p><code>all</code> : Both, BuildConfig and ImageStream are recreated</p>\n</li>\n<li>\n<p><code>none</code> : Neither BuildConfig nor ImageStream is recreated</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The default is <code>none</code>. If you provide the property without value then <code>all</code> is assumed, so everything gets recreated.</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.recreate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildSourceDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default directory that contains the assembly descriptor(s) used by the plugin. The default value is <code>src/main/docker</code>.\nThis option is only relevant for the <code>k8sBuild</code> task.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.source.dir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildStrategy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Defines what build strategy to choose while building container image.\nPossible values are <code>docker</code> and <code>jib</code> out of which <code>docker</code> is default.</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.strategy</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>certPath</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to SSL certificate when SSL is used for communicating with the Docker daemon. These certificates are normally\nstored in <code>~/.docker/</code>. With this configuration the path can be set explicitly. If not set, the fallback is first\ntaken from the environment variable <code>DOCKER_CERT_PATH</code> and then as last resort <code>~/.docker/</code>. The keys in this are\nexpected with it standard names <code>ca.pem</code>, <code>cert.pem</code> and <code>key.pem</code>.\nPlease refer to the <a href=\"https://docs.docker.com/articles/https\">Docker documentation</a> for more information about SSL\nsecurity with Docker.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.certPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>createNewResources</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Create new Kubernetes resources.</p>\n<p class=\"tableblock\">Defaults to <code>true</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.create</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>debugSuspend</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Disables readiness probes in Kubernetes Deployment in order to start port forwarding during early phases of application startup.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.debug.suspend</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>deletePodsOnReplicationControllerUpdate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Delete all the pods if we update a Replication Controller.</p>\n<p class=\"tableblock\">Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.deletePods</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerHost</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>The URL of the Docker Daemon. If this configuration option is not given, then the optional <code>&lt;machine&gt;</code> configuration\nsection is consulted. The scheme of the URL can be either given directly as <code>http</code> or <code>https</code>\ndepending on whether plain HTTP communication is enabled or SSL should\nbe used. Alternatively the scheme could be <code>tcp</code> in which case the\nprotocol is determined via the IANA assigned port: 2375 for <code>http</code>\nand 2376 for <code>https</code>. Finally, Unix sockets are supported by using\nthe scheme <code>unix</code> together with the filesystem path to the unix socket.</p>\n</div>\n<div class=\"paragraph\">\n<p>The discovery sequence used by the docker-maven-plugin to determine\nthe URL is:</p>\n</div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>\n<p>Value of <strong>dockerHost</strong> (<code>jkube.docker.host</code>)</p>\n</li>\n<li>\n<p>The Docker host associated with the docker-machine named in <code>&lt;machine&gt;</code>, i.e. the <code>DOCKER_HOST</code> from <code>docker-machine env</code>.</p>\n</li>\n<li>\n<p>The value of the environment variable <code>DOCKER_HOST</code>.</p>\n</li>\n<li>\n<p><code>unix:///var/run/docker.sock</code> if it is a readable socket.</p>\n</li>\n</ol>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.host</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>filter</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">In order to temporarily restrict the operation of plugin tasks this configuration option can be used.\nTypically this will be set via the system property <code>jkube.image.filter</code> when Gradle is called. The value can be a single\nimage name (either its alias or full name) or it can be a comma separated list with multiple image names. Any name\nwhich doesn&#8217;t refer an image in the configuration will be ignored.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.image.filter</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>failOnNoKubernetesJson</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Fail if there is no kubernetes json present.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.failOnNoKubernetesJson</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>failOnValidationError</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If value is set to <code>true</code> then any validation error will block the plugin execution. A warning will be printed\notherwise.</p>\n<p class=\"tableblock\">  Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.failOnValidationError</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ignoreServices</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Ignore Service resources while applying resources. This is particularly useful when in recreate mode to let you easily recreate all the ReplicationControllers and Pods but leave any service definitions alone to avoid changing the portalIP addresses and breaking existing pods using the service.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.ignoreServices</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"image-pull-policy\"></a> <strong>imagePullPolicy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Specify whether images should be pull when looking for base images while building or images for starting.\nThis property can take the following values (case insensitive):</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>IfNotPresent</code>: Automatic download any missing images (default)</p>\n</li>\n<li>\n<p><code>Never</code> : Automatic pulling is switched off always</p>\n</li>\n<li>\n<p><code>Always</code> : Pull images always even when they already exist locally.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>By default a progress meter is printed out on the console, which is omitted when using Maven in batch mode (option <code>-B</code>). A very simplified progress meter is provided when using no color output (i.e. with <code>-Djkube.useColor=false</code>).</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.imagePullPolicy</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>interpolateTemplateParameters</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Interpolate parameter values from <code>*template.yml</code> fragments in the generated resource list (<code>kubernetes.yml</code>).</p>\n<p class=\"tableblock\">  This is useful when using JKube in combination with Helm.</p>\n<p class=\"tableblock\">  Placeholders for variables defined in template files can be used in the different resource fragments. Helm generated\n  charts will contain these placeholders/parameters.</p>\n<p class=\"tableblock\">  For <code>resource</code> task, these placeholders are replaced in the\n  aggregated resource list YAML file (not in the individual generated resources) if this option is enabled.</p>\n<p class=\"tableblock\">  Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.interpolateTemplateParameters</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>jsonLogDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The folder we should store any temporary json files or results</p>\n<p class=\"tableblock\">Defaults to <code>${project.rootDir}/build/jkube/applyJson</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.jsonLogDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>kubernetesManifest</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The generated kubernetes YAML file.</p>\n<p class=\"tableblock\">  Defaults to <code>${basedir}/build/META-INF/jkube/kubernetes.yml</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.kubernetesManifest</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>kubernetesTemplate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">File or directory containing the Kubernetes YAML files to be included as Chart templates.</p>\n<p class=\"tableblock\">Defaults to <code>${basedir}/build/classes/java/main/META-INF/jkube/kubernetes</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.kubernetesTemplate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>localDebugPort</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default port available for debugging your application inside Kubernetes.</p>\n<p class=\"tableblock\">Defaults to <code>5005</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.debug.port</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logFollow</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Get follow logs for your application inside Kubernetes.</p>\n<p class=\"tableblock\">  Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.log.follow</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logContainerName</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Get logs of some specific container inside your application Deployment.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.log.container</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logPodName</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Get logs of some specific pod inside your application Deployment.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.log.pod</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>machine</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Docker machine configuration.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>maxConnections</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Number of parallel connections are allowed to be opened to the Docker Host. For parsing log output, a connection needs\nto be kept open (as well for the wait features), so don&#8217;t put that number to low. Default is 100 which should be\nsuitable for most of the cases.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.maxConnections</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>mergeWithDekorate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">When resource generation is delegated to Dekorate, should JKube resources be merged with Dekorate generated ones.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.mergeWithDekorate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>outputDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default output directory to be used by this plugin.\nThe default value is <code>build/docker</code> and is only used for the task <code>k8sBuild</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.target.dir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>offline</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether to try detecting Kubernetes Cluster or stay offline.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.offline</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>profile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Profile to which contains enricher and generators configuration. See <a href=\"#profiles\">Profiles</a> for details.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.profile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>pushRegistry</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The registry to use when pushing the image. See <a href=\"#registry\">Registry Handling</a> for\nmore details.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.push.registry</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>recreate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Update resources by deleting them first and then creating them again.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.recreate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>registry</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specify globally a registry to use for pulling and pushing images. See <a href=\"#registry\">Registry handling</a> for details.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.registry</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>pushRetries</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How often should a push be retried before giving up. This useful for flaky registries which tend to return 500 error codes from time to time.</p>\n<p class=\"tableblock\">Defaults to 0.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.push.retries</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>resourceEnvironment</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Environment name where resources are placed. For example, if you set this property to dev and resourceDir is the\ndefault one, plugin will look at <code>src/main/jkube/dev</code>.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.environment</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>resourceSourceDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Folder where to find project specific files.</p>\n<p class=\"tableblock\">  Defaults to <code>${project.rootDir}/src/main/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.resourceDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>resourceTargetDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The generated Kubernetes manifests target directory.</p>\n<p class=\"tableblock\">  Defaults to <code>${basedir}/build/classes/java/main/META-INF/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.targetDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>rollingUpgrades</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Use Rolling Upgrades to apply changes.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.rolling</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>servicesOnly</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Only process services so that those can be recursively created/updated first before creating/updating any pods and Replication Controllers.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.servicesOnly</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>serviceUrlWaitTimeSeconds</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Seconds to wait for a URL to be generated for a service</p>\n<p class=\"tableblock\">Defaults to <code>5</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.serviceUrl.waitSeconds</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skip</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">With this parameter the execution of this plugin can be skipped completely.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipApply</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set no resource maniefst would be applied to connected Kubernetes cluster.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.apply</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipBuild</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set not images will be build (which implies also <em>skip.tag</em>) with <code>k8sBuild</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.build</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipTag</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code> this plugin won&#8217;t add any tags to images that have been built with <code>k8sBuild</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.tag</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipMachine</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Skip using docker machine in any case</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.skip.machine</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipPush</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to true the plugin won’t push any images that have been built.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.push</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipResourceValidation</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If value is set to <code>true</code> then resource validation is skipped. This may be useful if resource validation is failing\nfor some reason but you still want to continue the deployment.</p>\n<p class=\"tableblock\">  Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skipResourceValidation</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipTag</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to true this plugin won’t push any tags</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.tag</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>useProjectClassPath</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Should we use the project&#8217;s compile time classpath to scan for additional enrichers/generators.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.useProjectClassPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>verbose</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Boolean attribute for switching on verbose output like the build steps when doing a Docker build. Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.verbose</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>workDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The JKube working directory. Defaults to <code>${project.build.directory}/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.workDir</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"_image_configuration\">4.2. Image Configuration</h3>\n<div class=\"paragraph\">\n<p>The configuration how images should be created are defined in a dedicated <code>images</code> sections. These are specified for each image within the <code>images</code> element of the configuration with one <code>image</code> element per image to use.</p>\n</div>\n<div class=\"paragraph\">\n<p>The <code>image</code> element can contain the following sub elements:</p>\n</div>\n<table id=\"config-image\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 6. Image Configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#image-name\"><strong>name</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Each <code>image</code> configuration has a mandatory, unique docker\nrepository <em>name</em>. This can include registry and tag parts, but also placeholder parameters. See below for a detailed explanation.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>alias</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Shortcut name for an image which can be used for\nidentifying the image within this configuration. This is used when\nlinking images together or for specifying it with the global <strong>image</strong> configuration element.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#registry\"><strong>registry</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Registry to use for this image. If the <code>name</code> already contains a registry this takes precedence. See <a href=\"#registry\">Registry handling</a> for more details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#config-image-build\"><strong>build</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Element which contains all the configuration aspects when doing a <a href=\"#jkubeBuild\">k8sBuild</a>. This element can be omitted if the image is only pulled from a registry e.g. as support for integration tests like database images.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>The <code>build</code> section is mandatory and is explained in <a href=\"#build-configuration\">below</a>.</p>\n</div>\n<div id=\"image-name\" class=\"paragraph\">\n<p>When specifying the image name in the configuration with the <code>name</code> field you can use several placeholders which are replaced during runtime by this plugin. In addition you can use regular Gradle properties which are resolved by Gradle itself.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 7. Image Names</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Placeholder</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%g</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The last part of the Gradle group name, sanitized so that it can be used as username on GitHub. Only the part after the last dot is used. E.g. for a group id <code>org.eclipse.jkube</code> this placeholder would insert <code>jkube</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%a</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A sanitized version of the artefact id so that it can be used as part of an Docker image name. I.e. it is converted to all lower case (as required by Docker)</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%v</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The project version.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%l</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If the project version ends with <code>-SNAPSHOT</code> then this placeholder is <code>latest</code>, otherwise its the full version (same as <code>%v</code>)</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%t</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If the project version ends with <code>-SNAPSHOT</code> this placeholder resolves to <code>snapshot-&lt;timestamp&gt;</code> where timestamp has the date format <code>yyMMdd-HHmmss-SSSS</code> (eg <code>snapshot-</code>). This feature is especially useful during development in oder to avoid conflicts when images are to be updated which are still in use. You need to take care yourself of cleaning up old images afterwards, though.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"build-configuration\">4.3. Build Configuration</h3>\n<div id=\"build-overview\" class=\"paragraph\">\n<p>Here are different modes how images can be built:</p>\n</div>\n<div class=\"paragraph\">\n<p>When using this mode, the Dockerfile is created on the fly with all instructions extracted from the configuration given.</p>\n</div>\n<div id=\"external-dockerfile\" class=\"paragraph\">\n<div class=\"title\">External Dockerfile or Docker archive</div>\n<p>Alternatively an external Dockerfile template or Docker archive can be used. This mode is switched on by using one of these three configuration options within</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><strong>contextDir</strong> specifies docker build context if an external dockerfile is located outside of Docker build context. If not specified, Dockerfile&#8217;s parent directory is used as build context.</p>\n</li>\n<li>\n<p><strong>dockerFile</strong> specifies a specific Dockerfile path. The Docker build context directory is set to <code>contextDir</code> if given. If not the directory by default is the directory in which the Dockerfile is stored.</p>\n</li>\n<li>\n<p><strong>dockerArchive</strong> specifies a previously saved image archive to load directly. If a <code>dockerArchive</code> is provided, no <code>dockerFile</code> must be given.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>All paths can be either absolute or relative paths. A relative path is looked up in <code>$projectDir/src/main/docker</code> by default. You can make it easily an absolute path by using <code>$projectDir</code> in your configuration.</p>\n</div>\n<div class=\"paragraph\">\n<p>However, you need to add the files on your own in the Dockerfile with an <code>ADD</code> or <code>COPY</code> command.\nThe files of the assembly are stored in a build context relative directory <code>maven/</code> but can be changed by changing the assembly name with the option <code>name</code> in the assembly configuration.</p>\n</div>\n<div class=\"paragraph\">\n<p>E.g. the files can be added with\n.Example</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-dockerfile\" data-lang=\"dockerfile\">COPY maven/ /my/target/directory</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>so that the assembly files will end up in <code>/my/target/directory</code> within the container.</p>\n</div>\n<div class=\"paragraph\">\n<p>If this directory contains a <code>.jkube-dockerignore</code> (or alternatively, a <code>.jkube-dockerexclude</code> file), then it is used\nfor excluding files for the build. If the file doesn&#8217;t exist, or it&#8217;s empty, then there are no exclusions.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each line in this file is treated as an entry in the <code>excludes</code> assembly <code>fileSet</code> <a href=\"#build-assembly-inline\">configuration </a>.\nFiles can be referenced by using their relative path name.\nWildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</div>\n<div class=\"paragraph\">\n<p>It is similar to <code>.dockerignore</code> when using Docker but has a slightly different syntax (hence the different name).</p>\n</div>\n<div class=\"paragraph\">\n<p><a href=\"#ex-build-dockerexclude\">Example <code>.jkube-dockerexclude</code> or <code>.jkube-dockerignore</code></a> is an  example which excludes all compiled Java classes.</p>\n</div>\n<div id=\"ex-build-dockerexclude\" class=\"exampleblock\">\n<div class=\"title\">Example 1. Example <code>.jkube-dockerexclude</code> or <code>.jkube-dockerignore</code></div>\n<div class=\"content\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code>build/classes/**  <i class=\"conum\" data-value=\"1\"></i><b>(1)</b></code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Exclude all compiled classes</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If this directory contains a <code>.jkube-dockerinclude</code> file, then it is used for including only those files for the build.\nIf the file doesn&#8217;t exist or it&#8217;s empty, then everything is included.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each line in this file is treated as an entry in the <code>includes</code> assembly <code>fileSet</code> <a href=\"#build-assembly-inline\">configuration </a>.\nFiles can be referenced by using their relative path name.\nWildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</div>\n<div class=\"paragraph\">\n<p><a href=\"#ex-build-dockerinclude\">Example <code>.jkube-dockerinclude</code></a> shows how to include only jar file that have build to the Docker build context.</p>\n</div>\n<div id=\"ex-build-dockerinclude\" class=\"exampleblock\">\n<div class=\"title\">Example 2. Example <code>.jkube-dockerinclude</code></div>\n<div class=\"content\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code>build/libs/*.jar <i class=\"conum\" data-value=\"1\"></i><b>(1)</b></code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Only add jar file to you Docker build context.</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Except for the <a href=\"#build-assembly\">assembly configuration</a> all other configuration options are ignored for now.</p>\n</div>\n<div id=\"simple-dockerfile-build\" class=\"paragraph\">\n<div class=\"title\">Simple Dockerfile build</div>\n<p>When only a single image should be built with a Dockerfile no Groovy DSL configuration is needed at all.\nAll what need to be done is to place a <code>Dockerfile</code> into the top-level module directory, alongside to <code>build.gradle</code>.\nYou can still configure <a href=\"#global-configuration\">global aspects</a> in the plugin configuration, but as soon as you add an <code>image</code> in the Groovy DSL configuration, you need to configure also the build explicitly.</p>\n</div>\n<div class=\"paragraph\">\n<p>The image name is by default set from the Gradle coordinates (<code>%g/%a:%l</code>, see <a href=\"#image-name\">Image Name </a> for an explanation of the params which are essentially the Gradle&#8217;s group, project name and project version)\nThis name can be set with the property <code>jkube.image.name</code> in <code>gradle.properties</code>.</p>\n</div>\n<div id=\"build-filtering\" class=\"paragraph\">\n<div class=\"title\">Filtering</div>\n<p>kubernetes-gradle-plugin filters given Dockerfile with Gradle properties, much like the <code>maven-resource-plugin</code> does. Filtering is enabled by default and can be switched off with a build config <code>filter='false'</code>. Properties which we want to replace are specified with the <code>${..}</code> syntax.\nReplacement includes properties set in the build, command-line properties, and system properties. Unresolved properties remain untouched.</p>\n</div>\n<div class=\"paragraph\">\n<p>This partial replacement means that you can easily mix it with Docker build arguments and environment variable reference, but you need to be careful.\nIf you want to be more explicit about the property delimiter to clearly separate Docker properties and Gradle properties you can redefine the delimiter.\nIn general, the <code>filter</code> option can be specified the same way as delimiters in the resource plugin.\nIn particular,  if this configuration contains a * then the parts left, and right of the asterisks are used as delimiters.</p>\n</div>\n<div class=\"paragraph\">\n<p>For example, the default <code>filter='${*}'</code> parse Gradle properties in the format that we know.\nIf you specify a single character for <code>filter</code> then this delimiter is taken for both, the start and the end.\nE.g a <code>filter='@'</code> triggers on parameters in the format <code>@&#8230;&#8203;@</code>.\nUse something like this if you want to clearly separate from Docker builds args.\nThis form of property replacement works for Dockerfile only.\nFor replacing other data in other files targeted for the Docker image, please use the <a href=\"#build-assembly\">assembly configuration</a> with filtering to make them available in the docker build context.</p>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Example</div>\n<p>The following example replaces all properties in the format <code>@property@</code> within the Dockerfile.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = 'user/demo'\n            build {\n                filter = '@'\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>All build relevant configuration is contained in the <code>build</code> section\nof an image configuration. The following configuration options are supported:</p>\n</div>\n<table id=\"config-image-build\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 8. Build configuration (<a href=\"#config-image\">image</a>)</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#config-image-build-assembly\"><strong>assembly</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specifies the assembly configuration as described in <a href=\"#build-assembly\">Build Assembly</a></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-buildargs\"><strong>args</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Map specifying the value of <a href=\"https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg\">Docker build args</a>\nwhich should be used when building the image with an external Dockerfile which uses build arguments. The key-value syntax is the same as when defining Gradle properties (or <code>labels</code> or <code>env</code>).\nThis argument is ignored when no external Dockerfile is used. Build args can also be specified as properties as\ndescribed in <a href=\"#build-buildargs\">Build Args</a></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildOptions</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Map specifying the build options to provide to the docker daemon when building the image. These options map to the ones listed as query parameters in the\n<a href=\"https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#build-image-from-a-dockerfile\">Docker Remote API</a> and are restricted to simple options\n(e.g.: memory, shmsize). If you use the respective configuration options for build options natively supported by the build configuration (i.e. <code>noCache</code>, <code>cleanup=remove</code> for buildoption <code>forcerm=1</code> and <code>args</code> for build args) then these will override any corresponding options given here. The key-value syntax is the same as when defining environment variables or labels as described in <a href=\"#misc-env\">Setting Environment Variables and Labels</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>cleanup</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Cleanup dangling (untagged) images after each build (including any containers created from them). Default is <code>try</code> which tries to remove the old image, but doesn&#8217;t fail the build if this is not possible because e.g. the image is still used by a running container. Use <code>remove</code> if you want to fail the build and <code>none</code> if no cleanup is requested.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"context-dir\"></a><strong>contextDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to a directory used for the build&#8217;s context. You can specify the <code>Dockerfile</code> to use with <strong>dockerFile</strong>, which by default is the Dockerfile found in the <code>contextDir</code>. The Dockerfile can be also located outside of the <code>contextDir</code>, if provided with an absolute file path. See <a href=\"#external-dockerfile\">External Dockerfile</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-startup\"><strong>cmd</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A command to execute by default (i.e. if no command is provided when a container for this image is started). See <a href=\"#misc-startup\">Startup Arguments</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>compression</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The compression mode how the build archive is transmitted to the docker daemon (<code>k8sBuild</code>) and how docker build archives are attached to this build as sources. The value can be <code>none</code> (default), <code>gzip</code> or <code>bzip2</code>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerFile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to a <code>Dockerfile</code> which also triggers <em>Dockerfile mode</em>. See <a href=\"#external-dockerfile\">External Dockerfile</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerArchive</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to a saved image archive which is then imported. See <a href=\"#external-dockerfile\">Docker archive</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-startup\"><strong>entryPoint</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">An entrypoint allows you to configure a container that will run as an executable. See <a href=\"#misc-startup\">Startup Arguments</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-env\"><strong>env</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The environments as described in <a href=\"#misc-env\">Setting Environment Variables and Labels</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>filter</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Enable and set the delimiters for property replacements. By default properties in the format <code>${..}</code> are replaced with Gradle properties. You can switch off property replacement by setting this property to <code>false</code>. When using a single char like <code>@</code> then this is used as a delimiter (e.g <code>@&#8230;&#8203;@</code>). See <a href=\"#build-filtering\">Filtering</a> for more details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"build-config-from\"></a><strong>from</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The base image which should be used for this image. If not given this default to <code>busybox:latest</code> and is suitable for a pure data image.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"build-config-from-ext\"></a><strong>fromExt</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Extended definition for a base image. This field holds a map of defined in <code>key = \"value\"</code> format. The known keys are:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>name</code> : Name of the base image</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>A provided <code>from</code> takes precedence over the name given here. This tag is useful for extensions of this plugin.</p>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>imagePullPolicy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specific pull policy for the base image. This overwrites any global pull policy.\nSee the global configuration option <a href=\"#image-pull-policy\">imagePullPolicy</a> for the possible values and the default.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-env\"><strong>labels</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels  as described in <a href=\"#misc-env\">Setting Environment Variables and Labels</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>maintainer</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The author (<code>MAINTAINER</code>) field for the generated image</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>noCache</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Don&#8217;t use Docker&#8217;s build cache. This can be overwritten by setting a system property <code>docker.noCache</code> when running Gradle.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>cacheFrom</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A list of <code>image</code> elements specifying image names to use as cache sources.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>optimise</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">if set to true then it will compress all the <code>runCmds</code> into a single <code>RUN</code> directive so that only one image layer is created.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ports</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The exposed ports which is a list of <code>port</code> elements, one for each port to expose. Whitespace is trimmed from each element and empty elements are ignored. The format can be either pure numerical (\"8080\") or with the protocol attached (\"8080/tcp\").</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>shell</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Shell to be used for the <strong>runCmds</strong>. It contains <strong>arg</strong> elements which are defining the executable and its params.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>runCmds</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Commands to be run during the build process. It contains <strong>run</strong> elements which are passed to the shell. Whitespace is trimmed from each element and empty elements are ignored. The run commands are inserted right after the assembly and after <strong>workdir</strong> into the Dockerfile.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skip</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">if set to true disables building of the image. This config option is best used together with a gradle property</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipTag</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code> this plugin won&#8217;t add any tags to images.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tags</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of additional <code>tag</code> elements with which an image is to be tagged after the build. Whitespace is trimmed from each element and empty elements are ignored.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>user</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">User to which the Dockerfile should switch to the end (corresponds to the <code>USER</code> Dockerfile directive).</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>volumes</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of <code>volume</code> elements to create a container volume. Whitespace is trimmed from each element and empty elements are ignored.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>workdir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Directory to change to when starting the container.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"build-assembly\">4.4. Assembly</h3>\n<div class=\"paragraph\">\n<p>The <code>assembly</code> element within <code>build</code> element defines how build artifacts and other files\ncan be added to the Docker image.</p>\n</div>\n<table id=\"config-image-build-assembly\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 9. Assembly Configuration (<a href=\"#config-image\">image </a> : <a href=\"#config-image-build\">build </a>)</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>name</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Assembly name, which is <code>maven</code> by default. This name is used for the archives and directories created during the build.\n  This directory holds the files specified by the assembly. If an <a href=\"#external-dockerfile\">external Dockerfile</a> is used then\n  this name is also the relative directory which contains the assembly files.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>targetDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Directory under which the files and artifacts contained in the assembly will be copied within the container.\n  The default value for this is <code>${assembly.name}</code>, so <code>/maven</code> if <strong>name</strong> is not set to a different value.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-assembly-layer\"><strong>inline</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><em>Deprecated: Use layers instead</em>\n  Inlined assembly descriptor as described in <a href=\"#build-assembly-layer\">Assembly - Inline</a> below.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-assembly-layer\"><strong>layers</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Each of the layers that the assembly will contain as described in\n  <a href=\"#build-assembly-layer\">Assembly - Layer</a> below.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>exportTargetDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specification whether the <code>targetDir</code> should be exported as a volume. This value is <code>true</code> by default except in the\n  case the <code>targetDir</code> is set to the container root (<code>/</code>). It is also <code>false</code> by default when a base image is used with\n  <code>from</code> since exporting makes no sense in this case and will waste disk space unnecessarily.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>excludeFinalOutputArtifact</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">By default, the project&#8217;s final artifact will be included in the assembly, set this flag to true in case the\n  artifact should be excluded from the assembly.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>mode</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Mode how the how the assembled files should be collected:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>dir</code> : Files are simply copied (default),</p>\n</li>\n<li>\n<p><code>tar</code> : Transfer via tar archive</p>\n</li>\n<li>\n<p><code>tgz</code> : Transfer via compressed tar archive</p>\n</li>\n<li>\n<p><code>zip</code> : Transfer via ZIP archive</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The archive formats have the advantage that file permission can be preserved better (since the copying is independent from the underlying files systems)</p>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>permissions</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Permission of the files to add:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>ignore</code> to use the permission as found on files regardless on any\nassembly configuration</p>\n</li>\n<li>\n<p><code>keep</code> to respect the assembly provided permissions</p>\n</li>\n<li>\n<p><code>exec</code> for setting the executable bit on all files (required for Windows when using an assembly mode <code>dir</code>)</p>\n</li>\n<li>\n<p><code>auto</code> to let the plugin select <code>exec</code> on Windows and <code>keep</code> on others.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p><code>keep</code> is the default value.</p>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tarLongFileMode</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Sets the TarArchiver behaviour on file paths with more than 100 characters length. Valid values are: \"warn\"(default), \"fail\", \"truncate\", \"gnu\", \"posix\", \"posix_warn\" or \"omit\"</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>user</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>User and/or group under which the files should be added. The user must already exist in the base image.</p>\n</div>\n<div class=\"paragraph\">\n<p>It has the general format <code>user[:group[:run-user]]</code>. The user and group can be given either as numeric user- and group-id or as names. The group id is optional.</p>\n</div>\n<div class=\"paragraph\">\n<p>If a third part is given, then the build changes to user <code>root</code> before changing the ownerships, changes the ownerships and then change to user <code>run-user</code> which is then used for the final command to execute. This feature might be needed, if the base image already changed the user (e.g. to 'jboss') so that a <code>chown</code> from root to this user would fail.</p>\n</div>\n<div class=\"paragraph\">\n<p>For example, the image <code>jboss/wildfly</code> use a \"jboss\" user under which all commands are executed. Adding files in Docker always happens under the UID root. These files can only be changed to \"jboss\" is the <code>chown</code> command is executed as root. For the following commands to be run again as \"jboss\" (like the final <code>standalone.sh</code>), the plugin switches back to user <code>jboss</code> (this is this \"run-user\") after changing the file ownership. For this example a specification of\n<code>jboss:jboss:jboss</code> would be required.</p>\n</div></div></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>In the event you do not need to include any artifacts with the image, you may safely omit this element from the configuration.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"build-assembly-layer\">4.4.1. Assembly - Inline/Layer</h4>\n<div class=\"paragraph\">\n<p>Inlined assembly description with a format very similar to\n<a href=\"https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html\">Maven Assembly Plugin</a>.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Partial configuration example of an inline/layer element</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">assembly {\n    targetDir = \"/deployments\"\n    layers = [{\n        fileSets = [{\n            directory = file(\"${project.rootDir}/build/dependencies\")\n            outputDirectory = \"static\"\n       }]\n    }]\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The <code>layers</code> element within the <code>assembly</code> element can have one or more\n<code>layer</code> elements with a Groovy DSL structure that supports the following configuration options:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 10. Assembly - Inline/Layer (<a href=\"#config-image\">image </a> : <a href=\"#config-image-build\">build </a> : <a href=\"#config-image-build-assembly\">assembly </a>)</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>id</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Unique ID for the layer.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>files</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>List of files for the layer.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each file has the following fields:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>source</code>: Absolute or relative path from the project&#8217;s directory of the file to be included in the assembly.</p>\n</li>\n<li>\n<p><code>outputDirectory</code>: Output directory relative to the root of the root directory of the assembly.</p>\n</li>\n<li>\n<p><code>destName</code>: Destination filename in the outputDirectory.</p>\n</li>\n<li>\n<p><code>fileMode</code>: Similar to a UNIX permission, sets the file mode of the file included.</p>\n</li>\n</ul>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>fileSets</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>List of filesets for the layer.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each fileset has the following fields:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>directory</code>: Absolute or relative location from the project&#8217;s directory.</p>\n</li>\n<li>\n<p><code>outputDirectory</code>: Output directory relative to the root of the root directory of the assembly fileSet.</p>\n</li>\n<li>\n<p><code>includes</code>:  A set of files and directories to include.</p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If none is present, then everything is included.</p>\n</li>\n<li>\n<p>Files can be referenced by using their complete path name.</p>\n</li>\n<li>\n<p>Wildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</li>\n</ul>\n</div>\n</li>\n<li>\n<p><code>excludes</code>: A set of files and directory to exclude.</p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If none is present, then there are no exclusions.</p>\n</li>\n<li>\n<p>Wildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</li>\n</ul>\n</div>\n</li>\n<li>\n<p><code>fileMode</code>: Similar to a UNIX permission, sets the file mode of the files included.</p>\n</li>\n<li>\n<p><code>directoryMode</code>: Similar to a UNIX permission, sets the directory mode of the directories included.</p>\n</li>\n</ul>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>baseDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Base directory from which to resolve the Assembly&#8217;s layer files and filesets.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"misc-env\">4.5. Environment and Labels</h3>\n<div class=\"paragraph\">\n<p>When creating a container one or more environment variables can be set via configuration with the <code>env</code> parameter</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">env {\n    JAVA_HOME = \"/opt/jdk8\"\n    CATALINA_OPTS = \"-Djava.security.egd=file:/dev/./urandom\"\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If you put this configuration into profiles you can easily create various test variants with a single image (e.g. by switching the JDK or whatever).</p>\n</div>\n<div class=\"paragraph\">\n<p>It is also possible to set the environment variables from the outside of the plugin&#8217;s configuration with the parameter <code>envPropertyFile</code>. If given, this property file is used to set the environment variables where the keys and values specify the environment variable. Environment variables specified in this file override any environment variables specified in the configuration.</p>\n</div>\n<div class=\"paragraph\">\n<p>Labels can be set inline the same way as environment variables:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">labels {\n     labelWithValue = \"foo\"\n     version = \"${project.version}\"\n     artifactId = \"${project.name}\"\n}</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"misc-startup\">4.6. Startup Arguments</h3>\n<div class=\"paragraph\">\n<p>Using <code>entryPoint</code> and <code>cmd</code> it is possible to specify the <a href=\"https://docs.docker.com/reference/builder/#entrypoint\">entry point</a>\nor <a href=\"https://docs.docker.com/reference/builder/#cmd\">cmd</a> for a container.</p>\n</div>\n<div class=\"paragraph\">\n<p>The difference is, that an <code>entrypoint</code> is the command that always be executed, with the <code>cmd</code> as argument. If no <code>entryPoint</code> is provided, it defaults to <code>/bin/sh -c</code> so any <code>cmd</code> given is executed with a shell. The arguments given to <code>docker run</code> are always given as arguments to the\n<code>entrypoint</code>, overriding any given <code>cmd</code> option. On the other hand if no extra arguments are given to <code>docker run</code> the default <code>cmd</code> is used as argument to <code>entrypoint</code>.</p>\n</div>\n<div class=\"sidebarblock\">\n<div class=\"content\">\n<div class=\"paragraph\">\n<p>See this <a href=\"http://stackoverflow.com/questions/21553353/what-is-the-difference-between-cmd-and-entrypoint-in-a-dockerfile\">stackoverflow question</a> for a detailed explanation.</p>\n</div>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>An entry point or command can be specified in two alternative formats:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 11. Entrypoint and Command Configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Mode</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>shell</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Shell form in which the whole line is given to <code>shell -c</code> for interpretation.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>exec</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of arguments (with inner <code>&lt;args&gt;</code>) arguments which will be given to the <code>exec</code> call directly without any shell interpretation.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>Either shell or params should be specified.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">entryPoint {\n    // Shell Form\n    shell = 'java -jar maven/hello-world-1.5.0.jar'\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>or</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">entryPoint {\n    // exec form\n    exec = ['java','-jar','maven/hello-world-1.5.0.jar']\n}</code></pre>\n</div>\n</div>\n<div class=\"dlist\">\n<dl>\n<dt class=\"hdlist1\">INFO</dt>\n<dd>\n<p>Startup arguments are not used in S2I builds</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"build-buildargs\">4.7. Build Args</h3>\n<div id=\"property-buildargs\" class=\"paragraph\">\n<p>As described in section <a href=\"#build-configuration\">Configuration</a> for external Dockerfiles <a href=\"https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg\">Docker build arg</a> can be used. In addition to the\nconfiguration within the plugin configuration you can also use properties to specify them:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Set a system property when running Gradle, eg.: <code>-Ddocker.buildArg.http_proxy=http://proxy:8001</code>. This is especially\nuseful when using predefined Docker arguments for setting proxies transparently.</p>\n</li>\n<li>\n<p>Set a project property within the <code>build.gradle</code>, eg.:</p>\n</li>\n</ul>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-properties\" data-lang=\"properties\">docker.buildArg.myBuildArg = myValue</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Please note that the system property setting will always override the project property. Also note that for all\nproperties which are not Docker <a href=\"https://docs.docker.com/engine/reference/builder/#arg\">predefined</a> properties, the\nexternal Dockerfile must contain an <code>ARGS</code> instruction.</p>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"kuberetes-resource-configuration\">4.8. Kubernetes Resources Configuration</h3>\n<div class=\"paragraph\">\n<p>This section includes Groovy DSL configuration options you can use to tweak generated Kubernetes manifests.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"labels-annotation-configuration\">4.8.1. Labels/Annotations</h4>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 12. Label and annotation configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 85.7143%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>all</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">All entries specified in the <code>all</code> sections are applied to all resource objects created.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>deployment</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>Deployment</code> (for Kubernetes).</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>pod</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied pod specification as used in <code>ReplicationController</code>,  <code>ReplicaSets</code>, <code>Deployments</code> and <code>DeploymentConfigs</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>replicaSet</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>ReplicaSet</code> and <code>ReplicationController</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>service</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>Service</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ingress</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>Ingress</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>serviceAccount</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>ServiceAccount</code> objects.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect3\">\n<h4 id=\"controller-resource-groovy-configuration\">4.8.2. Controllers</h4>\n<div class=\"paragraph\">\n<p>A Controller resource is a Kubernetes resource which manages Pods created for your application. It can be one of these options:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/\">ReplicationController</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/\">ReplicaSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/\">Deployment</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/\">StatefulSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\">DaemonSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/job/\">Job</a></p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Here are the fields available in <code>resources</code> Groovy DSL configuration that would work with k8sResource:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 13. resources fields for configuring generated controllers</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>env</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Environment variables which will be added to containers in Pod template spec.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#volume-groovy-configuration\"><code>volumes</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for adding volume mounts to containers in Pod template spec</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>controllerName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Name of the controller resource(i.e. <code>Deployment</code>, <code>ReplicaSet</code>, <code>StatefulSet</code> etc) generated</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#probe-groovy-configuration\"><code>liveness</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for adding a liveness probe</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#probe-groovy-configuration\"><code>readiness</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for adding readiness probe</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>containerPrivileged</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Run container in privileged mode. Sets <code>privileged: true</code> in generated Controller&#8217;s PodTemplateSpec</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>imagePullPolicy</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How images should be pulled (maps to ImagePullPolicy).</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>replicas</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Number of replicas to create</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>serviceAccount</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ServiceAccount name which will be used by pods created by controller resources(e.g. <code>Deployment</code>, <code>ReplicaSet</code> etc)</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"sect4\">\n<h5 id=\"probe-groovy-configuration\">Probe Groovy DSL Configuration</h5>\n<div class=\"paragraph\">\n<p>Probe configuration is used for configuring <a href=\"https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes\">liveness and readiness probes</a> for containers. Both <code>liveness</code> and <code>readiness</code> probes the following options:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 14. Groovy DSL Probe configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>initialDelaySeconds</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Initial delay in seconds before the probe is started.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>timeoutSeconds</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Timeout in seconds how long the probe might take.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>exec</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Command to execute for probing.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>getUrl</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Probe URL for HTTP Probe. Configures HTTP probe fields like <code>host</code>, <code>scheme</code>, <code>path</code> etc by parsing URL. For example, a <code>getUrl = \"http://:8080/health\"</code> would result in probe generated with fields set like this:</p>\n<p class=\"tableblock\">  host: \"\"</p>\n<p class=\"tableblock\">  path: /health</p>\n<p class=\"tableblock\">  port: 8080</p>\n<p class=\"tableblock\">  scheme: HTTP</p>\n<p class=\"tableblock\">Host name with empty value defaults to Pod IP. You probably want to set \"Host\" in httpHeaders instead.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>tcpPort</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">TCP port to probe.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>failureThreshold</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">When a probe fails, Kubernetes will try failureThreshold times before giving up</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>successThreshold</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Minimum consecutive successes for the probe to be considered successful after having failed.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>httpHeaders</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Custom headers to set in the request.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>periodSeconds</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How often in seconds to perform the probe. Defaults to 10 seconds. Minimum value is 1.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"volume-groovy-configuration\">Volume Groovy DSL Configuration</h5>\n<div class=\"paragraph\">\n<p><code>volumes</code> field contains a list of <code>volume</code> configurations. Different configurations are supported in order to support different <a href=\"https://kubernetes.io/docs/concepts/storage/volumes/\">Volumes in Kubernetes</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here are the options supported by a single <code>volume</code> :</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 15. Groovy DSL <code>volume</code> configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>type</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">type of Volume</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>name</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">name of volume to be mounted</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>mounts</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of mount paths of this volume.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>path</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path for volume</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>medium</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">medium ,applicable for Volume type <code>emptyDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>repository</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">repository ,applicable for Volume type <code>gitRepo</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>revision</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">revision ,applicable for Volume type <code>gitRepo</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret name ,applicable for Volume type <code>secret</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>server</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Server name, applicable for Volume type <code>nfsPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>readOnly</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether it&#8217;s read only or not</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pdName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">pdName, applicable for Volume type <code>gcePdName</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>fsType</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">File system type for Volume</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>partition</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">partition, applicable for Volume type <code>gcePdName</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>endpoints</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">endpoints, applicable for Volume type <code>glusterFsPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>claimRef</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Claim Reference, applicable for Volume type <code>persistentVolumeClaim</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>volumeId</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">volume id</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>diskName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">disk name, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>diskUri</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">disk uri, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>kind</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">kind, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>cachingMode</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">caching mode, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>hostPathType</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Host Path type</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>shareName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Share name,  applicable for Volume type <code>azureFile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>user</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">User name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretFile</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret File, applicable for Volume type <code>cephfs</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretRef</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret reference, applicable for Volume type <code>cephfs</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>lun</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">LUN(Logical Unit Number)</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>targetWwns</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">target WWNs, applicable for Volume type <code>fc</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>datasetName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">data set name, applicable for Volume type <code>flocker</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>portals</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">list of portals, applicable for Volume type <code>iscsi</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>targetPortal</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">target portal, applicable for Volume type <code>iscsi</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>registry</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">registry, applicable for Volume type <code>quobyte</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>volume</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">volume, applicable for Volume type <code>quobyte</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>group</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">group, applicable for Volume type <code>quobyte</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>iqn</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">IQN, applicable for Volume type <code>iscsi</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>monitors</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">list of monitors, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pool</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">pool, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>keyring</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">keyring, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>image</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">image, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>gateway</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">gateway, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>system</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">system, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>protectionDomain</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">protection domain, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>storagePool</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">storage pool, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>volumeName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">volume name, applicable for Volume type <code>scaleIO</code> and <code>storageOS</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>configMapName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ConfigMap name, applicable for Volume type <code>configMap</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>configMapItems</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of ConfigMap items, applicable for Volume type <code>configMap</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>items</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of items, applicable for Volume type <code>downwardAPI</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"ingress-groovy-configuration\">4.8.3. Ingress</h4>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>ingress</code> in Groovy configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 16. <code>ingress</code> configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-rule-groovy-configuration\"><code>ingressRules</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">IngressRule configuration</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-tls-configuration\"><code>ingressTlsConfigs</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Ingress TLS configuration</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"sect4\">\n<h5 id=\"ingress-rule-groovy-configuration\">IngressRule Groovy Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>ingressRules</code> in Groovy configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 17. <code>ingressRule</code> configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>host</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Host name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-rule-path-configuration\"><code>paths</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">IngressRule path configuration</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-rule-path-configuration\">IngressRule Path Groovy Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>paths</code> in Groovy DSL configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 18. IngressRule <code>path</code> Groovy DSL configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pathType</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">type of Path</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>path</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">path</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>serviceName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Service name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>servicePort</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Service port</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-rule-path-resource-groovy-configuration\"><code>resource</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource reference in Ingress backend</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-rule-path-resource-groovy-configuration\">IngressRule Path Resource Groovy Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>resource</code> in IngressRule&#8217;s path Groovy configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 19. IngressRule Path <code>resource</code> Groovy configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>name</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>kind</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource kind</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>apiGroup</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource&#8217;s apiGroup</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-tls-configuration\">IngressRule Path Resource Groovy Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>ingressTlsConfigs</code> in IngressRule&#8217;s path Groovy configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 20. IngressTls <code>ingressTlsConfig</code> Groovy configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>hosts</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">a list of string <code>host</code> objects</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"registry\">5. Registry handling</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Docker uses registries to store images. The registry is typically\nspecified as part of the name. I.e. if the first part (everything\nbefore the first <code>/</code>) contains a dot (<code>.</code>) or colon (<code>:</code>) this part is\ninterpreted as an address (with an optionally port) of a remote\nregistry. This registry (or the default <code>docker.io</code> if no\nregistry is given) is used during push and pull operations. This\nplugin follows the same semantics, so if an image name is specified\nwith a registry part, this registry is contacted. Authentication is\nexplained in the next <a href=\"#authentication\">section</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>There are some situations however where you want to have more\nflexibility for specifying a remote registry. This might be because\nyou do not want to hard code a registry into <code>build.gradle</code> but\nprovide it from the outside with an environment variable or a system\nproperty.</p>\n</div>\n<div class=\"paragraph\">\n<p>This plugin supports various ways of specifying a registry:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If the image name contains a registry part, this registry is used\nunconditionally and can not be overwritten from the outside.</p>\n</li>\n<li>\n<p>If an image name doesn&#8217;t contain a registry, then by default the\ndefault Docker registry <code>docker.io</code> is used for push and pull\noperations. But this can be overwritten through various means:</p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If the <code>image</code> configuration contains a <code>registry</code> subelement\nthis registry is used.</p>\n</li>\n<li>\n<p>Otherwise, a global configuration element <code>registry</code> is\nevaluated which can be also provided as system property via\n<code>-Djkube.docker.registry</code>.</p>\n</li>\n<li>\n<p>Finally an environment variable <code>DOCKER_REGISTRY</code> is looked up for\ndetecting a registry.</p>\n</li>\n</ul>\n</div>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>This registry is used for pulling (i.e. for autopull the base image\nwhen doing a <code>k8sBuild</code>) and pushing with <code>k8sPush</code>. However,\nwhen these two tasks are combined on the command line like in <code>mvn\n-Djkube.docker.registry=myregistry:5000 package k8sBuild k8sPush</code>\nthe same registry is used for both operation. For a more fine grained\ncontrol, separate registries for <em>pull</em> and <em>push</em> can be specified.</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>In the plugin&#8217;s configuration with the parameters <code>pullRegistry</code> and\n<code>pushRegistry</code>, respectively.</p>\n</li>\n<li>\n<p>With the system properties <code>jkube.docker.pull.registry</code> and\n<code>jkube.docker.push.registry</code>, respectively.</p>\n</li>\n</ul>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    registry = \"docker.jolokia.org:443\"\n    images {\n        image1 {\n            // Without an explicit registry\n            name = \"jolokia/jolokia-java\"\n            // Hence use this registry\n            registry = \"docker.ro14nd.de\"\n        }\n        image2 {\n            name =\"postgresql\"\n            // No registry in the name, hence use this globally\n            // configured docker.jolokia.org:443 as registry\n        }\n        image3 {\n            // Explicitly specified always wins\n            name = \"docker.example.com:5000/another/server\"\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>There is some special behaviour when using an externally provided\nregistry like described above:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>When <em>pulling</em>, the image pulled will be also tagged with a repository\nname <strong>without</strong> registry. The reasoning behind this is that this\nimage then can be referenced also by the configuration when the\nregistry is not specified anymore explicitly.</p>\n</li>\n<li>\n<p>When <em>pushing</em> a local image, temporarily a tag including the\nregistry is added and removed after the push. This is required\nbecause Docker can only push registry-named images.</p>\n</li>\n</ul>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"authentication\">6. Registry Authentication</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>When pulling (via the <code>autoPull</code> mode of <code>k8sBuild</code>) or pushing image, it\nmight be necessary to authenticate against a Docker registry.</p>\n</div>\n<div class=\"paragraph\">\n<p>There are five different locations searched for credentials.  In order, these are:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Providing system properties <code>jkube.docker.username</code> and <code>jkube.docker.password</code> from the outside.</p>\n</li>\n<li>\n<p>Using a <code>authConfig</code> section in the plugin configuration with <code>username</code> and <code>password</code> elements.</p>\n</li>\n<li>\n<p>Using OpenShift configuration in <code>~/.config/kube</code></p>\n</li>\n<li>\n<p>Login into a registry with <code>docker login</code> (credentials in a credential helper or in <code>~/.docker/config.json</code>)</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Using the username and password directly in the <code>build.gradle</code> is not\nrecommended since this is widely visible. This is the easiest and\ntransparent way, though. Using an <code>authConfig</code> is straight forward:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"consol/tomcat-7.0\"\n        }\n    }\n    authConfig {\n        username = \"jolokia\"\n        password = \"s!cr!t\"\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The system property provided credentials are a good compromise when\nusing CI servers like Jenkins. You simply provide the credentials from\nthe outside:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle -Djkube.docker.username=jolokia -Djkube.docker.password=s!cr!t k8sPush</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The most <em>secure</em> way is to rely on docker&#8217;s credential store or credential helper and read confidential information\nfrom an external credentials store, such as the native keychain of the operating system. Follow the instruction on\n<a href=\"https://docs.docker.com/engine/reference/commandline/login/#credentials-store\">the docker login documentation</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>As a final fallback, this plugin consults <code>$DOCKER_CONFIG/config.json</code> if <code>DOCKER_CONFIG</code> is set, or <code>~/.docker/config.json</code> if not, and reads credentials stored directly within this\nfile. This unsafe behavior happened when connecting to a registry with the command <code>docker login</code> from the command line\nwith older versions of docker (pre 1.13.0) or when docker is not configured to use a\n<a href=\"https://docs.docker.com/engine/reference/commandline/login/#credentials-store\">credential store</a>.</p>\n</div>\n<div class=\"sect2\">\n<h3 id=\"_pull_vs_push_authentication\">6.1. Pull vs. Push Authentication</h3>\n<div class=\"paragraph\">\n<p>The credentials lookup described above is valid for both push and\npull operations. In order to narrow things down, credentials can be\nprovided for pull or push operations alone:</p>\n</div>\n<div class=\"paragraph\">\n<p>In an <code>authConfig</code> section a sub-section <code>pull</code> and/or <code>push</code>\ncan be added. In the example below the credentials provider are only\nused for image push operations:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"consol/tomcat-7.0\"\n        }\n    }\n    authConfig {\n        push {\n            username = \"jolokia\"\n            password = \"secret\"\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>When the credentials are given on the command line as system\nproperties, then the properties <code>jkube.docker.pull.username</code> /\n<code>jkube.docker.pull.password</code> and <code>jkube.docker.push.username</code> /\n<code>jkube.docker.push.password</code> are used for pull and push operations,\nrespectively (when given). Either way, the standard lookup algorithm\nas described in the previous section is used as fallback.</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"kind-filename-mapping\">7. Kind/Filename Mapping</h2>\n<div class=\"sectionbody\">\n<div class=\"sect2\">\n<h3 id=\"appendix-kind-mapping\">7.1. Default Kind/Filename Mapping</h3>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 50%;\">\n<col style=\"width: 50%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Kind</th>\n<th class=\"tableblock halign-left valign-top\">Filename Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">BuildConfig</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>bc</code>, <code>buildconfig</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ClusterRole</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>cr</code>, <code>crole</code>, <code>clusterrole</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ConfigMap</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>cm</code>, <code>configmap</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ClusterRoleBinding</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>crb</code>, <code>clusterrb</code>, <code>clusterrolebinding</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">CronJob</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>cj</code>, <code>cronjob</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">CustomResourceDefinition</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>crd</code>, <code>customerresourcedefinition</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">DaemonSet</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>ds</code>, <code>daemonset</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Deployment</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>deployment</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">DeploymentConfig</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>dc</code>, <code>deploymentconfig</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ImageStream</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>is</code>, <code>imagestream</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ImageStreamTag</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>istag</code>, <code>imagestreamtag</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Ingress</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>ingress</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Job</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>job</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">LimitRange</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>lr</code>, <code>limitrange</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Namespace</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>ns</code>, <code>namespace</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">NetworkPolicy</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>np</code>, <code>networkpolicy</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">OAuthClient</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>oauthclient</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">PolicyBinding</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pb</code>, <code>policybinding</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">PersistentVolume</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pv</code>, <code>persistentvolume</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">PersistentVolumeClaim</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pvc</code>, <code>persistentvolumeclaim</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Project</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>project</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ProjectRequest</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pr</code>, <code>projectrequest</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ReplicaSet</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rs</code>, <code>replicaset</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ReplicationController</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rc</code>, <code>replicationcontroller</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ResourceQuota</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rq</code>, <code>resourcequota</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Role</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>role</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">RoleBinding</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rb</code>, <code>rolebinding</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">RoleBindingRestriction</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rbr</code>, <code>rolebindingrestriction</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Route</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>route</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secret</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Service</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>svc</code>, <code>service</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ServiceAccount</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>sa</code>, <code>serviceaccount</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">StatefulSet</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>statefulset</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Template</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>template</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Pod</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pd</code>, <code>pod</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"custom-kind-mapping\">7.2. Custom Kind/Filename Mapping</h3>\n<div class=\"paragraph\">\n<p>You can add your custom <code>Kind/Filename</code> mappings.\nTo do it you have two approaches:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Setting an environment variable or system property called <code>jkube.mapping</code> pointing out to a <code>.properties</code> files with pairs <code>&lt;kind&gt;&#8658;filename1&gt;, &lt;filename2&gt;</code>\nBy default if no environment variable nor system property is set, scan for a file located at classpath <code>/META-INF/jkube.kind-filename-type-mapping-default.properties</code>.</p>\n</li>\n<li>\n<p>By embedding in task configuration the mapping:</p>\n</li>\n</ul>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    mappings {\n        mapping {\n            kind = \"Var\"\n            filenameTypes = \"foo, bar\"\n        }\n    }\n}</code></pre>\n</div>\n</div>\n</div>\n</div>\n</div>","document":{"title":"org.eclipse.jkube/kubernetes-gradle-plugin","subtitle":""}}},"pageContext":{"id":"e062868f-dcfc-5b09-b545-88ecedc7ecd3","langKey":"en"}},
+    "result": {"data":{"asciidocCopy":{"html":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>&#169; 2021 The original authors.</p>\n</div>\n<div id=\"toc\" class=\"toc\">\n<div id=\"toctitle\" class=\"title\">kubernetes-gradle-plugin</div>\n<ul class=\"sectlevel1\">\n<li><a href=\"#introduction\">1. Introduction</a></li>\n<li><a href=\"#common-scenarios\">2. Common Scenarios</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#zero-config-scenario\">2.1. Zero Configuration</a></li>\n<li><a href=\"#groovy-scenario\">2.2. Using Groovy Configuration</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#groovy-scenario-image\">2.2.1. Configuring Images</a></li>\n<li><a href=\"#resource-labels-annotations\">2.2.2. Kubernetes Labels and Annotations</a></li>\n<li><a href=\"#controller-resource-generation\">2.2.3. Kubernetes Controller Generation</a></li>\n<li><a href=\"#ingress-generation\">2.2.4. Ingress Generation</a></li>\n<li><a href=\"#serviceaccount-generation\">2.2.5. ServiceAccount Generation</a></li>\n</ul>\n</li>\n<li><a href=\"#dockerfile-scenario\">2.3. Using Dockerfile</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#simple-dockerfile-mode-scenario\">2.3.1. Placing Dockerfile in project root directory</a></li>\n<li><a href=\"#docker-file-provided-mode-scenario\">2.3.2. Placing Dockerfile in some other directory</a></li>\n<li><a href=\"#docker-file-mode-include-exclude\">2.3.3. Controlling what gets copied to image</a></li>\n<li><a href=\"#docker-file-mode-property-placeholders\">2.3.4. Using Property placeholders in Dockerfiles</a></li>\n</ul>\n</li>\n<li><a href=\"#kubernetes-resource-fragments\">2.4. Kubernetes Resource Fragments</a></li>\n</ul>\n</li>\n<li><a href=\"#tasks\">3. Tasks Overview</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#task-overview-build\">3.1. Build And Deployment Tasks</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#jkubeBuild\">3.1.1. <strong>k8sBuild</strong></a></li>\n<li><a href=\"#jkubePush\">3.1.2. <strong>k8sPush</strong></a></li>\n<li><a href=\"#jkubeResource\">3.1.3. <strong>k8sResource</strong></a></li>\n<li><a href=\"#jkubeApply\">3.1.4. <strong>k8sApply</strong></a></li>\n<li><a href=\"#jkubeHelm\">3.1.5. <strong>k8sHelm</strong></a></li>\n</ul>\n</li>\n<li><a href=\"#task-overview-develop\">3.2. Development Tasks</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#jkubeDebug\">3.2.1. <strong>k8sDebug</strong></a></li>\n<li><a href=\"#jkubeLog\">3.2.2. <strong>k8sLog</strong></a></li>\n<li><a href=\"#jkubeUndeploy\">3.2.3. <strong>k8sUndeploy</strong></a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"#groovy-configuration\">4. Gradle Groovy DSL Configuration</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#global-configuration\">4.1. Global Configuration</a></li>\n<li><a href=\"#_image_configuration\">4.2. Image Configuration</a></li>\n<li><a href=\"#build-configuration\">4.3. Build Configuration</a></li>\n<li><a href=\"#build-assembly\">4.4. Assembly</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#build-assembly-layer\">4.4.1. Assembly - Inline/Layer</a></li>\n</ul>\n</li>\n<li><a href=\"#misc-env\">4.5. Environment and Labels</a></li>\n<li><a href=\"#misc-startup\">4.6. Startup Arguments</a></li>\n<li><a href=\"#build-buildargs\">4.7. Build Args</a></li>\n<li><a href=\"#kuberetes-resource-configuration\">4.8. Kubernetes Resources Configuration</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#labels-annotation-configuration\">4.8.1. Labels/Annotations</a></li>\n<li><a href=\"#controller-resource-groovy-configuration\">4.8.2. Controllers</a></li>\n<li><a href=\"#ingress-groovy-configuration\">4.8.3. Ingress</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"#registry\">5. Registry handling</a></li>\n<li><a href=\"#authentication\">6. Registry Authentication</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_pull_vs_push_authentication\">6.1. Pull vs. Push Authentication</a></li>\n</ul>\n</li>\n<li><a href=\"#kind-filename-mapping\">7. Kind/Filename Mapping</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#appendix-kind-mapping\">7.1. Default Kind/Filename Mapping</a></li>\n<li><a href=\"#custom-kind-mapping\">7.2. Custom Kind/Filename Mapping</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"introduction\">1. Introduction</h2>\n<div class=\"sectionbody\">\n<div class=\"admonitionblock important\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-important\" title=\"Important\"></i>\n</td>\n<td class=\"content\">\n<strong>This is a preview feature to get early feedback.  Only the set of documented features are available to users.</strong>\n</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>The <strong>kubernetes-gradle-plugin</strong> brings your Gradle Java applications on to\n<a href=\"http://kubernetes.io/\">Kubernetes</a>.\nThis plugin focuses on two tasks:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Building Container images.</p>\n</li>\n<li>\n<p>Creating Kubernetes resource descriptors.</p>\n</li>\n</ul>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"common-scenarios\">2. Common Scenarios</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>When working with kubernetes-gradle-plugin, you&#8217;ll probably be facing similar situations and following\nthe same patterns other users do. These are some of the most common scenarios and\nconfiguration modes:</p>\n</div>\n<div class=\"sect2\">\n<h3 id=\"zero-config-scenario\">2.1. Zero Configuration</h3>\n<div class=\"paragraph\">\n<p>It&#8217;s very common, especially when dealing with the inner development loop, that you\ndon&#8217;t need to provide any configuration for your Gradle project.\nYou can get started simply by adding the plugin to your build.gradle file:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for setting up the kubernetes-gradle-plugin in build.gradle</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">plugins {\n  id 'org.eclipse.jkube.kubernetes' version '1.5.1'\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>In this case, kubernetes-gradle-plugin analyzes your project and configures the container image and the\ncluster configuration manifests using a set of opinionated defaults.</p>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"groovy-scenario\">2.2. Using Groovy Configuration</h3>\n<div class=\"paragraph\">\n<p>If the <a href=\"#zero-config-scenario\">zero configuration</a> mode doesn&#8217;t fit your use case, and you want more\nflexibility, you can also use kubernetes-gradle-plugin Groovy configuration to configure\nplugin as per your needs.\nkubernetes-gradle-plugin provides a rich set of configuration in form of Groovy DSL which\ncan be used to tune plugin&#8217;s output as per your specific requirements.</p>\n</div>\n<div class=\"paragraph\">\n<p>The plugin configuration can be roughly divided into the following sections:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Global configuration options are responsible for tuning the behavior of plugin tasks.</p>\n</li>\n<li>\n<p><code>images</code> defines which container <a href=\"#config-image\">images</a> are used and configured.</p>\n</li>\n<li>\n<p><code>resources</code> defines the resource descriptors for deploying on Kubernetes cluster.</p>\n</li>\n<li>\n<p><code>enricher</code> configures various aspects of creating and enhancing resource descriptors.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>A working example can be found in <a href=\"https://github.com/eclipse/jkube/tree/master/quickstarts/gradle/groovy-dsl-config\"><code>quickstarts/gradle/groovy-dsl-config</code></a> directory.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"groovy-scenario-image\">2.2.1. Configuring Images</h4>\n<div class=\"paragraph\">\n<p>This section provides an overview of <code>images</code> element with which you can configure different aspects of container images generated by kubernetes-gradle-plugin.\nHere is an example of providing Groovy DSL configuration for a simple image:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for providing image using Groovy DSL configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"jkube/${project.name}:${project.version}\" <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n            alias = \"camel-service\" <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n            build {\n                from = \"quay.io/jkube/jkube-java-binary-s2i:0.0.9\" <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n                assembly { <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n                    targetDir = \"/deployments\" <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n                    layers = [{ <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n                        fileSets = [{ <i class=\"conum\" data-value=\"7\"></i><b>(7)</b>\n                            directory = file(\"${project.rootDir}/build/dependencies\")\n                       }]\n                    }]\n                }\n                env { <i class=\"conum\" data-value=\"8\"></i><b>(8)</b>\n                    JAVA_LIB_DIR = \"/deployments/dependencies/*\"\n                    JAVA_MAIN_CLASS = \"org.apache.camel.cdi.Main\"\n                }\n                labels { <i class=\"conum\" data-value=\"9\"></i><b>(9)</b>\n                    labelWithValue = \"foo\"\n                    version = \"${project.version}\"\n                    artifactId = \"${project.name}\"\n                }\n                ports = [\"8787\"] <i class=\"conum\" data-value=\"10\"></i><b>(10)</b>\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Name with which we want our image to be built; See <code>name</code> field in <a href=\"#config-image\">Image Configuration</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Shortcut name for image; See <code>alias</code> field in <a href=\"#config-image\">Image Configuration</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td>Base image on which this image would be built upon; See <code>from</code> field in <a href=\"#config-image-build\">Image Build Configuration</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>Assembly Configuration for copying files/directories into image.\nSee <a href=\"#config-image-build-assembly\">Assembly Configuration</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td>Target directory inside image for copying a directory into image</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td>Assembly layer; See <a href=\"#build-assembly-layer\">Assembly Inline/Layer Configuration</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"7\"></i><b>7</b></td>\n<td>FileSet Assembly Configuraton for copying directories.\nSee <code>fileSets</code> field in <a href=\"#build-assembly-layer\">Assembly Layer Configuration</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"8\"></i><b>8</b></td>\n<td>Environment variables added to image.\nSee <a href=\"#misc-env\">Environment and Labels</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"9\"></i><b>9</b></td>\n<td>Labels added to image.\nSee <a href=\"#misc-env\">Environment and Labels</a> for details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"10\"></i><b>10</b></td>\n<td>Ports to be exposed.\nSee <code>port</code> field in <a href=\"#config-image-build\">Image Build Configuration</a> for details.</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>You can read more about supported fields in <code>image</code> configuration element in <a href=\"#config-image\">Image Configuration</a> section.</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"groovy-scenario-image-copy-files\">Copying Files/Directories into Image</h5>\n<div class=\"paragraph\">\n<p>If you want to copy some files/directories into your image.\nYou can make use of kubernetes-gradle-plugin <a href=\"#config-image-build-assembly\">Assembly Configuration</a>.\nYou would need to provide <code>assembly</code> element in <code>image</code> &gt; <code>build</code>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here is an example of copying a single jar file into image.\nThis configuration would copy a jar file located in <code>build/libs/</code> to  <code>/deployments</code> folder inside the image:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for copying a file to image using Groovy DSL configuration:</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"${project.group}/${project.name}:${project.version}\"\n            build {\n                from = \"quay.io/jkube/jkube-java-binary-s2i:0.0.9\"\n                assembly {\n                    targetDir = \"/deployments\"\n                    layers = [{\n                        id = \"custom-assembly-for-copying-file\"\n                        files = [{\n                            source = file(\"build/libs/${project.name}-${project.version}-all.jar\")\n                            outputDirectory = \".\"\n                        }]\n                    }]\n                }\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>In order to copy directories, you would be using <code>fileSets</code> configuration element instead of <code>files</code>.\nHere is an example of copying directories.\nThis example would copy <code>build/dependencies</code> directory to <code>/deployments</code> directory inside image.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for copying a directory to image using Groovy DSL configuration:</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"${project.group}/${project.name}:${project.version}\"\n            build {\n                from = \"quay.io/jkube/jkube-java-binary-s2i:0.0.9\"\n                assembly {\n                    targetDir = \"/deployments\"\n                    layers = [{\n                        id = \"custom-assembly-for-copying-directory\"\n                        fileSets = [{\n                            directory = file(\"${project.rootDir}/build/dependencies\")\n                       }]\n                    }]\n                }\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"resource-labels-annotations\">2.2.2. Kubernetes Labels and Annotations</h4>\n<div class=\"paragraph\">\n<p>Labels and annotations can be easily added to any resource object.\nThis is best explained by an example.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for label and annotations</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    labels { <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n      all { <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n        extraLabel = \"quickstart-groovy-dsl-configuration\"\n      }\n      service { <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n        database = 'mysql'\n        persistent = 'true'\n      }\n      replicaSet { <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n        // ...\n      }\n      pod { <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n        // ...\n      }\n      deployment { <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n        // ...\n      }\n    }\n    annotations { <i class=\"conum\" data-value=\"7\"></i><b>(7)</b>\n       // ...\n    }\n }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td><code>labels</code> section with <code>resources</code> contains labels which should be applied to objects of various kinds</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Within <code>all</code> labels which should be applied to <strong>every</strong> object can be specified</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td><code>service</code> labels are used to label services</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td><code>replicaSet</code> labels are for replica set and replication controller</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td><code>pod</code> holds labels for pod specifications in replication controller, replica sets and deployments</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td><code>deployment</code> is for labels on deployments (kubernetes) and deployment configs (openshift)</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"7\"></i><b>7</b></td>\n<td>The subelements are also available for specifying annotations.</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>Labels and annotations can be specified in free form as a map.\nIn this map, the element name is the name of the label or annotation respectively, whereas the content is the value to set.\nSee <a href=\"#labels-annotation-configuration\">Labels and Annotations Configuration</a> for more details.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"controller-resource-generation\">2.2.3. Kubernetes Controller Generation</h4>\n<div class=\"paragraph\">\n<p>In JKube terminology, a Controller resource is a Kubernetes resource which manages Pods created for your application.\nThese can be one of the following resources:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/\">ReplicationController</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/\">ReplicaSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/\">Deployment</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/\">StatefulSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\">DaemonSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/job/\">Job</a></p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>By default Deployment is generated in Kubernetes mode.\nYou can easily configure different aspects of generated Controller resource using Groovy DSL configuration.\nHere is an example:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example of Controller Resource Configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    labels {\n      all {\n        extraLabel = \"quickstart-groovy-dsl-configuration\"\n      }\n    }\n    env { <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n      organization = \"Eclipse Foundation\"\n      projectName = \"jkube\"\n    }\n    controllerName = \"${project.name}-controller\" <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n    containerPrivileged = true <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n    imagePullPolicy = \"Always\" <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n    replicas = \"2\" <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n    liveness { <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n      getUrl = \"http://:8080/q/health\"\n      tcpPort = \"8080\"\n      initialDelaySeconds = \"3\"\n      timeoutSeconds = \"3\"\n    }\n    volumes = [{ <i class=\"conum\" data-value=\"7\"></i><b>(7)</b>\n      name = \"scratch\"\n      type = \"emptyDir\"\n      medium = \"Memory\"\n      mounts = [\"/var/scratch\"]\n    }]\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Environment variables added to all of your application Pods</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Name of Controller(<code>metadata.name</code> set in generated Deployment, Job, ReplicaSet etc)</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td>Setting <a href=\"https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod\">Security Context</a> of all application Pods.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>Configure how images would be updated. Can be one of <code>IfNotPresent</code>, <code>Always</code> or <code>Never</code>. Read <a href=\"https://kubernetes.io/docs/concepts/containers/images/#updating-images\">Kubernetes Images docs</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td>Number of replicas of pods we want to have in our application</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td>Define an HTTP liveness request, see <a href=\"https://kubernetes.io/docs/concepts/containers/images/#updating-images\">Kubernetes Liveness/Readiness probes</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"7\"></i><b>7</b></td>\n<td>Mounting an EmptyDir Volume to your application pods</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>See <a href=\"#controller-resource-groovy-configuration\">Kubernetes Controller Configuration</a> for more details.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"ingress-generation\">2.2.4. Ingress Generation</h4>\n<div class=\"paragraph\">\n<p>Once you&#8217;ve enabled <code>jkube.createExternalUrls</code> property, you should be able to generate an opinionated ingress during k8sResource task. You can also configure it as per your needs using Groovy DSL configuration or by providing your own resource fragments.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here is an example of configuring Ingress using Groovy DSL configuration:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Enable Ingress Generation by enabling createExternalUrl property</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-properties\" data-lang=\"properties\">jkube.createExternalUrls = true</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Services which are exposed by Ingress should also contain <code>expose = true</code> label. If not, you can configure plugin to expose them like this:\n.Example for exposing Service for Ingress</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    enricher {\n        config {\n            \"jkube-service\" {\n                expose = \"true\"\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Ingress Configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    ingress {\n      ingressTlsConfigs = [{ <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n        hosts = [\"foo.bar.com\"]\n        secretName = \"testsecret-tls\"\n      }]\n      ingressRules = [{\n        host = \"foo.bar.com\" <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n        paths = [{\n          pathType = \"Prefix\" <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n          path = \"/foo\" <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n          serviceName = \"service1\" <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n          servicePort = \"8080\" <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n        }]\n      }]\n    }\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td><a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/#tls\">Ingress TLS</a> Configuration to specify Secret that contains TLS private key and certificate</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Host names, can be precise matches or a wildcard. See <a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/#hostname-wildcards\">Kubernetes Ingress Hostname</a> documentation for more details</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td><a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types\">Ingress Path Type</a>, Can be one of <code>ImplementationSpecific</code>, <code>Exact</code> or <code>Prefix</code></td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>Ingress path corresponding to provided <code>service.name</code></td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td>Service Name corresponding to path</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td>Service Port corresponding to path</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>For more information, please see <a href=\"#ingress-groovy-configuration\">Ingress Configuration</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>You can create Ingress using yaml fragment also. You would need to place a fragment of yaml in <code>src/main/jkube</code> directory like this:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Ingress fragment Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">apiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n  name: tls-example-ingress\nspec:\n  tls:\n  - hosts:\n    - https-example.foo.com\n    secretName: testsecret-tls\n  rules:\n  - host: https-example.foo.com\n    http:\n      paths:\n      - path: /\n        pathType: Prefix\n        backend:\n          service:\n            name: service1\n            port:\n              number: 80</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"serviceaccount-generation\">2.2.5. ServiceAccount Generation</h4>\n<div class=\"paragraph\">\n<p>You can configure <code>resources</code> configuration to generate a ServiceAccount or configure an already existing ServiceAccount into your generated Deployment.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here is an example of Groovy DSL configuration to generate a ServiceAccount:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Creating ServiceAccount via Groovy DSL</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    serviceAccounts = [{\n      name = \"my-serviceaccount\" <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n      deploymentRef = \"my-deployment-name\" <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n    }]\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Name of ServiceAccount to be created</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Deployment which will be using this ServiceAccount</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>If you don&#8217;t want to generate ServiceAccount but just use an existing ServiceAccount in your Deployment. You can configure it via <code>serviceAccount</code> field in resource configuration. Here is an example:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Configuring already existing ServiceAccount into generated Deployment</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  resources {\n    serviceAccount = \"my-existing-serviceaccount\"\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p><strong>Service Account Resource fragment</strong>:</p>\n</div>\n<div class=\"paragraph\">\n<p>If you don&#8217;t want to use Groovy DSL configuration, you can provide a resource fragment for ServiceAccount resource. Here is how it would look like:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">ServiceAccount resource fragment</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: build-robot</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"dockerfile-scenario\">2.3. Using Dockerfile</h3>\n<div class=\"paragraph\">\n<p>You can build a container image and deploy to Kubernetes with kubernetes-gradle-plugin by just providing a <a href=\"#external-dockerfile\">Dockerfile</a>.\nkubernetes-gradle-plugin builds a container image based on your Dockerfile and generates\nopinionated Kubernetes manifests by inspecting it.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"simple-dockerfile-mode-scenario\">2.3.1. Placing Dockerfile in project root directory</h4>\n<div class=\"paragraph\">\n<p>You can place the Dockerfile in the project root directory along with\n<code>build.gradle</code>.\nkubernetes-gradle-plugin detects it and automatically builds an image based on this Dockerfile.\nThere is no need to provide any sort of configuration apart from Dockerfile and project root directory as docker context directory.\nThe Image is created with an opinionated name from group, artifact and version.\nThe name can be overridden by using the <code>jkube.image.name</code> property.\nRead <a href=\"#simple-dockerfile-build\">Simple Dockerfile</a> section for more details.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"docker-file-provided-mode-scenario\">2.3.2. Placing Dockerfile in some other directory</h4>\n<div class=\"paragraph\">\n<p>You can choose to place your Dockerfile at some other location.\nBy default, the plugin assumes it to be <code>src/main/docker</code>, but you&#8217;ll need to configure docker context directory in plugin configuration.\nWhen not specified, context directory is assumed to be Dockerfile&#8217;s parent directory.\nYou can take a look at <a href=\"https://github.com/eclipse/jkube/tree/master/quickstarts/gradle/docker-file-provided-docker-file\">Docker File Provided Quickstarts</a> for more details.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"docker-file-mode-include-exclude\">2.3.3. Controlling what gets copied to image</h4>\n<div class=\"paragraph\">\n<p>When using Dockerfile mode, every file and directory present in the Docker build context directory\ngets copied to the created Docker image.\nIn case you want to ignore some files, or you want to include only a specific set of files,\nthe kubernetes-gradle-plugin provides the following options to achieve this:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"#ex-build-dockerinclude\"><code>.jkube-dockerinclude</code></a> : Include only a specific set of files specified in this file</p>\n</li>\n<li>\n<p><a href=\"#ex-build-dockerexclude\"><code>.jkube-dockerexclude</code></a> : Exclude a certain set of files from being copied into container image</p>\n</li>\n<li>\n<p><a href=\"#ex-build-dockerexclude\"><code>.jkube-dockerignore</code></a>  : Same as <code>.jkube-dockerexclude</code>, ignore certain files from being copied into container image</p>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"docker-file-mode-property-placeholders\">2.3.4. Using Property placeholders in Dockerfiles</h4>\n<div class=\"paragraph\">\n<p>You can reference properties in your Dockerfiles using standard maven property placeholders <code>${*}</code>. For example, if you have a property in your <code>gradle.properties</code> like this:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">gradle.properties</div>\n<div class=\"content\">\n<pre>fromImage = fabric8/s2i-java</pre>\n</div>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Dockerfile</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-dockerfile\" data-lang=\"dockerfile\">FROM ${fromImage}:latest-java11</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>You can override placeholders using the filter field in image build configuration, see <a href=\"#build-filtering\">Build Filtering</a> for more details.</p>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"kubernetes-resource-fragments\">2.4. Kubernetes Resource Fragments</h3>\n<div class=\"paragraph\">\n<p>You can also use an external configuration in form of YAML resource descriptors which are located in the  <code>src/main/jkube</code> directory. Each resource gets its own file, which contains a skeleton of a resource descriptor. The plugin will pick up the resource, enrich it and then combine all to a single <code>kubernetes.yml</code> and <code>openshift.yml</code> file. Within these descriptor files you are can freely use any Kubernetes feature.</p>\n</div>\n<div class=\"paragraph\">\n<p>Let&#8217;s have a look at an example from\n<a href=\"https://github.com/eclipse/jkube/tree/master/quickstarts/gradle/external-resources\">quickstarts/gradle/external-resources</a>.\nThis is a plain Spring Boot application, whose images are auto generated like in case of no configuration.\nThe resource fragments are in <code>src/main/jkube</code>.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example fragment \"deployment.yml\"</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">spec:\n  replicas: 1\n  template:\n    spec:\n      volumes:\n        - name: config\n          gitRepo:\n            repository: 'https://github.com/jstrachan/sample-springboot-config.git'\n            revision: 667ee4db6bc842b127825351e5c9bae5a4fb2147\n            directory: .\n      containers:\n        - volumeMounts:\n            - name: config\n              mountPath: /app/config\n          env:\n            - name: KUBERNETES_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n      serviceAccount: ribbon</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>As you can see, there is no <code>metadata</code> section as would be expected for Kubernetes resources because it will be automatically added by the <code>kubernetes-gradle-plugin</code>. The object&#8217;s <code>Kind</code>, if not given, is automatically derived from the\nfilename. In this case, the <code>kubernetes-gradle-plugin</code> will create a <code>Deployment</code> because the file is called <code>deployment.yml</code>. Similar mappings between file names and resource type exist for each supported resource kind, the\ncomplete list of which (along with associated abbreviations) can be found in the <a href=\"#appendix-kind-mapping\">Kind Filename Mapping</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Additionally, if you name your fragment using a name prefix followed by a dash and the mapped file name, the plugin will automatically use that name for your resource. So, for example, if you name your deployment fragment\n<code>myapp-deployment.yml</code>, the plugin will name your resource <code>myapp</code>. In the absence of such provided name for your resource, a name will be automatically derived from your project&#8217;s metadata (in particular, its project <code>name</code> as specified in your <code>build.gradle</code>).</p>\n</div>\n<div class=\"paragraph\">\n<p>No image is also referenced in this example because the plugin also fills in the image details based on the configured image you are building with (either from a generator or from a dedicated image plugin configuration, as seen before).</p>\n</div>\n<div class=\"paragraph\">\n<p>Enrichment of resource fragments can be fine-tuned by using profile sub-directories. For more details see <a href=\"#profiles\">Profiles</a>.</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"tasks\">3. Tasks Overview</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>This plugin supports a rich set for providing a smooth Java developer experience.\nThese tasks can be categorized in multiple groups:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"#tasks-build\">Build and Deployment tasks</a> are all about creating and managing Kubernetes build artifacts like Docker images or S2I builds.</p>\n</li>\n<li>\n<p><a href=\"#tasks-develop\">Development tasks</a> target help not only in developing resource descriptors to the development cluster but also to manage the lifecycle of the development cluster as well.</p>\n</li>\n</ul>\n</div>\n<table id=\"tasks-build\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 1. Build &amp; Deployment Tasks</caption>\n<colgroup>\n<col style=\"width: 25%;\">\n<col style=\"width: 75%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Task</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeBuild\"><strong>k8sBuild</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Build images</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubePush\"><strong>k8sPush</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Pushes the built images to the container image registry</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeResource\"><strong>k8sResource</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generate resource manifests for your application</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeApply\"><strong>k8sApply</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Applies the generated resources to the connected cluster</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeHelm\"><strong>k8sHelm</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generate Helm charts for your application</p></td>\n</tr>\n</tbody>\n</table>\n<table id=\"tasks-develop\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 2. Development Tasks</caption>\n<colgroup>\n<col style=\"width: 25%;\">\n<col style=\"width: 75%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Task</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeDebug\"><strong>k8sDebug</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Debug your Java app running on the cluster</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeLog\"><strong>k8sLog</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Show the logs of your Java app running on the cluster</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkubeUndeploy\"><strong>k8sUndeploy</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Deletes the kubernetes resources that you deployed via the <a href=\"#jkubeApply\"><strong>k8sApply</strong></a> task</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"sect2\">\n<h3 id=\"task-overview-build\">3.1. Build And Deployment Tasks</h3>\n<div class=\"sect3\">\n<h4 id=\"jkubeBuild\">3.1.1. <strong>k8sBuild</strong></h4>\n<div class=\"paragraph\">\n<p>This task is for building container images for your application.</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"build-kubernetes\">Kubernetes Build</h5>\n<div class=\"paragraph\">\n<p>A normal Docker build is performed by default.For Kubernetes builds the kubernetes-gradle-plugin uses the Docker remote API so the URL of your Docker Daemon must be specified.The URL can be specified by the dockerHost or machine configuration, or by the <code>DOCKER_HOST</code> environment variable.</p>\n</div>\n<div class=\"paragraph\">\n<p>The Docker remote API supports communication via SSL and authentication with certificates.The path to the certificates can be specified by the certPath or machine configuration, or by the <code>DOCKER_CERT_PATH</code> environment variable.</p>\n</div>\n<div class=\"paragraph\">\n<p>If you don&#8217;t have access to docker daemon, you can change build strategy using <code>buildStrategy</code> option in Groovy configuration like this:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example of overriding default build strategy</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    buildStrategy = 'jib'\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>These are the different options supported by <code>buildStrategy</code>:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 3. JKube Build Strategies</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildStrategy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Description</strong></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>docker</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Docker build with a binary source</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jib</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Deamonless container image creation using <a href=\"https://github.com/GoogleContainerTools/jib\">JIB</a> build</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>kubernetes-gradle-plugin by default tries to build up an opinionated <a href=\"#config-image\">Image Configuration</a> by inspecting <code>build.gradle</code>.\nYou can also provide your own <a href=\"#dockerfile-scenario\">Dockerfile</a> or provide Custom ImageConfiguration via <a href=\"#groovy-scenario-image\">Groovy DSL configuration</a>.</p>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubePush\">3.1.2. <strong>k8sPush</strong></h4>\n<div class=\"paragraph\">\n<p>This task uploads images to the registry which have a <code>build</code> configuration section.\nThe images to push can be restricted with the global option <code>filter</code> (see <a href=\"#build-configuration\">Build Goal Configuration</a> for details).\nThe registry to push is by default <code>docker.io</code> but can be specified as part of the images&#8217;s <code>name</code> the Docker way.\nE.g. <code>docker.test.org:5000/data:1.5</code> will push the image <code>data</code> with tag <code>1.5</code> to the registry <code>docker.test.org</code> at port\n<code>5000</code>.\nRegistry credentials (i.e. username and password) can be specified in multiple ways as described in section <a href=\"#authentication\">Authentication</a>.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeResource\">3.1.3. <strong>k8sResource</strong></h4>\n<div class=\"paragraph\">\n<p>This task generates Kubernetes resources based on your project.\nIt can either be opinionated defaults or based on the configuration provided in Groovy DSL configuration or resource fragments in <code>src/main/jkube</code>.\nGenerated resources are in <code>build/classes/java/main/META-INF/jkube/kubernetes</code> directory.\nYou can find all Groovy DSL configuration options for k8sResource in <a href=\"#kuberetes-resource-configuration\">Kubernetes Resource configuration</a> section.</p>\n</div>\n<div class=\"paragraph\">\n<p>Resource task also validates the generated resource descriptors using API specification of <a href=\"https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json\">Kubernetes</a>.\nYou can see configuration options regarding Kubernetes resource validation in <a href=\"#global-configuration\">Global Configuration</a> section.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeApply\">3.1.4. <strong>k8sApply</strong></h4>\n<div class=\"paragraph\">\n<p>This task applies the resources created with <a href=\"#jkubeResource\"><strong>k8sResource</strong></a> to a connected Kubernetes cluster.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sApply</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeHelm\">3.1.5. <strong>k8sHelm</strong></h4>\n<div class=\"paragraph\">\n<p>This task is for creating\n<a href=\"https://helm.sh/docs/topics/charts\">Helm charts</a>\nfor your Gradle project so that you can install, update or delete your app in Kubernetes\nusing <a href=\"https://github.com/helm/helm\">Helm</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>For creating a Helm chart you simply call <code>k8sHelm</code> task on the command line:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sResource k8sHelm</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The <code>k8sResource</code> goal is required to create the resource descriptors which are included in the Helm chart.\nIf you have already built the resource then you can omit this task.</p>\n</div>\n<div class=\"paragraph\">\n<p>The configuration is defined in a <code>helm</code> section within the plugin&#8217;s configuration:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example Helm configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n  helm {\n    chart = 'Jenkins'\n    keywords = ['ci', 'cd', 'server']\n    dependencies = [{\n      name = 'ingress-nginx'\n      version = '1.26.0'\n      repository = 'https://kubernetes.github.io/ingress-nginx'\n    }]\n  }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This configuration section knows the following sub-elements in order to configure your Helm chart.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 4. Helm configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>chart</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart name.</p>\n<p class=\"tableblock\">Defaults to project name.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.chart</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>version</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart SemVer version.</p>\n<p class=\"tableblock\">Defaults to project version</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.version</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>description</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart single-sentence description.</p>\n<p class=\"tableblock\">Defaults to project description.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.description</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>home</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart URL for this project&#8217;s home page.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.home</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>sources</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart list of URLs to source code for this project.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>maintainers</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart list of maintainers (name+email).</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>icon</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart URL to an SVG or PNG image to be used as an icon, default is extracted from the kubernetes manifest\n  (<code>kubernetes.yml</code>) <code>jkube.io/iconUrl</code> annotation if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.icon</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>keywords</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Comma separated list of keywords to add to the chart.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>engine</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The template engine to use.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>additionalFiles</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The list of additional files to be included in the Chart archive. Any file named <code>README</code> or <code>LICENSE</code> will <strong>always</strong>\n  be included by default.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>type</strong> / <strong>types</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Platform for which to generate the chart. By default this is <code>kubernetes</code>, but can be also <code>openshift</code> for using\n  OpenShift specific resources in the chart. You can also add both values as a comma separated list.</p>\n<p class=\"tableblock\">  <em>Please note that there is no OpenShift support yet for charts, so this is experimental.</em></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.type</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>sourceDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to find the resource descriptors generated with <code>k8sResource</code>.\n  By default this is <code>${basedir}/build/classes/java/main/classes/META-INF/jkube</code>, which is also the output directory used by <code>k8sResource</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.sourceDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>outputDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to create the Helm chart, which is <code>${basedir}/build/jkube/helm</code> by default for Kubernetes\n  and <code>${basedir}/build/jkube/helmshift</code> for OpenShift.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.outputDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tarballOutputDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to create the the Helm chart archive, which is <code>${basedir}/build</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.tarballOutputDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>chartExtension</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Helm chart file extension (<code>tgz</code>, <code>tar.bz</code>, <code>tar.bzip2</code>, <code>tar.bz2</code>), default value is <code>tar.gz</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.chartExtension</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dependencies</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The list of dependencies for this chart</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>In a next step you can install this via the <a href=\"https://github.com/helm/helm/releases\">helm command line tool</a> as follows:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">helm install nameForChartInRepository build/jkube/helm/${chartName}/Kubernetes</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>or</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">helm install build/jkube/helm/${chartName}/Kubernetes --generate-name</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>In addition, this task will also create a tar-archive below <code>${basedir}/build</code> which contains the chart with its template.\nThis tar is added as an artifact with classifier <code>helm</code> to the build (<code>helmshift</code> for the OpenShift mode).</p>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"task-overview-develop\">3.2. Development Tasks</h3>\n<div class=\"sect3\">\n<h4 id=\"jkubeDebug\">3.2.1. <strong>k8sDebug</strong></h4>\n<div class=\"paragraph\">\n<p>This task enables debugging in your Java app and then port forwards from localhost to the latest running pod of your app so that you can easily debug your app from your Java IDE.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sDebug</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then follow the on screen instructions.</p>\n</div>\n<div class=\"paragraph\">\n<p>The default debug port is <code>5005</code>.If you wish to change the local port to use for debugging then pass in the <code>jkube.debug.port</code> parameter:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sDebug -Djkube.debug.port=8000</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then in your IDE you start a Remote debug execution using this remote port using localhost and you should be able to set breakpoints and step through your code.</p>\n</div>\n<div class=\"paragraph\">\n<p>This lets you debug your apps while they are running inside a Kubernetes cluster - for example if you wish to debug a REST endpoint while another pod is invoking it.</p>\n</div>\n<div class=\"paragraph\">\n<p>Debug is enabled via the <code>JAVA_ENABLE_DEBUG</code> environment variable being set to <code>true</code>.This environment variable is used for all the standard Java docker images used by Spring Boot, flat classpath and executable JAR projects and Wildfly Swarm.If you use your own custom docker base image you may wish to also respect this environment variable too to enable debugging.</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"_speeding_up_debugging\">Speeding up debugging</h5>\n<div class=\"paragraph\">\n<p>By default the <code>k8sDebug</code> task has to edit your Deployment to enable debugging then wait for a pod to start.It might be in development you frequently want to debug things and want to speed things up a bit.</p>\n</div>\n<div class=\"paragraph\">\n<p>If so you can enable debug mode for each build via the <code>jkube.debug.enabled</code> property.</p>\n</div>\n<div class=\"paragraph\">\n<p>e.g. you can pass this property on the command line:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sResource k8sApply -Djkube.debug.enabled=true</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then whenever you type the <code>k8sDebug</code> task there is no need for the gradle task to edit the <code>Deployment</code> and wait for a pod to restart; we can immediately start debugging when you type:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sDebug</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect4\">\n<h5 id=\"_debugging_with_suspension\">Debugging with suspension</h5>\n<div class=\"paragraph\">\n<p>The <code>k8sDebug</code> task allows to attach a remote debugger to a running container, but the application is free to execute when the debugger is not attached.\nIn some cases, you may want to have complete control on the execution, e.g. to investigate the application behavior at startup. This can be done using the <code>jkube.debug.suspend</code> flag:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sDebug -Djkube.debug.suspend</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The suspend flag will set the <code>JAVA_DEBUG_SUSPEND</code> environment variable to <code>true</code> and <code>JAVA_DEBUG_SESSION</code> to a random number in your deployment.\nWhen the <code>JAVA_DEBUG_SUSPEND</code> environment variable is set, standard docker images will use <code>suspend=y</code> in the JVM startup options for debugging.</p>\n</div>\n<div class=\"paragraph\">\n<p>The <code>JAVA_DEBUG_SESSION</code> environment variable is always set to a random number (each time you run the debug task with the suspend flag) in order to tell Kubernetes to restart the pod.\nThe remote application will start only after a remote debugger is attached. You can use the remote debugging feature of your IDE to connect (on <code>localhost</code>, port <code>5005</code> by default).</p>\n</div>\n<div class=\"admonitionblock warning\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-warning\" title=\"Warning\"></i>\n</td>\n<td class=\"content\">\nThe <code>jkube.debug.suspend</code> flag will disable readiness probes in the Kubernetes deployment in order to start port-forwarding during the early phases of application startup\n</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeLog\">3.2.2. <strong>k8sLog</strong></h4>\n<div class=\"paragraph\">\n<p>This task tails the log of the app that you deployed via the <a href=\"#jkube:deploy\">k8sApply</a> task</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>You can then terminate the output by hitting <code>Ctrl+C</code></p>\n</div>\n<div class=\"paragraph\">\n<p>If you wish to get the log of the app and then terminate immediately then try:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog -Djkube.log.follow=false</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This lets you pipe the output into grep or some other tool</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog -Djkube.log.follow=false | grep Exception</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If your app is running in multiple pods you can configure the pod name to log via the <code>jkube.log.pod</code> property, otherwise it defaults to the latest pod:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog -Djkube.log.pod=foo</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If your pod has multiple containers you can configure the container name to log via the <code>jkube.log.container</code> property, otherwise it defaults to the first container:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sLog -Djkube.log.container=foo</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"jkubeUndeploy\">3.2.3. <strong>k8sUndeploy</strong></h4>\n<div class=\"paragraph\">\n<p>This task is for deleting the kubernetes resources that you deployed via the  <a href=\"#jkubeApply\">k8sApply</a> or <a href=\"#jkube:deploy\">k8sDeploy</a> tasks.</p>\n</div>\n<div class=\"paragraph\">\n<p>It iterates through all the resources generated by the <a href=\"#jkubeResource\">k8sResource</a> task and deletes them from your current Kubernetes cluster.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle k8sUndeploy</code></pre>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"groovy-configuration\">4. Gradle Groovy DSL Configuration</h2>\n<div class=\"sectionbody\">\n<div class=\"sect2\">\n<h3 id=\"global-configuration\">4.1. Global Configuration</h3>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 5. Global configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>apiVersion</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Use this variable if you are using an older version of docker not compatible with the current default use to\ncommunicate with the server.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.apiVersion</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>authConfig</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Authentication information when pulling from or pushing to Docker registry. There is a dedicated section\n  <a href=\"#authentication\">Authentication</a> for how to do security.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>access</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Group of configuration parameters to connect to Kubernetes/OpenShift cluster.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>autoPull</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Decide how to pull missing base images or images to start:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>on</code> : Automatic download any missing images (default)</p>\n</li>\n<li>\n<p><code>off</code> : Automatic pulling is switched off</p>\n</li>\n<li>\n<p><code>always</code> : Pull images always even when they already exist locally</p>\n</li>\n<li>\n<p><code>once</code> : For multi-module builds images are only checked once and pulled for the whole build.</p>\n</li>\n</ul>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.autoPull</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildRecreate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>If the effective build mode is <code>openshift</code> then this option decides how the OpenShift resource objects\nassociated with the build should be treated when they already exist:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>buildConfig</code> or <code>bc</code> : Only the BuildConfig is recreated</p>\n</li>\n<li>\n<p><code>imageStream</code> or <code>is</code> : Only the ImageStream is recreated</p>\n</li>\n<li>\n<p><code>all</code> : Both, BuildConfig and ImageStream are recreated</p>\n</li>\n<li>\n<p><code>none</code> : Neither BuildConfig nor ImageStream is recreated</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The default is <code>none</code>. If you provide the property without value then <code>all</code> is assumed, so everything gets recreated.</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.recreate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildSourceDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default directory that contains the assembly descriptor(s) used by the plugin. The default value is <code>src/main/docker</code>.\nThis option is only relevant for the <code>k8sBuild</code> task.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.source.dir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildStrategy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Defines what build strategy to choose while building container image.\nPossible values are <code>docker</code> and <code>jib</code> out of which <code>docker</code> is default.</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.strategy</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>certPath</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to SSL certificate when SSL is used for communicating with the Docker daemon. These certificates are normally\nstored in <code>~/.docker/</code>. With this configuration the path can be set explicitly. If not set, the fallback is first\ntaken from the environment variable <code>DOCKER_CERT_PATH</code> and then as last resort <code>~/.docker/</code>. The keys in this are\nexpected with it standard names <code>ca.pem</code>, <code>cert.pem</code> and <code>key.pem</code>.\nPlease refer to the <a href=\"https://docs.docker.com/articles/https\">Docker documentation</a> for more information about SSL\nsecurity with Docker.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.certPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>createNewResources</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Create new Kubernetes resources.</p>\n<p class=\"tableblock\">Defaults to <code>true</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.create</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>debugSuspend</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Disables readiness probes in Kubernetes Deployment in order to start port forwarding during early phases of application startup.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.debug.suspend</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>deletePodsOnReplicationControllerUpdate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Delete all the pods if we update a Replication Controller.</p>\n<p class=\"tableblock\">Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.deletePods</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerHost</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>The URL of the Docker Daemon. If this configuration option is not given, then the optional <code>&lt;machine&gt;</code> configuration\nsection is consulted. The scheme of the URL can be either given directly as <code>http</code> or <code>https</code>\ndepending on whether plain HTTP communication is enabled or SSL should\nbe used. Alternatively the scheme could be <code>tcp</code> in which case the\nprotocol is determined via the IANA assigned port: 2375 for <code>http</code>\nand 2376 for <code>https</code>. Finally, Unix sockets are supported by using\nthe scheme <code>unix</code> together with the filesystem path to the unix socket.</p>\n</div>\n<div class=\"paragraph\">\n<p>The discovery sequence used by the docker-maven-plugin to determine\nthe URL is:</p>\n</div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>\n<p>Value of <strong>dockerHost</strong> (<code>jkube.docker.host</code>)</p>\n</li>\n<li>\n<p>The Docker host associated with the docker-machine named in <code>&lt;machine&gt;</code>, i.e. the <code>DOCKER_HOST</code> from <code>docker-machine env</code>.</p>\n</li>\n<li>\n<p>The value of the environment variable <code>DOCKER_HOST</code>.</p>\n</li>\n<li>\n<p><code>unix:///var/run/docker.sock</code> if it is a readable socket.</p>\n</li>\n</ol>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.host</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>filter</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">In order to temporarily restrict the operation of plugin tasks this configuration option can be used.\nTypically this will be set via the system property <code>jkube.image.filter</code> when Gradle is called. The value can be a single\nimage name (either its alias or full name) or it can be a comma separated list with multiple image names. Any name\nwhich doesn&#8217;t refer an image in the configuration will be ignored.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.image.filter</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>failOnNoKubernetesJson</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Fail if there is no kubernetes json present.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.failOnNoKubernetesJson</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>failOnValidationError</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If value is set to <code>true</code> then any validation error will block the plugin execution. A warning will be printed\notherwise.</p>\n<p class=\"tableblock\">  Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.failOnValidationError</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ignoreServices</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Ignore Service resources while applying resources. This is particularly useful when in recreate mode to let you easily recreate all the ReplicationControllers and Pods but leave any service definitions alone to avoid changing the portalIP addresses and breaking existing pods using the service.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.ignoreServices</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"image-pull-policy\"></a> <strong>imagePullPolicy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Specify whether images should be pull when looking for base images while building or images for starting.\nThis property can take the following values (case insensitive):</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>IfNotPresent</code>: Automatic download any missing images (default)</p>\n</li>\n<li>\n<p><code>Never</code> : Automatic pulling is switched off always</p>\n</li>\n<li>\n<p><code>Always</code> : Pull images always even when they already exist locally.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>By default a progress meter is printed out on the console, which is omitted when using Maven in batch mode (option <code>-B</code>). A very simplified progress meter is provided when using no color output (i.e. with <code>-Djkube.useColor=false</code>).</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.imagePullPolicy</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>interpolateTemplateParameters</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Interpolate parameter values from <code>*template.yml</code> fragments in the generated resource list (<code>kubernetes.yml</code>).</p>\n<p class=\"tableblock\">  This is useful when using JKube in combination with Helm.</p>\n<p class=\"tableblock\">  Placeholders for variables defined in template files can be used in the different resource fragments. Helm generated\n  charts will contain these placeholders/parameters.</p>\n<p class=\"tableblock\">  For <code>resource</code> task, these placeholders are replaced in the\n  aggregated resource list YAML file (not in the individual generated resources) if this option is enabled.</p>\n<p class=\"tableblock\">  Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.interpolateTemplateParameters</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>jsonLogDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The folder we should store any temporary json files or results</p>\n<p class=\"tableblock\">Defaults to <code>${project.rootDir}/build/jkube/applyJson</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.jsonLogDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>kubernetesManifest</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The generated kubernetes YAML file.</p>\n<p class=\"tableblock\">  Defaults to <code>${basedir}/build/META-INF/jkube/kubernetes.yml</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.kubernetesManifest</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>kubernetesTemplate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">File or directory containing the Kubernetes YAML files to be included as Chart templates.</p>\n<p class=\"tableblock\">Defaults to <code>${basedir}/build/classes/java/main/META-INF/jkube/kubernetes</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.kubernetesTemplate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>localDebugPort</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default port available for debugging your application inside Kubernetes.</p>\n<p class=\"tableblock\">Defaults to <code>5005</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.debug.port</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logFollow</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Get follow logs for your application inside Kubernetes.</p>\n<p class=\"tableblock\">  Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.log.follow</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logContainerName</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Get logs of some specific container inside your application Deployment.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.log.container</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logPodName</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Get logs of some specific pod inside your application Deployment.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.log.pod</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>machine</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Docker machine configuration.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>maxConnections</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Number of parallel connections are allowed to be opened to the Docker Host. For parsing log output, a connection needs\nto be kept open (as well for the wait features), so don&#8217;t put that number to low. Default is 100 which should be\nsuitable for most of the cases.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.maxConnections</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>mergeWithDekorate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">When resource generation is delegated to Dekorate, should JKube resources be merged with Dekorate generated ones.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.mergeWithDekorate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>outputDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default output directory to be used by this plugin.\nThe default value is <code>build/docker</code> and is only used for the task <code>k8sBuild</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.target.dir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>offline</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether to try detecting Kubernetes Cluster or stay offline.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.offline</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>profile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Profile to which contains enricher and generators configuration. See <a href=\"#profiles\">Profiles</a> for details.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.profile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>pushRegistry</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The registry to use when pushing the image. See <a href=\"#registry\">Registry Handling</a> for\nmore details.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.push.registry</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>recreate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Update resources by deleting them first and then creating them again.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.recreate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>registry</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specify globally a registry to use for pulling and pushing images. See <a href=\"#registry\">Registry handling</a> for details.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.registry</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>pushRetries</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How often should a push be retried before giving up. This useful for flaky registries which tend to return 500 error codes from time to time.</p>\n<p class=\"tableblock\">Defaults to 0.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.push.retries</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>resourceEnvironment</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Environment name where resources are placed. For example, if you set this property to dev and resourceDir is the\ndefault one, plugin will look at <code>src/main/jkube/dev</code>.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.environment</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>resourceSourceDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Folder where to find project specific files.</p>\n<p class=\"tableblock\">  Defaults to <code>${project.rootDir}/src/main/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.resourceDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>resourceTargetDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The generated Kubernetes manifests target directory.</p>\n<p class=\"tableblock\">  Defaults to <code>${basedir}/build/classes/java/main/META-INF/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.targetDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>rollingUpgrades</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Use Rolling Upgrades to apply changes.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.rolling</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>servicesOnly</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Only process services so that those can be recursively created/updated first before creating/updating any pods and Replication Controllers.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.servicesOnly</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>serviceUrlWaitTimeSeconds</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Seconds to wait for a URL to be generated for a service</p>\n<p class=\"tableblock\">Defaults to <code>5</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.serviceUrl.waitSeconds</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skip</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">With this parameter the execution of this plugin can be skipped completely.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipApply</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set no resource maniefst would be applied to connected Kubernetes cluster.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.apply</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipBuild</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set not images will be build (which implies also <em>skip.tag</em>) with <code>k8sBuild</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.build</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipTag</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code> this plugin won&#8217;t add any tags to images that have been built with <code>k8sBuild</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.tag</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipMachine</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Skip using docker machine in any case</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.skip.machine</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipPush</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to true the plugin won’t push any images that have been built.</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.push</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipResourceValidation</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If value is set to <code>true</code> then resource validation is skipped. This may be useful if resource validation is failing\nfor some reason but you still want to continue the deployment.</p>\n<p class=\"tableblock\">  Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skipResourceValidation</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipTag</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to true this plugin won’t push any tags</p>\n<p class=\"tableblock\">Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.tag</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>useProjectClassPath</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Should we use the project&#8217;s compile time classpath to scan for additional enrichers/generators.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.useProjectClassPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>verbose</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Boolean attribute for switching on verbose output like the build steps when doing a Docker build. Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.verbose</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>workDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The JKube working directory. Defaults to <code>${project.build.directory}/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.workDir</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"_image_configuration\">4.2. Image Configuration</h3>\n<div class=\"paragraph\">\n<p>The configuration how images should be created are defined in a dedicated <code>images</code> sections. These are specified for each image within the <code>images</code> element of the configuration with one <code>image</code> element per image to use.</p>\n</div>\n<div class=\"paragraph\">\n<p>The <code>image</code> element can contain the following sub elements:</p>\n</div>\n<table id=\"config-image\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 6. Image Configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#image-name\"><strong>name</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Each <code>image</code> configuration has a mandatory, unique docker\nrepository <em>name</em>. This can include registry and tag parts, but also placeholder parameters. See below for a detailed explanation.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>alias</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Shortcut name for an image which can be used for\nidentifying the image within this configuration. This is used when\nlinking images together or for specifying it with the global <strong>image</strong> configuration element.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#registry\"><strong>registry</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Registry to use for this image. If the <code>name</code> already contains a registry this takes precedence. See <a href=\"#registry\">Registry handling</a> for more details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#config-image-build\"><strong>build</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Element which contains all the configuration aspects when doing a <a href=\"#jkubeBuild\">k8sBuild</a>. This element can be omitted if the image is only pulled from a registry e.g. as support for integration tests like database images.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>The <code>build</code> section is mandatory and is explained in <a href=\"#build-configuration\">below</a>.</p>\n</div>\n<div id=\"image-name\" class=\"paragraph\">\n<p>When specifying the image name in the configuration with the <code>name</code> field you can use several placeholders which are replaced during runtime by this plugin. In addition you can use regular Gradle properties which are resolved by Gradle itself.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 7. Image Names</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Placeholder</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%g</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The last part of the Gradle group name, sanitized so that it can be used as username on GitHub. Only the part after the last dot is used. E.g. for a group id <code>org.eclipse.jkube</code> this placeholder would insert <code>jkube</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%a</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A sanitized version of the artefact id so that it can be used as part of an Docker image name. I.e. it is converted to all lower case (as required by Docker)</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%v</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The project version.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%l</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If the project version ends with <code>-SNAPSHOT</code> then this placeholder is <code>latest</code>, otherwise its the full version (same as <code>%v</code>)</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%t</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If the project version ends with <code>-SNAPSHOT</code> this placeholder resolves to <code>snapshot-&lt;timestamp&gt;</code> where timestamp has the date format <code>yyMMdd-HHmmss-SSSS</code> (eg <code>snapshot-</code>). This feature is especially useful during development in oder to avoid conflicts when images are to be updated which are still in use. You need to take care yourself of cleaning up old images afterwards, though.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"build-configuration\">4.3. Build Configuration</h3>\n<div id=\"build-overview\" class=\"paragraph\">\n<p>Here are different modes how images can be built:</p>\n</div>\n<div class=\"paragraph\">\n<p>When using this mode, the Dockerfile is created on the fly with all instructions extracted from the configuration given.</p>\n</div>\n<div id=\"external-dockerfile\" class=\"paragraph\">\n<div class=\"title\">External Dockerfile or Docker archive</div>\n<p>Alternatively an external Dockerfile template or Docker archive can be used. This mode is switched on by using one of these three configuration options within</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><strong>contextDir</strong> specifies docker build context if an external dockerfile is located outside of Docker build context. If not specified, Dockerfile&#8217;s parent directory is used as build context.</p>\n</li>\n<li>\n<p><strong>dockerFile</strong> specifies a specific Dockerfile path. The Docker build context directory is set to <code>contextDir</code> if given. If not the directory by default is the directory in which the Dockerfile is stored.</p>\n</li>\n<li>\n<p><strong>dockerArchive</strong> specifies a previously saved image archive to load directly. If a <code>dockerArchive</code> is provided, no <code>dockerFile</code> must be given.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>All paths can be either absolute or relative paths. A relative path is looked up in <code>$projectDir/src/main/docker</code> by default. You can make it easily an absolute path by using <code>$projectDir</code> in your configuration.</p>\n</div>\n<div class=\"paragraph\">\n<p>However, you need to add the files on your own in the Dockerfile with an <code>ADD</code> or <code>COPY</code> command.\nThe files of the assembly are stored in a build context relative directory <code>maven/</code> but can be changed by changing the assembly name with the option <code>name</code> in the assembly configuration.</p>\n</div>\n<div class=\"paragraph\">\n<p>E.g. the files can be added with\n.Example</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-dockerfile\" data-lang=\"dockerfile\">COPY maven/ /my/target/directory</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>so that the assembly files will end up in <code>/my/target/directory</code> within the container.</p>\n</div>\n<div class=\"paragraph\">\n<p>If this directory contains a <code>.jkube-dockerignore</code> (or alternatively, a <code>.jkube-dockerexclude</code> file), then it is used\nfor excluding files for the build. If the file doesn&#8217;t exist, or it&#8217;s empty, then there are no exclusions.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each line in this file is treated as an entry in the <code>excludes</code> assembly <code>fileSet</code> <a href=\"#build-assembly-inline\">configuration </a>.\nFiles can be referenced by using their relative path name.\nWildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</div>\n<div class=\"paragraph\">\n<p>It is similar to <code>.dockerignore</code> when using Docker but has a slightly different syntax (hence the different name).</p>\n</div>\n<div class=\"paragraph\">\n<p><a href=\"#ex-build-dockerexclude\">Example <code>.jkube-dockerexclude</code> or <code>.jkube-dockerignore</code></a> is an  example which excludes all compiled Java classes.</p>\n</div>\n<div id=\"ex-build-dockerexclude\" class=\"exampleblock\">\n<div class=\"title\">Example 1. Example <code>.jkube-dockerexclude</code> or <code>.jkube-dockerignore</code></div>\n<div class=\"content\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code>build/classes/**  <i class=\"conum\" data-value=\"1\"></i><b>(1)</b></code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Exclude all compiled classes</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If this directory contains a <code>.jkube-dockerinclude</code> file, then it is used for including only those files for the build.\nIf the file doesn&#8217;t exist or it&#8217;s empty, then everything is included.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each line in this file is treated as an entry in the <code>includes</code> assembly <code>fileSet</code> <a href=\"#build-assembly-inline\">configuration </a>.\nFiles can be referenced by using their relative path name.\nWildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</div>\n<div class=\"paragraph\">\n<p><a href=\"#ex-build-dockerinclude\">Example <code>.jkube-dockerinclude</code></a> shows how to include only jar file that have build to the Docker build context.</p>\n</div>\n<div id=\"ex-build-dockerinclude\" class=\"exampleblock\">\n<div class=\"title\">Example 2. Example <code>.jkube-dockerinclude</code></div>\n<div class=\"content\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code>build/libs/*.jar <i class=\"conum\" data-value=\"1\"></i><b>(1)</b></code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Only add jar file to you Docker build context.</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Except for the <a href=\"#build-assembly\">assembly configuration</a> all other configuration options are ignored for now.</p>\n</div>\n<div id=\"simple-dockerfile-build\" class=\"paragraph\">\n<div class=\"title\">Simple Dockerfile build</div>\n<p>When only a single image should be built with a Dockerfile no Groovy DSL configuration is needed at all.\nAll what need to be done is to place a <code>Dockerfile</code> into the top-level module directory, alongside to <code>build.gradle</code>.\nYou can still configure <a href=\"#global-configuration\">global aspects</a> in the plugin configuration, but as soon as you add an <code>image</code> in the Groovy DSL configuration, you need to configure also the build explicitly.</p>\n</div>\n<div class=\"paragraph\">\n<p>The image name is by default set from the Gradle coordinates (<code>%g/%a:%l</code>, see <a href=\"#image-name\">Image Name </a> for an explanation of the params which are essentially the Gradle&#8217;s group, project name and project version)\nThis name can be set with the property <code>jkube.image.name</code> in <code>gradle.properties</code>.</p>\n</div>\n<div id=\"build-filtering\" class=\"paragraph\">\n<div class=\"title\">Filtering</div>\n<p>kubernetes-gradle-plugin filters given Dockerfile with Gradle properties, much like the <code>maven-resource-plugin</code> does. Filtering is enabled by default and can be switched off with a build config <code>filter='false'</code>. Properties which we want to replace are specified with the <code>${..}</code> syntax.\nReplacement includes properties set in the build, command-line properties, and system properties. Unresolved properties remain untouched.</p>\n</div>\n<div class=\"paragraph\">\n<p>This partial replacement means that you can easily mix it with Docker build arguments and environment variable reference, but you need to be careful.\nIf you want to be more explicit about the property delimiter to clearly separate Docker properties and Gradle properties you can redefine the delimiter.\nIn general, the <code>filter</code> option can be specified the same way as delimiters in the resource plugin.\nIn particular,  if this configuration contains a * then the parts left, and right of the asterisks are used as delimiters.</p>\n</div>\n<div class=\"paragraph\">\n<p>For example, the default <code>filter='${*}'</code> parse Gradle properties in the format that we know.\nIf you specify a single character for <code>filter</code> then this delimiter is taken for both, the start and the end.\nE.g a <code>filter='@'</code> triggers on parameters in the format <code>@&#8230;&#8203;@</code>.\nUse something like this if you want to clearly separate from Docker builds args.\nThis form of property replacement works for Dockerfile only.\nFor replacing other data in other files targeted for the Docker image, please use the <a href=\"#build-assembly\">assembly configuration</a> with filtering to make them available in the docker build context.</p>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Example</div>\n<p>The following example replaces all properties in the format <code>@property@</code> within the Dockerfile.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = 'user/demo'\n            build {\n                filter = '@'\n            }\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>All build relevant configuration is contained in the <code>build</code> section\nof an image configuration. The following configuration options are supported:</p>\n</div>\n<table id=\"config-image-build\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 8. Build configuration (<a href=\"#config-image\">image</a>)</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#config-image-build-assembly\"><strong>assembly</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specifies the assembly configuration as described in <a href=\"#build-assembly\">Build Assembly</a></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-buildargs\"><strong>args</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Map specifying the value of <a href=\"https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg\">Docker build args</a>\nwhich should be used when building the image with an external Dockerfile which uses build arguments. The key-value syntax is the same as when defining Gradle properties (or <code>labels</code> or <code>env</code>).\nThis argument is ignored when no external Dockerfile is used. Build args can also be specified as properties as\ndescribed in <a href=\"#build-buildargs\">Build Args</a></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildOptions</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Map specifying the build options to provide to the docker daemon when building the image. These options map to the ones listed as query parameters in the\n<a href=\"https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#build-image-from-a-dockerfile\">Docker Remote API</a> and are restricted to simple options\n(e.g.: memory, shmsize). If you use the respective configuration options for build options natively supported by the build configuration (i.e. <code>noCache</code>, <code>cleanup=remove</code> for buildoption <code>forcerm=1</code> and <code>args</code> for build args) then these will override any corresponding options given here. The key-value syntax is the same as when defining environment variables or labels as described in <a href=\"#misc-env\">Setting Environment Variables and Labels</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>cleanup</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Cleanup dangling (untagged) images after each build (including any containers created from them). Default is <code>try</code> which tries to remove the old image, but doesn&#8217;t fail the build if this is not possible because e.g. the image is still used by a running container. Use <code>remove</code> if you want to fail the build and <code>none</code> if no cleanup is requested.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"context-dir\"></a><strong>contextDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to a directory used for the build&#8217;s context. You can specify the <code>Dockerfile</code> to use with <strong>dockerFile</strong>, which by default is the Dockerfile found in the <code>contextDir</code>. The Dockerfile can be also located outside of the <code>contextDir</code>, if provided with an absolute file path. See <a href=\"#external-dockerfile\">External Dockerfile</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-startup\"><strong>cmd</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A command to execute by default (i.e. if no command is provided when a container for this image is started). See <a href=\"#misc-startup\">Startup Arguments</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>compression</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The compression mode how the build archive is transmitted to the docker daemon (<code>k8sBuild</code>) and how docker build archives are attached to this build as sources. The value can be <code>none</code> (default), <code>gzip</code> or <code>bzip2</code>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerFile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to a <code>Dockerfile</code> which also triggers <em>Dockerfile mode</em>. See <a href=\"#external-dockerfile\">External Dockerfile</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerArchive</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to a saved image archive which is then imported. See <a href=\"#external-dockerfile\">Docker archive</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-startup\"><strong>entryPoint</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">An entrypoint allows you to configure a container that will run as an executable. See <a href=\"#misc-startup\">Startup Arguments</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-env\"><strong>env</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The environments as described in <a href=\"#misc-env\">Setting Environment Variables and Labels</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>filter</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Enable and set the delimiters for property replacements. By default properties in the format <code>${..}</code> are replaced with Gradle properties. You can switch off property replacement by setting this property to <code>false</code>. When using a single char like <code>@</code> then this is used as a delimiter (e.g <code>@&#8230;&#8203;@</code>). See <a href=\"#build-filtering\">Filtering</a> for more details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"build-config-from\"></a><strong>from</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The base image which should be used for this image. If not given this default to <code>busybox:latest</code> and is suitable for a pure data image.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"build-config-from-ext\"></a><strong>fromExt</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Extended definition for a base image. This field holds a map of defined in <code>key = \"value\"</code> format. The known keys are:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>name</code> : Name of the base image</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>A provided <code>from</code> takes precedence over the name given here. This tag is useful for extensions of this plugin.</p>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>imagePullPolicy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specific pull policy for the base image. This overwrites any global pull policy.\nSee the global configuration option <a href=\"#image-pull-policy\">imagePullPolicy</a> for the possible values and the default.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-env\"><strong>labels</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels  as described in <a href=\"#misc-env\">Setting Environment Variables and Labels</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>maintainer</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The author (<code>MAINTAINER</code>) field for the generated image</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>noCache</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Don&#8217;t use Docker&#8217;s build cache. This can be overwritten by setting a system property <code>docker.noCache</code> when running Gradle.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>cacheFrom</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A list of <code>image</code> elements specifying image names to use as cache sources.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>optimise</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">if set to true then it will compress all the <code>runCmds</code> into a single <code>RUN</code> directive so that only one image layer is created.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ports</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The exposed ports which is a list of <code>port</code> elements, one for each port to expose. Whitespace is trimmed from each element and empty elements are ignored. The format can be either pure numerical (\"8080\") or with the protocol attached (\"8080/tcp\").</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>shell</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Shell to be used for the <strong>runCmds</strong>. It contains <strong>arg</strong> elements which are defining the executable and its params.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>runCmds</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Commands to be run during the build process. It contains <strong>run</strong> elements which are passed to the shell. Whitespace is trimmed from each element and empty elements are ignored. The run commands are inserted right after the assembly and after <strong>workdir</strong> into the Dockerfile.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skip</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">if set to true disables building of the image. This config option is best used together with a gradle property</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipTag</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code> this plugin won&#8217;t add any tags to images.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tags</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of additional <code>tag</code> elements with which an image is to be tagged after the build. Whitespace is trimmed from each element and empty elements are ignored.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>user</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">User to which the Dockerfile should switch to the end (corresponds to the <code>USER</code> Dockerfile directive).</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>volumes</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of <code>volume</code> elements to create a container volume. Whitespace is trimmed from each element and empty elements are ignored.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>workdir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Directory to change to when starting the container.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"build-assembly\">4.4. Assembly</h3>\n<div class=\"paragraph\">\n<p>The <code>assembly</code> element within <code>build</code> element defines how build artifacts and other files\ncan be added to the Docker image.</p>\n</div>\n<table id=\"config-image-build-assembly\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 9. Assembly Configuration (<a href=\"#config-image\">image </a> : <a href=\"#config-image-build\">build </a>)</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>name</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Assembly name, which is <code>maven</code> by default. This name is used for the archives and directories created during the build.\n  This directory holds the files specified by the assembly. If an <a href=\"#external-dockerfile\">external Dockerfile</a> is used then\n  this name is also the relative directory which contains the assembly files.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>targetDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Directory under which the files and artifacts contained in the assembly will be copied within the container.\n  The default value for this is <code>${assembly.name}</code>, so <code>/maven</code> if <strong>name</strong> is not set to a different value.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-assembly-layer\"><strong>inline</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><em>Deprecated: Use layers instead</em>\n  Inlined assembly descriptor as described in <a href=\"#build-assembly-layer\">Assembly - Inline</a> below.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-assembly-layer\"><strong>layers</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Each of the layers that the assembly will contain as described in\n  <a href=\"#build-assembly-layer\">Assembly - Layer</a> below.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>exportTargetDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specification whether the <code>targetDir</code> should be exported as a volume. This value is <code>true</code> by default except in the\n  case the <code>targetDir</code> is set to the container root (<code>/</code>). It is also <code>false</code> by default when a base image is used with\n  <code>from</code> since exporting makes no sense in this case and will waste disk space unnecessarily.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>excludeFinalOutputArtifact</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">By default, the project&#8217;s final artifact will be included in the assembly, set this flag to true in case the\n  artifact should be excluded from the assembly.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>mode</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Mode how the how the assembled files should be collected:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>dir</code> : Files are simply copied (default),</p>\n</li>\n<li>\n<p><code>tar</code> : Transfer via tar archive</p>\n</li>\n<li>\n<p><code>tgz</code> : Transfer via compressed tar archive</p>\n</li>\n<li>\n<p><code>zip</code> : Transfer via ZIP archive</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The archive formats have the advantage that file permission can be preserved better (since the copying is independent from the underlying files systems)</p>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>permissions</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Permission of the files to add:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>ignore</code> to use the permission as found on files regardless on any\nassembly configuration</p>\n</li>\n<li>\n<p><code>keep</code> to respect the assembly provided permissions</p>\n</li>\n<li>\n<p><code>exec</code> for setting the executable bit on all files (required for Windows when using an assembly mode <code>dir</code>)</p>\n</li>\n<li>\n<p><code>auto</code> to let the plugin select <code>exec</code> on Windows and <code>keep</code> on others.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p><code>keep</code> is the default value.</p>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tarLongFileMode</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Sets the TarArchiver behaviour on file paths with more than 100 characters length. Valid values are: \"warn\"(default), \"fail\", \"truncate\", \"gnu\", \"posix\", \"posix_warn\" or \"omit\"</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>user</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>User and/or group under which the files should be added. The user must already exist in the base image.</p>\n</div>\n<div class=\"paragraph\">\n<p>It has the general format <code>user[:group[:run-user]]</code>. The user and group can be given either as numeric user- and group-id or as names. The group id is optional.</p>\n</div>\n<div class=\"paragraph\">\n<p>If a third part is given, then the build changes to user <code>root</code> before changing the ownerships, changes the ownerships and then change to user <code>run-user</code> which is then used for the final command to execute. This feature might be needed, if the base image already changed the user (e.g. to 'jboss') so that a <code>chown</code> from root to this user would fail.</p>\n</div>\n<div class=\"paragraph\">\n<p>For example, the image <code>jboss/wildfly</code> use a \"jboss\" user under which all commands are executed. Adding files in Docker always happens under the UID root. These files can only be changed to \"jboss\" is the <code>chown</code> command is executed as root. For the following commands to be run again as \"jboss\" (like the final <code>standalone.sh</code>), the plugin switches back to user <code>jboss</code> (this is this \"run-user\") after changing the file ownership. For this example a specification of\n<code>jboss:jboss:jboss</code> would be required.</p>\n</div></div></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>In the event you do not need to include any artifacts with the image, you may safely omit this element from the configuration.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"build-assembly-layer\">4.4.1. Assembly - Inline/Layer</h4>\n<div class=\"paragraph\">\n<p>Inlined assembly description with a format very similar to\n<a href=\"https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html\">Maven Assembly Plugin</a>.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Partial configuration example of an inline/layer element</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">assembly {\n    targetDir = \"/deployments\"\n    layers = [{\n        fileSets = [{\n            directory = file(\"${project.rootDir}/build/dependencies\")\n            outputDirectory = \"static\"\n       }]\n    }]\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The <code>layers</code> element within the <code>assembly</code> element can have one or more\n<code>layer</code> elements with a Groovy DSL structure that supports the following configuration options:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 10. Assembly - Inline/Layer (<a href=\"#config-image\">image </a> : <a href=\"#config-image-build\">build </a> : <a href=\"#config-image-build-assembly\">assembly </a>)</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>id</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Unique ID for the layer.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>files</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>List of files for the layer.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each file has the following fields:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>source</code>: Absolute or relative path from the project&#8217;s directory of the file to be included in the assembly.</p>\n</li>\n<li>\n<p><code>outputDirectory</code>: Output directory relative to the root of the root directory of the assembly.</p>\n</li>\n<li>\n<p><code>destName</code>: Destination filename in the outputDirectory.</p>\n</li>\n<li>\n<p><code>fileMode</code>: Similar to a UNIX permission, sets the file mode of the file included.</p>\n</li>\n</ul>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>fileSets</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>List of filesets for the layer.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each fileset has the following fields:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>directory</code>: Absolute or relative location from the project&#8217;s directory.</p>\n</li>\n<li>\n<p><code>outputDirectory</code>: Output directory relative to the root of the root directory of the assembly fileSet.</p>\n</li>\n<li>\n<p><code>includes</code>:  A set of files and directories to include.</p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If none is present, then everything is included.</p>\n</li>\n<li>\n<p>Files can be referenced by using their complete path name.</p>\n</li>\n<li>\n<p>Wildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</li>\n</ul>\n</div>\n</li>\n<li>\n<p><code>excludes</code>: A set of files and directory to exclude.</p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If none is present, then there are no exclusions.</p>\n</li>\n<li>\n<p>Wildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</li>\n</ul>\n</div>\n</li>\n<li>\n<p><code>fileMode</code>: Similar to a UNIX permission, sets the file mode of the files included.</p>\n</li>\n<li>\n<p><code>directoryMode</code>: Similar to a UNIX permission, sets the directory mode of the directories included.</p>\n</li>\n</ul>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>baseDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Base directory from which to resolve the Assembly&#8217;s layer files and filesets.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"misc-env\">4.5. Environment and Labels</h3>\n<div class=\"paragraph\">\n<p>When creating a container one or more environment variables can be set via configuration with the <code>env</code> parameter</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">env {\n    JAVA_HOME = \"/opt/jdk8\"\n    CATALINA_OPTS = \"-Djava.security.egd=file:/dev/./urandom\"\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If you put this configuration into profiles you can easily create various test variants with a single image (e.g. by switching the JDK or whatever).</p>\n</div>\n<div class=\"paragraph\">\n<p>It is also possible to set the environment variables from the outside of the plugin&#8217;s configuration with the parameter <code>envPropertyFile</code>. If given, this property file is used to set the environment variables where the keys and values specify the environment variable. Environment variables specified in this file override any environment variables specified in the configuration.</p>\n</div>\n<div class=\"paragraph\">\n<p>Labels can be set inline the same way as environment variables:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">labels {\n     labelWithValue = \"foo\"\n     version = \"${project.version}\"\n     artifactId = \"${project.name}\"\n}</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"misc-startup\">4.6. Startup Arguments</h3>\n<div class=\"paragraph\">\n<p>Using <code>entryPoint</code> and <code>cmd</code> it is possible to specify the <a href=\"https://docs.docker.com/reference/builder/#entrypoint\">entry point</a>\nor <a href=\"https://docs.docker.com/reference/builder/#cmd\">cmd</a> for a container.</p>\n</div>\n<div class=\"paragraph\">\n<p>The difference is, that an <code>entrypoint</code> is the command that always be executed, with the <code>cmd</code> as argument. If no <code>entryPoint</code> is provided, it defaults to <code>/bin/sh -c</code> so any <code>cmd</code> given is executed with a shell. The arguments given to <code>docker run</code> are always given as arguments to the\n<code>entrypoint</code>, overriding any given <code>cmd</code> option. On the other hand if no extra arguments are given to <code>docker run</code> the default <code>cmd</code> is used as argument to <code>entrypoint</code>.</p>\n</div>\n<div class=\"sidebarblock\">\n<div class=\"content\">\n<div class=\"paragraph\">\n<p>See this <a href=\"http://stackoverflow.com/questions/21553353/what-is-the-difference-between-cmd-and-entrypoint-in-a-dockerfile\">stackoverflow question</a> for a detailed explanation.</p>\n</div>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>An entry point or command can be specified in two alternative formats:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 11. Entrypoint and Command Configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Mode</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>shell</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Shell form in which the whole line is given to <code>shell -c</code> for interpretation.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>exec</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of arguments (with inner <code>&lt;args&gt;</code>) arguments which will be given to the <code>exec</code> call directly without any shell interpretation.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>Either shell or params should be specified.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">entryPoint {\n    // Shell Form\n    shell = 'java -jar maven/hello-world-1.5.1.jar'\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>or</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">entryPoint {\n    // exec form\n    exec = ['java','-jar','maven/hello-world-1.5.1.jar']\n}</code></pre>\n</div>\n</div>\n<div class=\"dlist\">\n<dl>\n<dt class=\"hdlist1\">INFO</dt>\n<dd>\n<p>Startup arguments are not used in S2I builds</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"build-buildargs\">4.7. Build Args</h3>\n<div id=\"property-buildargs\" class=\"paragraph\">\n<p>As described in section <a href=\"#build-configuration\">Configuration</a> for external Dockerfiles <a href=\"https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg\">Docker build arg</a> can be used. In addition to the\nconfiguration within the plugin configuration you can also use properties to specify them:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Set a system property when running Gradle, eg.: <code>-Ddocker.buildArg.http_proxy=http://proxy:8001</code>. This is especially\nuseful when using predefined Docker arguments for setting proxies transparently.</p>\n</li>\n<li>\n<p>Set a project property within the <code>build.gradle</code>, eg.:</p>\n</li>\n</ul>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-properties\" data-lang=\"properties\">docker.buildArg.myBuildArg = myValue</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Please note that the system property setting will always override the project property. Also note that for all\nproperties which are not Docker <a href=\"https://docs.docker.com/engine/reference/builder/#arg\">predefined</a> properties, the\nexternal Dockerfile must contain an <code>ARGS</code> instruction.</p>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"kuberetes-resource-configuration\">4.8. Kubernetes Resources Configuration</h3>\n<div class=\"paragraph\">\n<p>This section includes Groovy DSL configuration options you can use to tweak generated Kubernetes manifests.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"labels-annotation-configuration\">4.8.1. Labels/Annotations</h4>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 12. Label and annotation configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 85.7143%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>all</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">All entries specified in the <code>all</code> sections are applied to all resource objects created.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>deployment</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>Deployment</code> (for Kubernetes).</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>pod</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied pod specification as used in <code>ReplicationController</code>,  <code>ReplicaSets</code>, <code>Deployments</code> and <code>DeploymentConfigs</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>replicaSet</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>ReplicaSet</code> and <code>ReplicationController</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>service</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>Service</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ingress</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>Ingress</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>serviceAccount</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>ServiceAccount</code> objects.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect3\">\n<h4 id=\"controller-resource-groovy-configuration\">4.8.2. Controllers</h4>\n<div class=\"paragraph\">\n<p>A Controller resource is a Kubernetes resource which manages Pods created for your application. It can be one of these options:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/\">ReplicationController</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/\">ReplicaSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/\">Deployment</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/\">StatefulSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\">DaemonSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/job/\">Job</a></p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Here are the fields available in <code>resources</code> Groovy DSL configuration that would work with k8sResource:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 13. resources fields for configuring generated controllers</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>env</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Environment variables which will be added to containers in Pod template spec.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#volume-groovy-configuration\"><code>volumes</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for adding volume mounts to containers in Pod template spec</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>controllerName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Name of the controller resource(i.e. <code>Deployment</code>, <code>ReplicaSet</code>, <code>StatefulSet</code> etc) generated</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#probe-groovy-configuration\"><code>liveness</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for adding a liveness probe</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#probe-groovy-configuration\"><code>readiness</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for adding readiness probe</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>containerPrivileged</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Run container in privileged mode. Sets <code>privileged: true</code> in generated Controller&#8217;s PodTemplateSpec</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>imagePullPolicy</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How images should be pulled (maps to ImagePullPolicy).</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>replicas</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Number of replicas to create</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>serviceAccount</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ServiceAccount name which will be used by pods created by controller resources(e.g. <code>Deployment</code>, <code>ReplicaSet</code> etc)</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"sect4\">\n<h5 id=\"probe-groovy-configuration\">Probe Groovy DSL Configuration</h5>\n<div class=\"paragraph\">\n<p>Probe configuration is used for configuring <a href=\"https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes\">liveness and readiness probes</a> for containers. Both <code>liveness</code> and <code>readiness</code> probes the following options:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 14. Groovy DSL Probe configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>initialDelaySeconds</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Initial delay in seconds before the probe is started.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>timeoutSeconds</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Timeout in seconds how long the probe might take.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>exec</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Command to execute for probing.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>getUrl</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Probe URL for HTTP Probe. Configures HTTP probe fields like <code>host</code>, <code>scheme</code>, <code>path</code> etc by parsing URL. For example, a <code>getUrl = \"http://:8080/health\"</code> would result in probe generated with fields set like this:</p>\n<p class=\"tableblock\">  host: \"\"</p>\n<p class=\"tableblock\">  path: /health</p>\n<p class=\"tableblock\">  port: 8080</p>\n<p class=\"tableblock\">  scheme: HTTP</p>\n<p class=\"tableblock\">Host name with empty value defaults to Pod IP. You probably want to set \"Host\" in httpHeaders instead.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>tcpPort</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">TCP port to probe.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>failureThreshold</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">When a probe fails, Kubernetes will try failureThreshold times before giving up</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>successThreshold</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Minimum consecutive successes for the probe to be considered successful after having failed.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>httpHeaders</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Custom headers to set in the request.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>periodSeconds</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How often in seconds to perform the probe. Defaults to 10 seconds. Minimum value is 1.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"volume-groovy-configuration\">Volume Groovy DSL Configuration</h5>\n<div class=\"paragraph\">\n<p><code>volumes</code> field contains a list of <code>volume</code> configurations. Different configurations are supported in order to support different <a href=\"https://kubernetes.io/docs/concepts/storage/volumes/\">Volumes in Kubernetes</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here are the options supported by a single <code>volume</code> :</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 15. Groovy DSL <code>volume</code> configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>type</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">type of Volume</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>name</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">name of volume to be mounted</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>mounts</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of mount paths of this volume.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>path</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path for volume</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>medium</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">medium ,applicable for Volume type <code>emptyDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>repository</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">repository ,applicable for Volume type <code>gitRepo</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>revision</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">revision ,applicable for Volume type <code>gitRepo</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret name ,applicable for Volume type <code>secret</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>server</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Server name, applicable for Volume type <code>nfsPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>readOnly</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether it&#8217;s read only or not</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pdName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">pdName, applicable for Volume type <code>gcePdName</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>fsType</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">File system type for Volume</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>partition</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">partition, applicable for Volume type <code>gcePdName</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>endpoints</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">endpoints, applicable for Volume type <code>glusterFsPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>claimRef</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Claim Reference, applicable for Volume type <code>persistentVolumeClaim</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>volumeId</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">volume id</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>diskName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">disk name, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>diskUri</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">disk uri, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>kind</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">kind, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>cachingMode</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">caching mode, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>hostPathType</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Host Path type</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>shareName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Share name,  applicable for Volume type <code>azureFile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>user</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">User name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretFile</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret File, applicable for Volume type <code>cephfs</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretRef</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret reference, applicable for Volume type <code>cephfs</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>lun</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">LUN(Logical Unit Number)</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>targetWwns</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">target WWNs, applicable for Volume type <code>fc</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>datasetName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">data set name, applicable for Volume type <code>flocker</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>portals</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">list of portals, applicable for Volume type <code>iscsi</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>targetPortal</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">target portal, applicable for Volume type <code>iscsi</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>registry</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">registry, applicable for Volume type <code>quobyte</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>volume</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">volume, applicable for Volume type <code>quobyte</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>group</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">group, applicable for Volume type <code>quobyte</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>iqn</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">IQN, applicable for Volume type <code>iscsi</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>monitors</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">list of monitors, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pool</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">pool, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>keyring</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">keyring, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>image</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">image, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>gateway</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">gateway, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>system</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">system, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>protectionDomain</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">protection domain, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>storagePool</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">storage pool, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>volumeName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">volume name, applicable for Volume type <code>scaleIO</code> and <code>storageOS</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>configMapName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ConfigMap name, applicable for Volume type <code>configMap</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>configMapItems</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of ConfigMap items, applicable for Volume type <code>configMap</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>items</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of items, applicable for Volume type <code>downwardAPI</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"ingress-groovy-configuration\">4.8.3. Ingress</h4>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>ingress</code> in Groovy configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 16. <code>ingress</code> configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-rule-groovy-configuration\"><code>ingressRules</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">IngressRule configuration</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-tls-configuration\"><code>ingressTlsConfigs</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Ingress TLS configuration</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"sect4\">\n<h5 id=\"ingress-rule-groovy-configuration\">IngressRule Groovy Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>ingressRules</code> in Groovy configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 17. <code>ingressRule</code> configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>host</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Host name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-rule-path-configuration\"><code>paths</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">IngressRule path configuration</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-rule-path-configuration\">IngressRule Path Groovy Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>paths</code> in Groovy DSL configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 18. IngressRule <code>path</code> Groovy DSL configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pathType</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">type of Path</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>path</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">path</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>serviceName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Service name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>servicePort</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Service port</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-rule-path-resource-groovy-configuration\"><code>resource</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource reference in Ingress backend</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-rule-path-resource-groovy-configuration\">IngressRule Path Resource Groovy Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>resource</code> in IngressRule&#8217;s path Groovy configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 19. IngressRule Path <code>resource</code> Groovy configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>name</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>kind</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource kind</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>apiGroup</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource&#8217;s apiGroup</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-tls-configuration\">IngressRule Path Resource Groovy Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>ingressTlsConfigs</code> in IngressRule&#8217;s path Groovy configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 20. IngressTls <code>ingressTlsConfig</code> Groovy configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>hosts</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">a list of string <code>host</code> objects</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"registry\">5. Registry handling</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Docker uses registries to store images. The registry is typically\nspecified as part of the name. I.e. if the first part (everything\nbefore the first <code>/</code>) contains a dot (<code>.</code>) or colon (<code>:</code>) this part is\ninterpreted as an address (with an optionally port) of a remote\nregistry. This registry (or the default <code>docker.io</code> if no\nregistry is given) is used during push and pull operations. This\nplugin follows the same semantics, so if an image name is specified\nwith a registry part, this registry is contacted. Authentication is\nexplained in the next <a href=\"#authentication\">section</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>There are some situations however where you want to have more\nflexibility for specifying a remote registry. This might be because\nyou do not want to hard code a registry into <code>build.gradle</code> but\nprovide it from the outside with an environment variable or a system\nproperty.</p>\n</div>\n<div class=\"paragraph\">\n<p>This plugin supports various ways of specifying a registry:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If the image name contains a registry part, this registry is used\nunconditionally and can not be overwritten from the outside.</p>\n</li>\n<li>\n<p>If an image name doesn&#8217;t contain a registry, then by default the\ndefault Docker registry <code>docker.io</code> is used for push and pull\noperations. But this can be overwritten through various means:</p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If the <code>image</code> configuration contains a <code>registry</code> subelement\nthis registry is used.</p>\n</li>\n<li>\n<p>Otherwise, a global configuration element <code>registry</code> is\nevaluated which can be also provided as system property via\n<code>-Djkube.docker.registry</code>.</p>\n</li>\n<li>\n<p>Finally an environment variable <code>DOCKER_REGISTRY</code> is looked up for\ndetecting a registry.</p>\n</li>\n</ul>\n</div>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>This registry is used for pulling (i.e. for autopull the base image\nwhen doing a <code>k8sBuild</code>) and pushing with <code>k8sPush</code>. However,\nwhen these two tasks are combined on the command line like in <code>mvn\n-Djkube.docker.registry=myregistry:5000 package k8sBuild k8sPush</code>\nthe same registry is used for both operation. For a more fine grained\ncontrol, separate registries for <em>pull</em> and <em>push</em> can be specified.</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>In the plugin&#8217;s configuration with the parameters <code>pullRegistry</code> and\n<code>pushRegistry</code>, respectively.</p>\n</li>\n<li>\n<p>With the system properties <code>jkube.docker.pull.registry</code> and\n<code>jkube.docker.push.registry</code>, respectively.</p>\n</li>\n</ul>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    registry = \"docker.jolokia.org:443\"\n    images {\n        image1 {\n            // Without an explicit registry\n            name = \"jolokia/jolokia-java\"\n            // Hence use this registry\n            registry = \"docker.ro14nd.de\"\n        }\n        image2 {\n            name =\"postgresql\"\n            // No registry in the name, hence use this globally\n            // configured docker.jolokia.org:443 as registry\n        }\n        image3 {\n            // Explicitly specified always wins\n            name = \"docker.example.com:5000/another/server\"\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>There is some special behaviour when using an externally provided\nregistry like described above:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>When <em>pulling</em>, the image pulled will be also tagged with a repository\nname <strong>without</strong> registry. The reasoning behind this is that this\nimage then can be referenced also by the configuration when the\nregistry is not specified anymore explicitly.</p>\n</li>\n<li>\n<p>When <em>pushing</em> a local image, temporarily a tag including the\nregistry is added and removed after the push. This is required\nbecause Docker can only push registry-named images.</p>\n</li>\n</ul>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"authentication\">6. Registry Authentication</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>When pulling (via the <code>autoPull</code> mode of <code>k8sBuild</code>) or pushing image, it\nmight be necessary to authenticate against a Docker registry.</p>\n</div>\n<div class=\"paragraph\">\n<p>There are five different locations searched for credentials.  In order, these are:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Providing system properties <code>jkube.docker.username</code> and <code>jkube.docker.password</code> from the outside.</p>\n</li>\n<li>\n<p>Using a <code>authConfig</code> section in the plugin configuration with <code>username</code> and <code>password</code> elements.</p>\n</li>\n<li>\n<p>Using OpenShift configuration in <code>~/.config/kube</code></p>\n</li>\n<li>\n<p>Login into a registry with <code>docker login</code> (credentials in a credential helper or in <code>~/.docker/config.json</code>)</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Using the username and password directly in the <code>build.gradle</code> is not\nrecommended since this is widely visible. This is the easiest and\ntransparent way, though. Using an <code>authConfig</code> is straight forward:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"consol/tomcat-7.0\"\n        }\n    }\n    authConfig {\n        username = \"jolokia\"\n        password = \"s!cr!t\"\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The system property provided credentials are a good compromise when\nusing CI servers like Jenkins. You simply provide the credentials from\nthe outside:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">gradle -Djkube.docker.username=jolokia -Djkube.docker.password=s!cr!t k8sPush</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The most <em>secure</em> way is to rely on docker&#8217;s credential store or credential helper and read confidential information\nfrom an external credentials store, such as the native keychain of the operating system. Follow the instruction on\n<a href=\"https://docs.docker.com/engine/reference/commandline/login/#credentials-store\">the docker login documentation</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>As a final fallback, this plugin consults <code>$DOCKER_CONFIG/config.json</code> if <code>DOCKER_CONFIG</code> is set, or <code>~/.docker/config.json</code> if not, and reads credentials stored directly within this\nfile. This unsafe behavior happened when connecting to a registry with the command <code>docker login</code> from the command line\nwith older versions of docker (pre 1.13.0) or when docker is not configured to use a\n<a href=\"https://docs.docker.com/engine/reference/commandline/login/#credentials-store\">credential store</a>.</p>\n</div>\n<div class=\"sect2\">\n<h3 id=\"_pull_vs_push_authentication\">6.1. Pull vs. Push Authentication</h3>\n<div class=\"paragraph\">\n<p>The credentials lookup described above is valid for both push and\npull operations. In order to narrow things down, credentials can be\nprovided for pull or push operations alone:</p>\n</div>\n<div class=\"paragraph\">\n<p>In an <code>authConfig</code> section a sub-section <code>pull</code> and/or <code>push</code>\ncan be added. In the example below the credentials provider are only\nused for image push operations:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    images {\n        image {\n            name = \"consol/tomcat-7.0\"\n        }\n    }\n    authConfig {\n        push {\n            username = \"jolokia\"\n            password = \"secret\"\n        }\n    }\n}</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>When the credentials are given on the command line as system\nproperties, then the properties <code>jkube.docker.pull.username</code> /\n<code>jkube.docker.pull.password</code> and <code>jkube.docker.push.username</code> /\n<code>jkube.docker.push.password</code> are used for pull and push operations,\nrespectively (when given). Either way, the standard lookup algorithm\nas described in the previous section is used as fallback.</p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"kind-filename-mapping\">7. Kind/Filename Mapping</h2>\n<div class=\"sectionbody\">\n<div class=\"sect2\">\n<h3 id=\"appendix-kind-mapping\">7.1. Default Kind/Filename Mapping</h3>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 50%;\">\n<col style=\"width: 50%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Kind</th>\n<th class=\"tableblock halign-left valign-top\">Filename Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">BuildConfig</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>bc</code>, <code>buildconfig</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ClusterRole</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>cr</code>, <code>crole</code>, <code>clusterrole</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ConfigMap</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>cm</code>, <code>configmap</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ClusterRoleBinding</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>crb</code>, <code>clusterrb</code>, <code>clusterrolebinding</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">CronJob</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>cj</code>, <code>cronjob</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">CustomResourceDefinition</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>crd</code>, <code>customerresourcedefinition</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">DaemonSet</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>ds</code>, <code>daemonset</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Deployment</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>deployment</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">DeploymentConfig</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>dc</code>, <code>deploymentconfig</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ImageStream</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>is</code>, <code>imagestream</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ImageStreamTag</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>istag</code>, <code>imagestreamtag</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Ingress</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>ingress</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Job</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>job</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">LimitRange</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>lr</code>, <code>limitrange</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Namespace</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>ns</code>, <code>namespace</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">NetworkPolicy</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>np</code>, <code>networkpolicy</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">OAuthClient</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>oauthclient</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">PolicyBinding</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pb</code>, <code>policybinding</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">PersistentVolume</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pv</code>, <code>persistentvolume</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">PersistentVolumeClaim</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pvc</code>, <code>persistentvolumeclaim</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Project</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>project</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ProjectRequest</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pr</code>, <code>projectrequest</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ReplicaSet</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rs</code>, <code>replicaset</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ReplicationController</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rc</code>, <code>replicationcontroller</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ResourceQuota</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rq</code>, <code>resourcequota</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Role</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>role</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">RoleBinding</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rb</code>, <code>rolebinding</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">RoleBindingRestriction</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>rbr</code>, <code>rolebindingrestriction</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Route</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>route</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secret</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Service</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>svc</code>, <code>service</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ServiceAccount</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>sa</code>, <code>serviceaccount</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">StatefulSet</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>statefulset</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Template</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>template</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Pod</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pd</code>, <code>pod</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"custom-kind-mapping\">7.2. Custom Kind/Filename Mapping</h3>\n<div class=\"paragraph\">\n<p>You can add your custom <code>Kind/Filename</code> mappings.\nTo do it you have two approaches:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Setting an environment variable or system property called <code>jkube.mapping</code> pointing out to a <code>.properties</code> files with pairs <code>&lt;kind&gt;&#8658;filename1&gt;, &lt;filename2&gt;</code>\nBy default if no environment variable nor system property is set, scan for a file located at classpath <code>/META-INF/jkube.kind-filename-type-mapping-default.properties</code>.</p>\n</li>\n<li>\n<p>By embedding in task configuration the mapping:</p>\n</li>\n</ul>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-groovy\" data-lang=\"groovy\">kubernetes {\n    mappings {\n        mapping {\n            kind = \"Var\"\n            filenameTypes = \"foo, bar\"\n        }\n    }\n}</code></pre>\n</div>\n</div>\n</div>\n</div>\n</div>","document":{"title":"org.eclipse.jkube/kubernetes-gradle-plugin","subtitle":""}}},"pageContext":{"id":"e062868f-dcfc-5b09-b545-88ecedc7ecd3","langKey":"en"}},
     "staticQueryHashes": []}
\ No newline at end of file
diff --git a/page-data/docs/kubernetes-maven-plugin/page-data.json b/page-data/docs/kubernetes-maven-plugin/page-data.json
index 94039a0..4855053 100644
--- a/page-data/docs/kubernetes-maven-plugin/page-data.json
+++ b/page-data/docs/kubernetes-maven-plugin/page-data.json
@@ -1,5 +1,5 @@
 {
     "componentChunkName": "component---src-templates-doc-jsx",
     "path": "/docs/kubernetes-maven-plugin",
-    "result": {"data":{"asciidocCopy":{"html":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>&#169; 2020 The original authors.</p>\n</div>\n<div id=\"toc\" class=\"toc\">\n<div id=\"toctitle\" class=\"title\">kubernetes-maven-plugin</div>\n<ul class=\"sectlevel1\">\n<li><a href=\"#introduction\">1. Introduction</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#building-images\">1.1. Building Images</a></li>\n<li><a href=\"#resource-descriptors\">1.2. Kubernetes Resources</a></li>\n<li><a href=\"#_configuration\">1.3. Configuration</a></li>\n<li><a href=\"#_examples\">1.4. Examples</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#zero-config\">1.4.1. Zero-Config</a></li>\n<li><a href=\"#_xml_configuration\">1.4.2. XML Configuration</a></li>\n<li><a href=\"#_resource_fragments\">1.4.3. Resource Fragments</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"#compatibility-with-Kubernetes\">2. Compatibility with Kubernetes</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#kubernetes-compatibility\">2.1. Kubernetes Compatibility</a></li>\n</ul>\n</li>\n<li><a href=\"#installation\">3. Installation</a></li>\n<li><a href=\"#goals\">4. Goals Overview</a></li>\n<li><a href=\"#goals-overview-build\">5. Build Goals</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#jkube:resource\">5.1. <strong>k8s:resource</strong></a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#resource-labels-annotations\">5.1.1. Labels and Annotations</a></li>\n<li><a href=\"#controller-resource-generation\">5.1.2. Controller Generation</a></li>\n<li><a href=\"#resource-secrets\">5.1.3. Secrets</a></li>\n<li><a href=\"#ingress-generation\">5.1.4. Ingress Generation</a></li>\n<li><a href=\"#serviceaccount-generation\">5.1.5. ServiceAccount Generation</a></li>\n<li><a href=\"#resource-validation\">5.1.6. Resource Validation</a></li>\n<li><a href=\"#Supported-Properties-Resource\">5.1.7. Supported Properties for Resource goal</a></li>\n</ul>\n</li>\n<li><a href=\"#jkube:build\">5.2. <strong>k8s:build</strong></a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#build-kubernetes\">5.2.1. Kubernetes Build</a></li>\n<li><a href=\"#build-goal-configuration\">5.2.2. Configuration (XML)</a></li>\n<li><a href=\"#_kubernetes_access_configuration\">5.2.3. Kubernetes Access Configuration</a></li>\n<li><a href=\"#_image_configuration\">5.2.4. Image Configuration</a></li>\n<li><a href=\"#build-configuration\">5.2.5. Build Configuration</a></li>\n<li><a href=\"#build-assembly\">5.2.6. Assembly</a></li>\n<li><a href=\"#misc-env\">5.2.7. Environment and Labels</a></li>\n<li><a href=\"#misc-startup\">5.2.8. Startup Arguments</a></li>\n<li><a href=\"#build-buildargs\">5.2.9. Build Args</a></li>\n<li><a href=\"#build-healthcheck\">5.2.10. Healthcheck</a></li>\n</ul>\n</li>\n<li><a href=\"#jkube:push\">5.3. <strong>k8s:push</strong></a></li>\n<li><a href=\"#jkube:apply\">5.4. <strong>k8s:apply</strong></a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#Supported-Properties-Apply\">5.4.1. Supported Properties For Apply goal</a></li>\n</ul>\n</li>\n<li><a href=\"#jkube:helm\">5.5. <strong>k8s:helm</strong></a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#helm-multi-module\">5.5.1. Multi-module projects</a></li>\n</ul>\n</li>\n<li><a href=\"#jkube:helm-push\">5.6. <strong>k8s:helm-push</strong></a></li>\n</ul>\n</li>\n<li><a href=\"#goals-overview-develop\">6. Development Goals</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#jkube:deploy\">6.1. <strong>k8s:deploy</strong></a></li>\n<li><a href=\"#jkube:undeploy\">6.2. <strong>k8s:undeploy</strong></a></li>\n<li><a href=\"#jkube:log\">6.3. <strong>k8s:log</strong></a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#Supported-Properties-Log\">6.3.1. Supported Properties for Log goal</a></li>\n</ul>\n</li>\n<li><a href=\"#jkube:debug\">6.4. <strong>k8s:debug</strong></a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#_speeding_up_debugging\">6.4.1. Speeding up debugging</a></li>\n<li><a href=\"#_debugging_with_suspension\">6.4.2. Debugging with suspension</a></li>\n<li><a href=\"#Supported-Properties-Debug\">6.4.3. Supported Properties For Debug Goal</a></li>\n</ul>\n</li>\n<li><a href=\"#jkube:watch\">6.5. <strong>k8s:watch</strong></a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#watcher-spring-boot\">6.5.1. Spring Boot</a></li>\n<li><a href=\"#watcher-docker-image\">6.5.2. Docker Image</a></li>\n<li><a href=\"#Supported-Properties-Watch\">6.5.3. Supported Properties for Watch goal</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"#generators\">7. Generators</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#generators-default\">7.1. Default Generators</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#generator-java-exec\">7.1.1. Java Applications</a></li>\n<li><a href=\"#generator-spring-boot\">7.1.2. Spring Boot</a></li>\n<li><a href=\"#generator-wildfly-swarm\">7.1.3. Wildfly Swarm</a></li>\n<li><a href=\"#generator-thorntail-v2\">7.1.4. Thorntail v2</a></li>\n<li><a href=\"#generator-vertx\">7.1.5. Vert.x</a></li>\n<li><a href=\"#generator-karaf\">7.1.6. Karaf</a></li>\n<li><a href=\"#generator-webapp\">7.1.7. Web Applications</a></li>\n<li><a href=\"#generator-quarkus\">7.1.8. Quarkus</a></li>\n<li><a href=\"#generator-openliberty\">7.1.9. Open Liberty</a></li>\n<li><a href=\"#generator-wildfly-jar\">7.1.10. Wildfly JAR Generator</a></li>\n<li><a href=\"#generator-micronaut\">7.1.11. Micronaut Generator</a></li>\n</ul>\n</li>\n<li><a href=\"#generators-api\">7.2. Generator API</a></li>\n</ul>\n</li>\n<li><a href=\"#enrichers\">8. Enrichers</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#enrichers-default\">8.1. Default Enrichers</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#enrichers-generic\">8.1.1. Generic Enrichers</a></li>\n<li><a href=\"#enrichers-specific\">8.1.2. Specific Enrichers</a></li>\n</ul>\n</li>\n<li><a href=\"#_enricher_api\">8.2. Enricher API</a></li>\n</ul>\n</li>\n<li><a href=\"#profiles\">9. Profiles</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#generator-enricher-definition\">9.1. Generator and Enricher definitions</a></li>\n<li><a href=\"#profiles-lookup-order\">9.2. Lookup order</a></li>\n<li><a href=\"#profiles-using\">9.3. Using Profiles</a></li>\n<li><a href=\"#profiles-predefined\">9.4. Predefined Profiles</a></li>\n<li><a href=\"#profiles-extended\">9.5. Extending Profiles</a></li>\n</ul>\n</li>\n<li><a href=\"#access-configuration\">10. Access configuration</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_docker_access\">10.1. Docker Access</a></li>\n<li><a href=\"#_openshift_and_kubernetes_access\">10.2. OpenShift and Kubernetes Access</a></li>\n</ul>\n</li>\n<li><a href=\"#registry\">11. Registry handling</a></li>\n<li><a href=\"#authentication\">12. Authentication</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_pull_vs_push_authentication\">12.1. Pull vs. Push Authentication</a></li>\n<li><a href=\"#_openshift_authentication\">12.2. OpenShift Authentication</a></li>\n<li><a href=\"#password-encryption\">12.3. Password encryption</a></li>\n<li><a href=\"#extended-authentication\">12.4. Extended Authentication</a></li>\n</ul>\n</li>\n<li><a href=\"#volume-configuration\">13. Volume Configuration</a></li>\n<li><a href=\"#integrations\">14. Integrations</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#integrations.dekorate\">14.1. Dekorate</a></li>\n<li><a href=\"#_jib_java_image_builder\">14.2. JIB (Java Image Builder)</a></li>\n</ul>\n</li>\n<li><a href=\"#faq\">15. FAQ</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_general_questions\">15.1. General questions</a>\n<ul class=\"sectlevel3\">\n<li><a href=\"#_how_do_i_define_an_environment_variable\">15.1.1. How do I define an environment variable?</a></li>\n<li><a href=\"#_how_do_i_define_a_system_property\">15.1.2. How do I define a system property?</a></li>\n<li><a href=\"#_how_do_i_mount_a_config_file_from_a_configmap\">15.1.3. How do I mount a config file from a ConfigMap?</a></li>\n<li><a href=\"#_how_do_i_use_a_persistent_volume\">15.1.4. How do I use a Persistent Volume?</a></li>\n<li><a href=\"#_how_do_i_generate_ingress_for_my_generated_service\">15.1.5. How do I generate Ingress for my generated Service?</a></li>\n<li><a href=\"#_how_do_i_build_the_image_with_podman_instead_of_docker\">15.1.6. How do I build the image with Podman instead of Docker?</a></li>\n<li><a href=\"#_how_to_configure_image_name_generated_by_eclipse_jkube\">15.1.7. How to configure image name generated by Eclipse JKube?</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"#appendix\">16. Appendix</a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_kindfilename_type_mapping\">16.1. Kind/Filename Type Mapping</a></li>\n<li><a href=\"#_custom_kindfilename_mapping\">16.2. Custom Kind/Filename Mapping</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"introduction\">1. Introduction</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>The <strong>kubernetes-maven-plugin</strong> brings your Java applications on to\n<a href=\"http://kubernetes.io/\">Kubernetes</a>.\nIt provides a tight integration into <a href=\"http://maven.apache.org\">Maven</a> and benefits from the build configuration already provided.\nThis plugin focus on two tasks: <em>Building Docker images</em> and <em>creating Kubernetes resource descriptors</em>.\nIt can be configured very flexibly and supports multiple configuration models for creating: A <em>Zero-Config</em> setup allows for a quick ramp-up with some opinionated defaults.\nFor more advanced requirements, an <em>XML configuration</em> provides additional configuration options which can be added to the <code>pom.xml</code>.\nFor the full power, in order to tune all facets of the creation, external <em>resource fragments</em> and <em>Dockerfiles</em> can be used.</p>\n</div>\n<div class=\"sect2\">\n<h3 id=\"building-images\">1.1. Building Images</h3>\n<div class=\"paragraph\">\n<p>The <a href=\"#jkube:build\"><strong>k8s:build</strong></a> goal is for creating Docker images containing the actual application. These then can be deployed later on Kubernetes or OpenShift.\nIt is easy to include build artifacts and their dependencies into these images.\nThis plugin uses the assembly descriptor format similar to the one used in\n<a href=\"http://maven.apache.org/plugins/maven-assembly-plugin/\">maven-assembly-plugin</a> to specify the content which will be added\nto the image.\nThat images can then be pushed to public or private Docker registries with <a href=\"#jkube:push\"><strong>k8s:push</strong></a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Depending on the operational mode, for building the actual image either a Docker daemon is used directly or an <a href=\"https://docs.openshift.com/enterprise/3.0/architecture/core_concepts/builds_and_image_streams.html#docker-build\">OpenShift Docker Build</a> is performed.</p>\n</div>\n<div class=\"paragraph\">\n<p>A special <a href=\"#jkube:watch\"><strong>k8s:watch</strong></a> goal allows for reacting to code changes to automatically recreate images or copy new artifacts into running containers.</p>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"resource-descriptors\">1.2. Kubernetes Resources</h3>\n<div class=\"paragraph\">\n<p>Kubernetes resource descriptors can be created or generated from <a href=\"#jkube:resource\"><strong>k8s:resource</strong></a>.\nThese files are packaged within the Maven artifacts and can be deployed to a running orchestration platform with <a href=\"#jkube:apply\"><strong>k8s:apply</strong></a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Typically you only specify a small part of the real resource descriptors which will be enriched by this plugin with various extra information taken from the <code>pom.xml</code>.\nThis drastically reduces boilerplate code for common scenarios.</p>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"_configuration\">1.3. Configuration</h3>\n<div class=\"paragraph\">\n<p>As mentioned already there are three levels of configuration:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><strong>Zero-Config</strong> mode makes some very opinionated decisions based on what is present in the pom.xml like what base image to use or which ports to expose.\nThis is great for starting up things and for keeping quickstart applications small and tidy.</p>\n</li>\n<li>\n<p><strong>XML plugin configuration</strong> mode is similar to what <a href=\"https://dmp.fabric8.io/#example\">docker-maven-plugin</a> provides.\nThis allows for type-safe configuration with IDE support, but only a subset of possible resource descriptor features is provided.</p>\n</li>\n<li>\n<p><strong>Kubernetes &amp; OpenShift resource fragments</strong> are user provided YAML files that can be <em>enriched</em> by the plugin. This allows expert users to use a plain configuration file with all their capabilities, but also to add project specific build information and avoid boilerplate code.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The following table gives an overview of the different models</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 1. Configuration Models</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 50%;\">\n<col style=\"width: 37.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Model</th>\n<th class=\"tableblock halign-left valign-top\">Docker Images</th>\n<th class=\"tableblock halign-left valign-top\">Resource Descriptors</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Zero-Config</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generators\">Generators</a> are used to create Docker image configurations. Generators can detect certain aspects of\n  the build (e.g. whether Spring Boot is used) and then choose some opinionated defaults like the base image, which\n  ports to expose and the startup command. They can be configured, but offer only a few options.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default <a href=\"#enrichers\">Enrichers</a> will create a default <em>Service</em> and <em>Deployment</em> (<em>DeploymentConfig</em> for OpenShift)\n  when no other resource objects are provided. Depending on the image they can detect which port to expose in the\n  service. As with Generators, Enrichers support a limited set of configuration options.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>XML configuration</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">kubernetes-maven-plugin inherits the XML based configuration for building images from the\n  <a href=\"https://dmp.fabric8.io/#docker:build\">docker-maven-plugin</a> and provides the same functionality. It supports an\n  <a href=\"http://maven.apache.org/components/plugins/maven-assembly-plugin/assembly.html\">assembly descriptor</a> for specifying the\n  content of the Docker image.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A subset of possible resource objects can be configured with a dedicated XML syntax. With a decent IDE you get\n  autocompletion on most objects and inline documentation for the available configuration elements. The provided\n  configuration can be still enhanced by Enhancers which is useful for adding e.g. labels and annotations containing\n  build or other information.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Resource Fragments</strong> and <strong>Dockerfiles</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Similarly to the docker-maven-plugin, kubernetes-maven-plugin supports <a href=\"#external-dockerfile\">external Dockerfiles</a> too, which are\n  referenced from the plugin configuration.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource descriptors can be provided as external YAML files which will build a base skeleton for the applicable resource.</p>\n<p class=\"tableblock\">  The \"skeleton\" is then post-processed by <a href=\"#enrichers\">Enrichers</a> which will complete the skeleton by adding the fields\n  each enricher is responsible of (labels, annotations, port information, etc.). Maven properties within these files\n  are resolved to their values.</p>\n<p class=\"tableblock\">  With this model you can use every Kubernetes / OpenShift resource objects with all their flexibility, but still get the benefit\n  of adding build information.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"_examples\">1.4. Examples</h3>\n<div class=\"paragraph\">\n<p>Let&#8217;s have a look at some code. The following examples will demonstrate all three configurations variants:</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"zero-config\">1.4.1. Zero-Config</h4>\n<div class=\"paragraph\">\n<p>This minimal but full working example <code>pom.xml</code> shows how a simple spring boot application can be dockerized and\nprepared for Kubernetes. The full example can be found in directory\n<a href=\"https://github.com/eclipse/jkube/tree/master/quickstarts/maven/zero-config\">quickstarts/maven/zero-config</a>.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;project&gt;\n  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;\n\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;jkube-maven-sample-zero-config&lt;/artifactId&gt;\n  &lt;version&gt;1.5.0&lt;/version&gt;\n  &lt;packaging&gt;jar&lt;/packaging&gt;\n\n  &lt;parent&gt;\n    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;\n    &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt; <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n    &lt;version&gt;1.5.5.RELEASE&lt;/version&gt;\n  &lt;/parent&gt;\n\n  &lt;dependencies&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;\n      &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt; <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n    &lt;/dependency&gt;\n  &lt;/dependencies&gt;\n\n  &lt;build&gt;\n    &lt;plugins&gt;\n      &lt;plugin&gt;\n        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;\n        &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt; <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n      &lt;/plugin&gt;\n      &lt;plugin&gt;\n        &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n        &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt; <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n        &lt;version&gt;1.5.0&lt;/version&gt;\n      &lt;/plugin&gt;\n    &lt;/plugins&gt;\n  &lt;/build&gt;\n&lt;/project&gt;</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>This minimalistic spring boot application uses the spring-boot parent POM for setting up dependencies and plugins</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>The Spring Boot web starter dependency enables a simple embedded Tomcat for serving Spring MVC apps</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td>The <code>spring-boot-maven-plugin</code> is responsible for repackaging the application into a fat jar, including all dependencies and the embedded Tomcat</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>The <code>kubernetes-maven-plugin</code> enables the automatic generation of a Docker image and Kubernetes / OpenShift descriptors including this Spring application.</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>This setup make some opinionated decisions for you:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>As base image <a href=\"https://quay.io/repository/jkube/jkube-java-binary-s2i\">jkube/jkube-java-binary-s2i</a>\nis chosen which enables <a href=\"https://www.jolokia.org\">Jolokia</a> and <a href=\"https://github.com/prometheus/jmx_exporter\">jmx_exporter</a>.\nIt also comes with a sophisticated <a href=\"https://github.com/jboss-openshift/cct_module/tree/master/jboss/container/java/run/bash\">startup script</a>.</p>\n</li>\n<li>\n<p>It will create a Kubernetes <a href=\"http://kubernetes.io/docs/user-guide/deployments/\">Deployment</a> and a\n<a href=\"http://kubernetes.io/docs/user-guide/services/\">Service</a> as resource objects</p>\n</li>\n<li>\n<p>It exports port 8080 as the application service port (and 8778 and 9779 for Jolokia and jmx_exporter access, respectively)</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>These choices can be influenced by configuration options as described in <a href=\"#generator-spring-boot\">Spring Boot Generator</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>To start the Docker image build, you simply run</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">mvn package k8s:build</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This will create the Docker image against a running Docker daemon (which must be accessible either via Unix Socket or\nwith the URL set in <code>DOCKER_HOST</code>). Alternatively, when connected to an OpenShift cluster then a <a href=\"https://docs.openshift.com/enterprise/3.0/using_images/s2i_images/index.html\">S2I</a> build will be performed on OpenShift which at the end creates an\n<a href=\"https://docs.openshift.com/enterprise/3.1/architecture/core_concepts/builds_and_image_streams.html\">ImageStream</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>To deploy the resources to the cluster call</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">mvn k8s:resource k8s:deploy</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>By default a <em>Service</em> and a <em>Deployment</em> object pointing to the created Docker image is created. When running in OpenShift mode, a <em>Service</em> and <em>DeploymentConfig</em> which refers the <em>ImageStream</em> created with <code>k8s:build</code> will be installed.</p>\n</div>\n<div class=\"paragraph\">\n<p>Of course you can bind all those jkube-goals to execution phases as well, so that they are called along with standard lifecycle goals like <code>install</code>. For example, to bind the building of the Kubernetes resource files and the Docker images, add the following goals to the execution of the kubernetes-maven-plugin:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for lifecycle bindings</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n\n  &lt;!-- ... --&gt;\n\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;goals&gt;\n        &lt;goal&gt;resource&lt;/goal&gt;\n        &lt;goal&gt;build&lt;/goal&gt;\n      &lt;/goals&gt;\n    &lt;/execution&gt;\n  &lt;/executions&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If you&#8217;d also like to automatically deploy to Kubernetes each time you do a <code>mvn install</code> you can add the <code>apply</code> goal:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for lifecycle bindings with automatic deploys for mvn install</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n\n  &lt;!-- ... --&gt;\n\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;goals&gt;\n        &lt;goal&gt;resource&lt;/goal&gt;\n        &lt;goal&gt;build&lt;/goal&gt;\n        &lt;goal&gt;apply&lt;/goal&gt;\n      &lt;/goals&gt;\n    &lt;/execution&gt;\n  &lt;/executions&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"_xml_configuration\">1.4.2. XML Configuration</h4>\n<div class=\"admonitionblock warning\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-warning\" title=\"Warning\"></i>\n</td>\n<td class=\"content\">\nXML based configuration is only partially implemented and is not recommended for use right now.\n</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>Although the Zero-config mode and its generators can be tweaked with options up to a certain degree, many cases require more flexibility. For such instances, an XML-based plugin configuration can be used, in a way similar to the\n<a href=\"https://dmp.fabric8.io/#configuration\">XML configuration</a> used by <code>docker-maven-plugin</code>.</p>\n</div>\n<div class=\"paragraph\">\n<p>The plugin configuration can be roughly divided into the following sections:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Global configuration options are responsible for tuning the behaviour of plugin goals</p>\n</li>\n<li>\n<p><code>&lt;images&gt;</code> defines which Docker <a href=\"#image-configuration\">images</a> are used and configured. This section is similar to the\n<a href=\"https://dmp.fabric8.io//#image-configuration\">image configuration</a> of the <code>docker-maven-plugin</code>, except that <code>&lt;run&gt;</code>\nand <code>&lt;external&gt;</code> sub-elements are ignored)</p>\n</li>\n<li>\n<p><code>&lt;resources&gt;</code> defines the resource descriptors for deploying on an OpenShift or Kubernetes cluster.</p>\n</li>\n<li>\n<p><code>&lt;generator&gt;</code> configures <a href=\"#generators\">generators</a> which are responsible for creating images. Generators are used as an alternative to a dedicated <code>&lt;images&gt;</code> section.</p>\n</li>\n<li>\n<p><code>&lt;enricher&gt;</code> configures various aspects of <a href=\"#enrichers\">enrichers</a> for creating or enhancing resource descriptors.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>A working example can be found in the\n<a href=\"https://github.com/eclipse/jkube/tree/master/quickstarts/maven/xml-config\">quickstarts/maven/xml-config</a> directory.\nAn extract of the plugin configuration is shown below:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for an XML configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n  &lt;namespace&gt;test-ns&lt;/namespace&gt;\n  &lt;images&gt;  <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n    &lt;image&gt;\n      &lt;name&gt;xml-config-demo:1.0.0&lt;/name&gt;\n      &lt;!-- \"alias\" is used to correlate to the containers in the pod spec --&gt;\n      &lt;alias&gt;camel-app&lt;/alias&gt;\n      &lt;build&gt;\n        &lt;from&gt;fabric8/java-centos-openjdk8-jre&lt;/from&gt;\n        &lt;assembly&gt;\n          &lt;layers&gt;\n            &lt;layer&gt;\n              &lt;baseDirectory&gt;/deployments&lt;/baseDirectory&gt;\n            &lt;/layer&gt;\n          &lt;/layers&gt;\n        &lt;/assembly&gt;\n        &lt;env&gt;\n          &lt;JAVA_LIB_DIR&gt;/deployments&lt;/JAVA_LIB_DIR&gt;\n          &lt;JAVA_MAIN_CLASS&gt;org.apache.camel.cdi.Main&lt;/JAVA_MAIN_CLASS&gt;\n        &lt;/env&gt;\n      &lt;/build&gt;\n    &lt;/image&gt;\n  &lt;/images&gt;\n\n  &lt;resources&gt; <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n    &lt;labels&gt; <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n      &lt;all&gt;\n        &lt;group&gt;quickstarts&lt;/group&gt;\n      &lt;/all&gt;\n    &lt;/labels&gt;\n\n    &lt;replicas&gt;2&lt;/replicas&gt; <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n    &lt;controllerName&gt;${project.artifactId}&lt;/controllerName&gt; <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n\n    &lt;services&gt; <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n      &lt;service&gt;\n        &lt;name&gt;camel-service&lt;/name&gt;\n        &lt;headless&gt;true&lt;/headless&gt;\n      &lt;/service&gt;\n    &lt;/services&gt;\n\n    &lt;serviceAccounts&gt; <i class=\"conum\" data-value=\"7\"></i><b>(7)</b>\n      &lt;serviceAccount&gt;\n        &lt;name&gt;build-robot&lt;/name&gt;\n      &lt;/serviceAccount&gt;\n    &lt;/serviceAccounts&gt;\n\n    &lt;annotations&gt; <i class=\"conum\" data-value=\"8\"></i><b>(8)</b>\n      &lt;all&gt;\n        &lt;version&gt;${project.version}&lt;/version&gt;\n        &lt;artifactId&gt;${project.artifactId}&lt;/artifactId&gt;\n      &lt;/all&gt;\n      &lt;deployment&gt; <i class=\"conum\" data-value=\"9\"></i><b>(9)</b>\n        &lt;my&gt;deployment&lt;/my&gt;\n      &lt;/deployment&gt;\n    &lt;/annotations&gt;\n\n    &lt;configMap&gt; <i class=\"conum\" data-value=\"10\"></i><b>(10)</b>\n      &lt;name&gt;test&lt;/name&gt;\n      &lt;entries&gt;\n        &lt;entry&gt; <i class=\"conum\" data-value=\"11\"></i><b>(11)</b>\n          &lt;name&gt;key1&lt;/name&gt;\n          &lt;value&gt;value1&lt;/value&gt;\n        &lt;/entry&gt;\n        &lt;entry&gt; <i class=\"conum\" data-value=\"12\"></i><b>(12)</b>\n          &lt;name&gt;key3&lt;/name&gt;\n          &lt;file&gt;${project.basedir}/src/main/resources/META-INF/resources/index.html&lt;/file&gt;\n        &lt;/entry&gt;\n      &lt;/entries&gt;\n    &lt;/configMap&gt;\n\n    &lt;liveness&gt; <i class=\"conum\" data-value=\"13\"></i><b>(13)</b>\n      &lt;getUrl&gt;http://:8080/q/health&lt;/getUrl&gt;\n      &lt;initialDelaySeconds&gt;3&lt;/initialDelaySeconds&gt;\n      &lt;timeoutSeconds&gt;3&lt;/timeoutSeconds&gt;\n    &lt;/liveness&gt;\n    &lt;remotes&gt; <i class=\"conum\" data-value=\"14\"></i><b>(14)</b>\n       &lt;remote&gt;https://gist.githubusercontent.com/lordofthejars/ac2823cec7831697d09444bbaa76cd50/raw/e4b43f1b6494766dfc635b5959af7730c1a58a93/deployment.yaml&lt;/remote&gt;\n    &lt;/remotes&gt;\n  &lt;/resources&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Standard XML configuration for building one single Docker image</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Kubernetes / OpenShift resources to create</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td>Labels which should be applied globally to all resource objects</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>Number of replicas desired</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td>Name of controller created by plugin</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td>One or more <a href=\"http://kubernetes.io/docs/user-guide/services/\">Service</a> definitions.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"7\"></i><b>7</b></td>\n<td>ServiceAccount(s) to create</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"8\"></i><b>8</b></td>\n<td>Annotations which should be applied either to all or to specific resources</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"9\"></i><b>9</b></td>\n<td>Annotations applied to Deployment resources only</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"10\"></i><b>10</b></td>\n<td>ConfigMap to be created</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"11\"></i><b>11</b></td>\n<td>ConfigMap data entry as a string key value pair</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"12\"></i><b>12</b></td>\n<td>ConfigMap data entry with value as file path, file&#8217;s contents are loaded into ConfigMap as key value</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"13\"></i><b>13</b></td>\n<td>Liveness Probe to be added in PodTemplateSpec of Controller resource</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"14\"></i><b>14</b></td>\n<td>Remote files used as resource fragments.</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>The XML resource configuration is based on plain Kubernetes resource objects. When targeting OpenShift, Kubernetes resource descriptors will be automatically converted to their OpenShift counterparts, e.g. a Kubernetes <a href=\"http://kubernetes.io/docs/user-guide/deployments/\">Deployment</a> will be converted to an OpenShift <a href=\"https://docs.openshift.com/container-platform/4.1/applications/deployments/what-deployments-are.html#deployments-and-deploymentconfigs_what-deployments-are\">DeploymentConfig</a>.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"_resource_fragments\">1.4.3. Resource Fragments</h4>\n<div class=\"paragraph\">\n<p>The third configuration option is to use an external configuration in form of YAML resource descriptors which are located in the  <code>src/main/jkube</code> directory. Each resource gets its own file, which contains a skeleton of a resource descriptor. The plugin will pick up the resource, enrich it and then combine all to a single <code>kubernetes.yml</code> and <code>openshift.yml</code> file. Within these descriptor files you are can freely use any Kubernetes feature.</p>\n</div>\n<div class=\"paragraph\">\n<p>Note: In order to support simultaneously both OpenShift and Kubernetes, there is currently no way to specify OpenShift-only features this way, though this might change in future releases.</p>\n</div>\n<div class=\"paragraph\">\n<p>Let&#8217;s have a look at an example from\n<a href=\"https://github.com/eclipse/jkube/tree/master/quickstarts/maven/external-resources\">quickstarts/maven/external-resources</a>.\nThis is a plain Spring Boot application, whose images are auto generated like in the <a href=\"#zero-config\">Zero-Config</a> case.\nThe resource fragments are in <code>src/main/jkube</code>.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example fragment \"deployment.yml\"</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">spec:\n  replicas: 1\n  template:\n    spec:\n      volumes:\n        - name: config\n          gitRepo:\n            repository: 'https://github.com/jstrachan/sample-springboot-config.git'\n            revision: 667ee4db6bc842b127825351e5c9bae5a4fb2147\n            directory: .\n      containers:\n        - volumeMounts:\n            - name: config\n              mountPath: /app/config\n          env:\n            - name: KUBERNETES_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n      serviceAccount: ribbon</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>As you can see, there is no <code>metadata</code> section as would be expected for Kubernetes resources because it will be automatically added by the <code>kubernetes-maven-plugin</code>. The object&#8217;s <code>Kind</code>, if not given, is automatically derived from the\nfilename. In this case, the <code>kubernetes-maven-plugin</code> will create a <code>Deployment</code> because the file is called <code>deployment.yml</code>. Similar mappings between file names and resource type exist for each supported resource kind, the\ncomplete list of which (along with associated abbreviations) can be found in the <a href=\"#appendix-kind-mapping\">Appendix</a>.</p>\n</div>\n<div class=\"admonitionblock note\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-note\" title=\"Note\"></i>\n</td>\n<td class=\"content\">\nNow that sidecar containers are supported in this plugin(if <code>jkube.sidecar</code> is enabled), be careful whenever you&#8217;re supplying container name in the resource fragment. If container specified in resource fragment doesn&#8217;t have a name or it&#8217;s name is equal to default fmp generated application&#8217;s container name; it would not be treated as sidecar and it would be merged into main container. However, You can override plugin&#8217;s default name for main container via <code>jkube.generator.alias</code> property.\n</td>\n</tr>\n</table>\n</div>\n<hr>\n<div class=\"paragraph\">\n<p>Additionally, if you name your fragment using a name prefix followed by a dash and the mapped file name, the plugin will automatically use that name for your resource. So, for example, if you name your deployment fragment\n<code>myapp-deployment.yml</code>, the plugin will name your resource <code>myapp</code>. In the absence of such provided name for your resource, a name will be automatically derived from your project&#8217;s metadata (in particular, its <code>artifactId</code> as specified in your POM).</p>\n</div>\n<div class=\"paragraph\">\n<p>No image is also referenced in this example because the plugin also fills in the image details based on the configured image you are building with (either from a generator or from a dedicated image plugin configuration, as seen before).</p>\n</div>\n<div class=\"admonitionblock note\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-note\" title=\"Note\"></i>\n</td>\n<td class=\"content\">\nFor building images there is also an alternative mode using external Dockerfiles, in addition to the XML based configuration. Refer to <a href=\"#build-overview\">k8s:build</a> for details.\n</td>\n</tr>\n</table>\n</div>\n<hr>\n<div class=\"paragraph\">\n<p>Enrichment of resource fragments can be fine-tuned by using profile sub-directories. For more details see <a href=\"#profiles\">Profiles</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Now that we have seen some examples of the various ways how this plugin can be used, the following sections will describe the plugin goals and extension points in detail.</p>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"compatibility-with-Kubernetes\">2. Compatibility with Kubernetes</h2>\n<div class=\"sectionbody\">\n<div class=\"sect2\">\n<h3 id=\"kubernetes-compatibility\">2.1. Kubernetes Compatibility</h3>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 2. Kubernetes Compatibility</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 16.667%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">KMP</th>\n<th class=\"tableblock halign-left valign-top\">Kubernetes 1.19</th>\n<th class=\"tableblock halign-left valign-top\">Kubernetes 1.18</th>\n<th class=\"tableblock halign-left valign-top\">Kubernetes 1.17</th>\n<th class=\"tableblock halign-left valign-top\">Kubernetes 1.14</th>\n<th class=\"tableblock halign-left valign-top\">Kubernetes 1.12</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 1.5.0</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 1.4.0</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 1.3.0</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 1.2.0</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 1.1.1</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 1.1.0</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 1.0.2</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 1.0.1</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 1.0.0</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 0.2.0</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">x</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">x</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 0.1.1</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">x</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">x</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">x</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">KMP 0.1.0</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">x</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">x</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">x</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">✓</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"installation\">3. Installation</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>This plugin is available from Maven central and can be connected to\npre- and post-integration phase as seen below. The configuration and\navailable goals are described below.</p>\n</div>\n<div class=\"paragraph\">\n<p>By default, Maven will only search for plugins in the <code>org.apache.maven.plugins</code> and <code>org.codehaus.mojo</code> packages. In order to resolve the provider for the JKube plugin goals, you need to edit <code>~/.m2/settings.xml</code> and add the <code>org.eclipse.jkube</code> namespace so the <code>&lt;pluginGroups&gt;</code> configuration.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;settings&gt;\n      ...\n\n      &lt;pluginGroups&gt;\n        &lt;pluginGroup&gt;org.eclipse.jkube&lt;/pluginGroup&gt;\n      &lt;/pluginGroups&gt;\n\n      ...\n&lt;/settings&gt;</code></pre>\n</div>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n  &lt;version&gt;1.5.0&lt;/version&gt;\n\n  &lt;configuration&gt;\n     ....\n     &lt;images&gt;\n        &lt;!-- A single's image configuration --&gt;\n        &lt;image&gt;\n          ...\n          &lt;build&gt;\n           ....\n          &lt;/build&gt;\n        &lt;/image&gt;\n        ....\n     &lt;/images&gt;\n  &lt;/configuration&gt;\n\n  &lt;!-- Connect k8s:resource, k8s:build and k8s:helm to lifecycle phases --&gt;\n  &lt;executions&gt;\n    &lt;execution&gt;\n       &lt;id&gt;jkube&lt;/id&gt;\n       &lt;goals&gt;\n         &lt;goal&gt;resource&lt;/goal&gt;\n         &lt;goal&gt;build&lt;/goal&gt;\n         &lt;goal&gt;helm&lt;/goal&gt;\n       &lt;/goals&gt;\n    &lt;/execution&gt;\n  &lt;/executions&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"goals\">4. Goals Overview</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>This plugin supports a rich set for providing a smooth Java developer experience. These goals can be categorized in multiple groups:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"#goals-build\">Build goals</a> are all about creating and managing Kubernetes build artifacts like Docker images or S2I builds.</p>\n</li>\n<li>\n<p><a href=\"#goals-develop\">Development goals</a> target help not only in deploying resource descriptors to the development cluster but also to manage the lifecycle of the development cluster as well.</p>\n</li>\n</ul>\n</div>\n<table id=\"goals-build\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 3. Build Goals</caption>\n<colgroup>\n<col style=\"width: 25%;\">\n<col style=\"width: 75%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Goal</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkube:build\"><strong>k8s:build</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Build images</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkube:push\"><strong>k8s:push</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Push images to a registry</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkube:resource\"><strong>k8s:resource</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Create Kubernetes or OpenShift resource descriptors</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkube:apply\"><strong>k8s:apply</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Apply resources to a running cluster</p></td>\n</tr>\n</tbody>\n</table>\n<table id=\"goals-develop\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 4. Development Goals</caption>\n<colgroup>\n<col style=\"width: 25%;\">\n<col style=\"width: 75%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Goal</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkube:deploy\"><strong>k8s:deploy</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Deploy resources descriptors to a cluster after creating them and building the app. Same as <a href=\"#jkube:apply\"><strong>k8s:apply</strong></a> except that it runs in the background.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkube:undeploy\"><strong>k8s:undeploy</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Undeploy and remove resources descriptors from a cluster.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkube:watch\"><strong>k8s:watch</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Watch for file changes and perform rebuilds and redeployments</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkube:log\"><strong>k8s:log</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Show the logs of the running application</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong><a href=\"#jkube:debug\"><strong>k8s:debug</strong></a></strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Enable remote debugging</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>Depending on whether the OpenShift or Kubernetes operational mode is used, the workflow and the performed actions differs :</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 5. Workflows</caption>\n<colgroup>\n<col style=\"width: 11.1111%;\">\n<col style=\"width: 44.4444%;\">\n<col style=\"width: 44.4445%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Use Case</th>\n<th class=\"tableblock halign-left valign-top\">Kubernetes</th>\n<th class=\"tableblock halign-left valign-top\">OpenShift</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Build</p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p><code>k8s:build</code> <code>k8s:push</code></p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Creates an image against an exposed Docker daemon (with a <code>docker.tar</code>)</p>\n</li>\n<li>\n<p>Pushes the image to a registry which is then referenced from the configuration</p>\n</li>\n</ul>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p><code>k8s:build</code></p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Creates or uses a <code>BuildConfig</code></p>\n</li>\n<li>\n<p>Creates or uses an <code>ImageStream</code> which can be referenced by the deployment descriptors in a <code>DeploymenConfig</code></p>\n</li>\n<li>\n<p>Starts an OpenShift build with a <code>docker.tar</code> as input</p>\n</li>\n</ul>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Deploy</p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p><code>k8s:deploy</code></p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Applies a Kubernetes resource descriptor to cluster</p>\n</li>\n</ul>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p><code>k8s:deploy</code></p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Applies an OpenShift resource descriptor to a cluster</p>\n</li>\n</ul>\n</div></div></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"goals-overview-build\">5. Build Goals</h2>\n<div class=\"sectionbody\">\n<div class=\"sect2\">\n<h3 id=\"jkube:resource\">5.1. <strong>k8s:resource</strong></h3>\n<div class=\"paragraph\">\n<p>This goal generates Kubernetes resources based on your project. It can either be opinionated defaults or\nbased on the configuration provided in XML config or resource fragments in <code>src/main/jkube</code>.\nGenerated resources are in <code>target/classes/META-INF/jkube/kubernetes</code> directory.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"resource-labels-annotations\">5.1.1. Labels and Annotations</h4>\n<div class=\"paragraph\">\n<p>Labels and annotations can be easily added to any resource object. This is best explained by an example.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for label and annotations</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;!-- ... --&gt;\n  &lt;configuration&gt;\n    &lt;!-- ... --&gt;\n    &lt;resources&gt;\n      &lt;labels&gt; <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n        &lt;all&gt; <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n          &lt;property&gt; <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n            &lt;name&gt;organisation&lt;/name&gt;\n            &lt;value&gt;unesco&lt;/value&gt;\n          &lt;/property&gt;\n        &lt;/all&gt;\n        &lt;service&gt; <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n          &lt;property&gt;\n            &lt;name&gt;database&lt;/name&gt;\n            &lt;value&gt;mysql&lt;/value&gt;\n          &lt;/property&gt;\n          &lt;property&gt;\n            &lt;name&gt;persistent&lt;/name&gt;\n            &lt;value&gt;true&lt;/value&gt;\n          &lt;/property&gt;\n        &lt;/service&gt;\n        &lt;replicaSet&gt; <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n          &lt;!-- ... --&gt;\n        &lt;/replicaSet&gt;\n        &lt;pod&gt; <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n          &lt;!-- ... --&gt;\n        &lt;/pod&gt;\n        &lt;deployment&gt; <i class=\"conum\" data-value=\"7\"></i><b>(7)</b>\n          &lt;!-- ... --&gt;\n        &lt;/deployment&gt;\n      &lt;/labels&gt;\n\n      &lt;annotations&gt; <i class=\"conum\" data-value=\"8\"></i><b>(8)</b>\n         &lt;!-- ... --&gt;\n      &lt;/annotations&gt;\n    &lt;/resource&gt;\n  &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td><code>&lt;labels&gt;</code> section with <code>&lt;resources&gt;</code> contains labels which should be applied to objects of various kinds</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Within <code>&lt;all&gt;</code> labels which should be applied to <strong>every</strong> object can be specified</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td><code>&lt;service&gt;</code> labels are used to label services</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td><code>&lt;replicaSet&gt;</code> labels are for replica set and replication controller</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td><code>&lt;pod&gt;</code> holds labels for pod specifications in replication controller, replica sets and deployments</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td><code>&lt;deployment&gt;</code> is for labels on deployments (kubernetes) and deployment configs (openshift)</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"7\"></i><b>7</b></td>\n<td>The subelements are also available for specifying annotations.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"8\"></i><b>8</b></td>\n<td><code>&lt;remotes&gt;</code> you can set location of fragments as <code>URL</code>.</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>Labels and annotations can be specified in free form as a map. In this map, the element name is the name of the label or annotation respectively, whereas the content is the value to set.</p>\n</div>\n<div class=\"paragraph\">\n<p>The following subelements are possible for <code>&lt;labels&gt;</code> and <code>&lt;annotations&gt;</code> :</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 6. Label and annotation configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 85.7143%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>all</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">All entries specified in the <code>&lt;all&gt;</code> sections are applied to all resource objects created.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>deployment</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>Deployment</code> (for Kubernetes).</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>pod</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied pod specification as used in <code>ReplicationController</code>,  <code>ReplicaSets</code>, <code>Deployments</code> and <code>DeploymentConfigs</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>replicaSet</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>ReplicaSet</code> and <code>ReplicationController</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>service</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>Service</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ingress</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>Ingress</code> objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>serviceAccount</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels and annotations applied to <code>ServiceAccount</code> objects.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect3\">\n<h4 id=\"controller-resource-generation\">5.1.2. Controller Generation</h4>\n<div class=\"paragraph\">\n<p>In JKube terminology, a Controller resource is a Kubernetes resource which manages Pods created for your application. These can be one of the following resources:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/\">ReplicationController</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/\">ReplicaSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/\">Deployment</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/\">StatefulSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\">DaemonSet</a></p>\n</li>\n<li>\n<p><a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/job/\">Job</a></p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>By default Deployment is generated in Kubernetes mode. You can easily configure different aspects of generated Controller resource using XML configuration. Here is an example:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example of Controller Resource Configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n    &lt;resources&gt;\n        &lt;env&gt; <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n          &lt;organization&gt;Eclipse Foundation&lt;/organization&gt;\n          &lt;projectname&gt;jkube&lt;/projectname&gt;\n        &lt;/env&gt;\n        &lt;controllerName&gt;my-deploymentname&lt;/controllerName&gt; <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n        &lt;containerPrivileged&gt;true&lt;/containerPrivileged&gt; <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n        &lt;imagePullPolicy&gt;Always&lt;/imagePullPolicy&gt; <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n        &lt;replicas&gt;3&lt;/replicas&gt; <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n        &lt;liveness&gt; <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n            &lt;getUrl&gt;http://:8080/q/health&lt;/getUrl&gt;\n            &lt;tcpPort&gt;8080&lt;/tcpPort&gt;\n            &lt;initialDelaySeconds&gt;3&lt;/initialDelaySeconds&gt;\n            &lt;timeoutSeconds&gt;3&lt;/timeoutSeconds&gt;\n        &lt;/liveness&gt;\n        &lt;volumes&gt; <i class=\"conum\" data-value=\"7\"></i><b>(7)</b>\n          &lt;volume&gt;\n            &lt;name&gt;scratch&lt;/name&gt;\n            &lt;type&gt;emptyDir&lt;/type&gt;\n            &lt;medium&gt;Memory&lt;/medium&gt;\n            &lt;mounts&gt;\n              &lt;mount&gt;/var/scratch&lt;/mount&gt;\n            &lt;/mounts&gt;\n          &lt;/volume&gt;\n        &lt;/volumes&gt;\n    &lt;/resources&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Environment variables added to all of your application Pods</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Name of Controller(<code>metadata.name</code> set in generated Deployment, Job, ReplicaSet etc)</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td>Setting <a href=\"https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod\">Security Context</a> of all application Pods.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>Configure how images would be updated. Can be one of <code>IfNotPresent</code>, <code>Always</code> or <code>Never</code>. Read <a href=\"https://kubernetes.io/docs/concepts/containers/images/#updating-images\">Kubernetes Images docs</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td>Number of replicas of pods we want to have in our application</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td>Define an HTTP liveness request, see <a href=\"https://kubernetes.io/docs/concepts/containers/images/#updating-images\">Kubernetes Liveness/Readiness probes</a> for more details.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"7\"></i><b>7</b></td>\n<td>Mounting an EmptyDir Volume to your application pods</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>Here are the fields available in <code>&lt;resources&gt;</code> XML configuration that would work with this enricher:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 7. &lt;resources&gt; fields used by this enricher</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>env</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Environment variables which will be added to containers in Pod template spec.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#volume-xml-configuration\"><code>volumes</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for adding volume mounts to containers in Pod template spec</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>controllerName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Name of the controller resource(i.e. <code>Deployment</code>, <code>ReplicaSet</code>, <code>StatefulSet</code> etc) generated</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#probe-xml-configuration\"><code>liveness</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for adding a liveness probe</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#probe-xml-configuration\"><code>readiness</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for adding readiness probe</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>containerPrivileged</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Run container in privileged mode. Sets <code>privileged: true</code> in generated Controller&#8217;s PodTemplateSpec</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>imagePullPolicy</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How images should be pulled (maps to ImagePullPolicy).</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>replicas</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Number of replicas to create</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>serviceAccount</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ServiceAccount name which will be used by pods created by controller resources(e.g. <code>Deployment</code>, <code>ReplicaSet</code> etc)</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"sect4\">\n<h5 id=\"probe-xml-configuration\">Probe XML Configuration</h5>\n<div class=\"paragraph\">\n<p>Probe configuration is used for configuring <a href=\"https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes\">liveness and readiness probes</a> for containers. Both <code>&lt;liveness&gt;</code> and <code>&lt;readiness&gt;</code> probes the following options:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 8. XML Probe configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>initialDelaySeconds</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Initial delay in seconds before the probe is started.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>timeoutSeconds</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Timeout in seconds how long the probe might take.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>exec</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Command to execute for probing.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>getUrl</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Probe URL for HTTP Probe. Configures HTTP probe fields like <code>host</code>, <code>scheme</code>, <code>path</code> etc by parsing URL. For example, a <code>&lt;getUrl&gt;<a href=\"http://:8080/health&lt;/getUrl&gt\" class=\"bare\">http://:8080/health&lt;/getUrl&gt</a>;</code> would result in probe generated with fields set like this:</p>\n<p class=\"tableblock\">  host: \"\"</p>\n<p class=\"tableblock\">  path: /health</p>\n<p class=\"tableblock\">  port: 8080</p>\n<p class=\"tableblock\">  scheme: HTTP</p>\n<p class=\"tableblock\">Host name with empty value defaults to Pod IP. You probably want to set \"Host\" in httpHeaders instead.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>tcpPort</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">TCP port to probe.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>failureThreshold</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">When a probe fails, Kubernetes will try failureThreshold times before giving up</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>successThreshold</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Minimum consecutive successes for the probe to be considered successful after having failed.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>httpHeaders</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Custom headers to set in the request.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>periodSeconds</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How often in seconds to perform the probe. Defaults to 10 seconds. Minimum value is 1.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"volume-xml-configuration\">Volume XML Configuration</h5>\n<div class=\"paragraph\">\n<p><code>&lt;volumes&gt;</code> field contains a list of <code>&lt;volume&gt;</code> configurations. Different configurations are supported in order to support different <a href=\"https://kubernetes.io/docs/concepts/storage/volumes/\">Volumes in Kubernetes</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here are the options supported by a single <code>&lt;volume&gt;</code> :</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 9. XML <code>&lt;volume&gt;</code> configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>type</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">type of Volume</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>name</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">name of volume to be mounted</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>mounts</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of mount paths of this volume.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>path</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path for volume</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>medium</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">medium ,applicable for Volume type <code>emptyDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>repository</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">repository ,applicable for Volume type <code>gitRepo</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>revision</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">revision ,applicable for Volume type <code>gitRepo</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret name ,applicable for Volume type <code>secret</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>server</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Server name, applicable for Volume type <code>nfsPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>readOnly</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether it&#8217;s read only or not</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pdName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">pdName, applicable for Volume type <code>gcePdName</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>fsType</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">File system type for Volume</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>partition</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">partition, applicable for Volume type <code>gcePdName</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>endpoints</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">endpoints, applicable for Volume type <code>glusterFsPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>claimRef</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Claim Reference, applicable for Volume type <code>persistentVolumeClaim</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>volumeId</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">volume id</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>diskName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">disk name, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>diskUri</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">disk uri, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>kind</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">kind, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>cachingMode</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">caching mode, applicable for Volume type <code>azureDisk</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>hostPathType</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Host Path type</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>shareName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Share name,  applicable for Volume type <code>azureFile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>user</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">User name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretFile</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret File, applicable for Volume type <code>cephfs</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretRef</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret reference, applicable for Volume type <code>cephfs</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>lun</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">LUN(Logical Unit Number)</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>targetWwns</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">target WWNs, applicable for Volume type <code>fc</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>datasetName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">data set name, applicable for Volume type <code>flocker</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>portals</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">list of portals, applicable for Volume type <code>iscsi</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>targetPortal</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">target portal, applicable for Volume type <code>iscsi</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>registry</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">registry, applicable for Volume type <code>quobyte</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>volume</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">volume, applicable for Volume type <code>quobyte</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>group</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">group, applicable for Volume type <code>quobyte</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>iqn</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">IQN, applicable for Volume type <code>iscsi</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>monitors</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">list of monitors, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pool</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">pool, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>keyring</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">keyring, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>image</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">image, applicable for Volume type <code>rbd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>gateway</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">gateway, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>system</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">system, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>protectionDomain</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">protection domain, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>storagePool</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">storage pool, applicable for Volume type <code>scaleIO</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>volumeName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">volume name, applicable for Volume type <code>scaleIO</code> and <code>storageOS</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>configMapName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">ConfigMap name, applicable for Volume type <code>configMap</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>configMapItems</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of ConfigMap items, applicable for Volume type <code>configMap</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>items</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of items, applicable for Volume type <code>downwardAPI</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"resource-secrets\">5.1.3. Secrets</h4>\n<div class=\"paragraph\">\n<p>Once you&#8217;ve configured some docker registry credentials into <code>~/.m2/setting.xml</code>, as explained in the\n<a href=\"#authentication\">Authentication</a> section, you can create Kubernetes secrets from a server declaration.</p>\n</div>\n<div class=\"paragraph\">\n<p><strong>XML configuration</strong></p>\n</div>\n<div class=\"paragraph\">\n<p>You can create a secret using xml configuration in the <code>pom.xml</code> file. It should contain the following fields:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">key</th>\n<th class=\"tableblock halign-left valign-top\">required</th>\n<th class=\"tableblock halign-left valign-top\">description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerServerId</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>true</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">the server id which is configured in\n<code>~/.m2/setting.xml</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>name</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>true</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">this will be used as name of the kubernetes secret resource</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>namespace</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>false</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">the secret resource will be applied to the specific\nnamespace, if provided</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>This is best explained by an example.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Setting docker registry in properties</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;properties&gt;\n    &lt;jkube.docker.registry&gt;docker.io&lt;/docker.registry&gt;\n&lt;/properties&gt;</code></pre>\n</div>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for specifying Secret Configuration to be created</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n    &lt;resources&gt;\n        &lt;secrets&gt;\n            &lt;secret&gt;\n                &lt;dockerServerId&gt;${docker.registry}&lt;/dockerServerId&gt;\n                &lt;name&gt;mydockerkey&lt;/name&gt;\n            &lt;/secret&gt;\n        &lt;/secrets&gt;\n    &lt;/resources&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p><strong>Yaml fragment with annotation</strong></p>\n</div>\n<div class=\"paragraph\">\n<p>You can create a secret using a yaml fragment. You can reference the docker server id with an annotation\n<code>maven.jkube.io/dockerServerId</code>. The yaml fragment file should be put under\nthe <code>src/main/jkube/</code> folder.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">apiVersion: v1\nkind: Secret\nmetadata:\n  name: mydockerkey\n  namespace: default\n  annotations:\n    maven.jkube.io/dockerServerId: ${docker.registry}\ntype: kubernetes.io/dockercfg</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"ingress-generation\">5.1.4. Ingress Generation</h4>\n<div class=\"paragraph\">\n<p>Once you&#8217;ve enabled <code>jkube.createExternalUrls</code> property, you should be able to generate an opinionated ingress during k8s:resource goal. You can also configure it as per your needs using XML configuration or by providing your own resource fragments.</p>\n</div>\n<div class=\"paragraph\">\n<p><strong>XML Configuration</strong></p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 10. Fields supported in <code>&lt;resources&gt;</code></caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-xml-configuration\"><code>ingress</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration element for creating new Ingress</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>routeDomain</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Set host for Ingress or OpenShift Route</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>Here is an example of configuring Ingress using XML configuration:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Enable Ingress Generation by enabling createExternalUrl property</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;properties&gt;\n     &lt;jkube.createExternalUrls&gt;true&lt;/jkube.createExternalUrls&gt;\n&lt;/properties&gt;</code></pre>\n</div>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Ingress Configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n    &lt;resources&gt;\n        &lt;ingress&gt;\n          &lt;ingressTlsConfigs&gt;\n            &lt;ingressTlsConfig&gt; <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n               &lt;hosts&gt;\n                 &lt;host&gt;foo.bar.com&lt;/host&gt;\n               &lt;/hosts&gt;\n               &lt;secretName&gt;testsecret-tls&lt;/secretName&gt;\n            &lt;/ingressTlsConfig&gt;\n          &lt;/ingressTlsConfigs&gt;\n          &lt;ingressRules&gt;\n            &lt;ingressRule&gt;\n              &lt;host&gt;foo.bar.com&lt;/host&gt; <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n              &lt;paths&gt;\n                &lt;path&gt;\n                  &lt;pathType&gt;Prefix&lt;/pathType&gt; <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n                  &lt;path&gt;/foo&lt;/path&gt;  <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n                  &lt;serviceName&gt;service1&lt;/serviceName&gt; <i class=\"conum\" data-value=\"5\"></i><b>(5)</b>\n                  &lt;servicePort&gt;8080&lt;/servicePort&gt; <i class=\"conum\" data-value=\"6\"></i><b>(6)</b>\n                &lt;/path&gt;\n              &lt;/paths&gt;\n            &lt;/ingressRule&gt;\n          &lt;/ingressRules&gt;\n        &lt;/ingress&gt;\n    &lt;/resources&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td><a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/#tls\">Ingress TLS</a> Configuration to specify Secret that contains TLS private key and certificate</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Host names, can be precise matches or a wildcard. See <a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/#hostname-wildcards\">Kubernetes Ingress Hostname</a> documentation for more details</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td><a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types\">Ingress Path Type</a>, Can be one of <code>ImplementationSpecific</code>, <code>Exact</code> or <code>Prefix</code></td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>Ingress path corresponding to provided <code>service.name</code></td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"5\"></i><b>5</b></td>\n<td>Service Name corresponding to path</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"6\"></i><b>6</b></td>\n<td>Service Port corresponding to path</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>All the supported parameters in Ingress XML configuration are listed below:</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-xml-configuration\">Ingress XML Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>&lt;ingress&gt;</code> in XML configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 11. <code>&lt;ingress&gt;</code> configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-rule-xml-configuration\"><code>ingressRules</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">IngressRule configuration</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-tls-configuration\"><code>ingressTlsConfigs</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Ingress TLS configuration</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-rule-xml-configuration\">IngressRule XML Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>&lt;ingressRules&gt;</code> in XML configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 12. <code>&lt;ingressRule&gt;</code> configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>host</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Host name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-rule-path-configuration\"><code>paths</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">IngressRule path configuration</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-rule-path-configuration\">IngressRule Path XML Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>&lt;paths&gt;</code> in XML configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 13. IngressRule <code>&lt;path&gt;</code> XML configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>pathType</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">type of Path</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>path</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">path</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>serviceName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Service name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>servicePort</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Service port</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#ingress-rule-path-resource-xml-configuration\"><code>resource</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource reference in Ingress backend</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-rule-path-resource-xml-configuration\">IngressRule Path Resource XML Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>&lt;resource&gt;</code> in IngressRule&#8217;s path XML configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 14. IngressRule Path <code>&lt;resource&gt;</code> XML configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>name</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>kind</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource kind</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>apiGroup</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Resource&#8217;s apiGroup</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"ingress-tls-configuration\">IngressRule Path Resource XML Configuration</h5>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>&lt;ingressTlsConfigs&gt;</code> in IngressRule&#8217;s path XML configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 15. IngressTls <code>&lt;ingressTlsConfig&gt;</code> XML configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>secretName</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Secret name</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>hosts</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">a list of string <code>&lt;host&gt;</code> objects</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p><strong>Ingress Yaml fragment</strong>:</p>\n</div>\n<div class=\"paragraph\">\n<p>You can create Ingress using yaml fragment also. You would need to place a fragment of yaml in <code>src/main/jkube</code> directory like this:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Ingress fragment Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">apiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n  name: tls-example-ingress\nspec:\n  tls:\n  - hosts:\n    - https-example.foo.com\n    secretName: testsecret-tls\n  rules:\n  - host: https-example.foo.com\n    http:\n      paths:\n      - path: /\n        pathType: Prefix\n        backend:\n          service:\n            name: service1\n            port:\n              number: 80</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"serviceaccount-generation\">5.1.5. ServiceAccount Generation</h4>\n<div class=\"paragraph\">\n<p>You can configure <code>&lt;resource&gt;</code> configuration to generate a ServiceAccount or configure an already existing ServiceAccount into your generated Deployment.</p>\n</div>\n<div class=\"paragraph\">\n<p>Here is an example of XML configuration to generate a ServiceAccount:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Creating ServiceAccount via XML</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n    &lt;resources&gt;\n      &lt;serviceAccounts&gt;\n        &lt;serviceAccount&gt;\n          &lt;name&gt;my-serviceaccount&lt;/name&gt; <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n          &lt;deploymentRef&gt;my-deployment-name&lt;/deploymentRef&gt; <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n        &lt;/serviceAccount&gt;\n      &lt;/serviceAccounts&gt;\n    &lt;/resources&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Name of ServiceAccount to be created</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Deployment which will be using this ServiceAccount</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>If you don&#8217;t want to generate ServiceAccount but just use an existing ServiceAccount in your Deployment. You can configure it via <code>&lt;serviceAccount&gt;</code> field in resource configuration. Here is an example:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for Configuring already existing ServiceAccount into generated Deployment</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n    &lt;resources&gt;\n      &lt;serviceAccount&gt;my-existing-serviceaccount&lt;/serviceAccount&gt;\n    &lt;/resources&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p><strong>Service Account Resource fragment</strong>:</p>\n</div>\n<div class=\"paragraph\">\n<p>If you don&#8217;t want to use XML configuration, you can provide a resource fragment for ServiceAccount resource. Here is how it would look like:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">ServiceAccount resource fragment</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: build-robot</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"resource-validation\">5.1.6. Resource Validation</h4>\n<div class=\"paragraph\">\n<p>Resource goal also validates the generated resource descriptors using API specification of <a href=\"https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json\">Kubernetes</a>.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 16. Validation Configuration</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipResourceValidation</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If value is set to <code>true</code> then resource validation is skipped. This may be useful if resource validation is failing\n  for some reason but you still want to continue the deployment.</p>\n<p class=\"tableblock\">  Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skipResourceValidation</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>failOnValidationError</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If value is set to <code>true</code> then any validation error will block the plugin execution. A warning will be printed\n  otherwise.</p>\n<p class=\"tableblock\">  Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.failOnValidationError</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect3\">\n<h4 id=\"Supported-Properties-Resource\">5.1.7. Supported Properties for Resource goal</h4>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 17. Options available with resource goal</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>profile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Profile to use. A profile contains the enrichers and generators to use as well as their configuration. Profiles are\n  looked up in the classpath and can be provided as yaml files.</p>\n<p class=\"tableblock\">  Defaults to <code>default</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.profile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>sidecar</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether to enable sidecar behavior or not. By default pod specs are merged into main application container.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.sidecar</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipHealthCheck</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether to skip health checks addition in generated resources or not.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skipHealthCheck</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>workDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The JKube working directory. Defaults to <code>${project.build.directory}/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.workDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>environment</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Environment name where resources are placed. For example, if you set this property to dev and resourceDir is the\n  default one, plugin will look at <code>src/main/jkube/dev</code>.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.environment</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>useProjectClassPath</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Should we use the project&#8217;s compile time classpath to scan for additional enrichers/generators.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.useProjectClassPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>resourceDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Folder where to find project specific files.</p>\n<p class=\"tableblock\">  Defaults to <code>${basedir}/src/main/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.resourceDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>targetDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The generated Kubernetes manifests target direcotry.</p>\n<p class=\"tableblock\">  Defaults to <code>${project.build.outputDirectory}/META-INF/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.targetDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>resourceType</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The artifact type for attaching the generated resource file to the project. Can be either 'json' or 'yaml'.</p>\n<p class=\"tableblock\">  Defaults to <code>yaml</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.resourceType</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>mergeWithDekorate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">When resource generation is delegated to Dekorate, should JKube resources be merged with Dekorate generated ones.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.mergeWithDekorate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>interpolateTemplateParameters</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Interpolate parameter values from <code>*template.yml</code> fragments in the generated resource list (<code>kubernetes.yml</code>).</p>\n<p class=\"tableblock\">  This is useful when using JKube in combination with Helm.</p>\n<p class=\"tableblock\">  Placeholders for variables defined in template files can be used in the different resource fragments. Helm generated\n  charts will contain these placeholders/parameters.</p>\n<p class=\"tableblock\">  For <code>resource</code> goal, these placeholders are replaced in the\n  aggregated resource list YAML file (not in the individual generated resources) if this option is enabled.</p>\n<p class=\"tableblock\">  Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.interpolateTemplateParameters</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipResource</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Skip resource generation.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.resource</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>createExternalUrls</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Should we create external Ingress for any LoadBalancer Services which don&#8217;t already have them.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.createExternalUrls</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>domain</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Domain added to the Service ID when creating Kubernetes Ingresses or OpenShift routes.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.domain</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>replicas</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Number of replicas for the container.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>offline</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether to try detecting Kubernetes Cluster or stay offline.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.offline</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"jkube:build\">5.2. <strong>k8s:build</strong></h3>\n<div class=\"paragraph\">\n<p>This goal is for building Docker images.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"build-kubernetes\">5.2.1. Kubernetes Build</h4>\n<div class=\"paragraph\">\n<p>A normal Docker build is performed by default. The connection configuration to\naccess the Docker daemon is described in <a href=\"#access-configuration\">Access Configuration</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>In order to make the generated images available to the Kubernetes cluster the generated images need to be pushed to a\nregistry with the goal <a href=\"#jkube:push\"><strong>k8s:push</strong></a>. This is not necessary for single node clusters, though as there is no need to\ndistribute images.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"build-goal-configuration\">5.2.2. Configuration (XML)</h4>\n<div class=\"paragraph\">\n<p>The following sections describe the usual configuration, which is similar to the build configuration used in the\n <a href=\"https://dmp.fabric8.io\">docker-maven-plugin</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>In addition a more automatic way for creating predefined build configuration can be performed with so called <a href=\"#generators\">Generators</a>. Generators are very flexible and can be easily created. These are described in an extra <a href=\"#generators\">section</a>. Note that if you&#8217;re providing your own XML image configuration, it would be given more precedence. Generators won&#8217;t be used in case you&#8217;re already using your own custom image configuration.</p>\n</div>\n<div class=\"paragraph\">\n<p>Global configuration parameters specify overall behavior common for all images to build. Some of the configuration options are shared with other goals.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 18. Global configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildStrategy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Defines what build strategy to choose while building container image.\nPossible values are <code>docker</code> and <code>jib</code> out of which <code>docker</code> is default.</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.strategy</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>apiVersion</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Use this variable if you are using an older version of docker not compatible with the current default use to\n  communicate with the server.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.apiVersion</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>authConfig</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Authentication information when pulling from or pushing to Docker registry. There is a dedicated section\n  <a href=\"#authentication\">Authentication</a> for how to do security.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>autoPull</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Decide how to pull missing base images or images to start:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>on</code> : Automatic download any missing images (default)</p>\n</li>\n<li>\n<p><code>off</code> : Automatic pulling is switched off</p>\n</li>\n<li>\n<p><code>always</code> : Pull images always even when they already exist locally</p>\n</li>\n<li>\n<p><code>once</code> : For multi-module builds images are only checked once and pulled for the whole build.</p>\n</li>\n</ul>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.autoPull</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildRecreate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>If the effective <a href=\"#build-mode\">mode</a> is <code>openshift</code> then this option decides how the OpenShift resource objects\n   associated with the build should be treated when they already exist:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>buildConfig</code> or <code>bc</code> : Only the BuildConfig is recreated</p>\n</li>\n<li>\n<p><code>imageStream</code> or <code>is</code> : Only the ImageStream is recreated</p>\n</li>\n<li>\n<p><code>all</code> : Both, BuildConfig and ImageStream are recreated</p>\n</li>\n<li>\n<p><code>none</code> : Neither BuildConfig nor ImageStream is recreated</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The default is <code>none</code>. If you provide the property without value then <code>all</code> is assumed, so everything gets recreated.</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.recreate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"image-pull-policy\"></a> <strong>imagePullPolicy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Specify whether images should be pull when looking for base images while building or images for starting.\nThis property can take the following values (case insensitive):</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>IfNotPresent</code>: Automatic download any missing images (default)</p>\n</li>\n<li>\n<p><code>Never</code> : Automatic pulling is switched off always</p>\n</li>\n<li>\n<p><code>Always</code> : Pull images always even when they already exist locally.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>By default a progress meter is printed out on the console, which is omitted when using Maven in batch mode (option <code>-B</code>). A very simplified progress meter is provided when using no color output (i.e. with <code>-Djkube.useColor=false</code>).</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.imagePullPolicy</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>certPath</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to SSL certificate when SSL is used for communicating with the Docker daemon. These certificates are normally\n  stored in <code>~/.docker/</code>. With this configuration the path can be set explicitly. If not set, the fallback is first\n  taken from the environment variable <code>DOCKER_CERT_PATH</code> and then as last resort <code>~/.docker/</code>. The keys in this are\n  expected with it standard names <code>ca.pem</code>, <code>cert.pem</code> and <code>key.pem</code>.\n  Please refer to the <a href=\"https://docs.docker.com/articles/https\">Docker documentation</a> for more information about SSL\n  security with Docker.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.certPath</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerHost</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>The URL of the Docker Daemon. If this configuration option is not given, then the optional <code>&lt;machine&gt;</code> configuration\nsection is consulted. The scheme of the URL can be either given directly as <code>http</code> or <code>https</code>\ndepending on whether plain HTTP communication is enabled or SSL should\nbe used. Alternatively the scheme could be <code>tcp</code> in which case the\nprotocol is determined via the IANA assigned port: 2375 for <code>http</code>\nand 2376 for <code>https</code>. Finally, Unix sockets are supported by using\nthe scheme <code>unix</code> together with the filesystem path to the unix socket.</p>\n</div>\n<div class=\"paragraph\">\n<p>The discovery sequence used by the docker-maven-plugin to determine\nthe URL is:</p>\n</div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>\n<p>Value of <strong>dockerHost</strong> (<code>jkube.docker.host</code>)</p>\n</li>\n<li>\n<p>The Docker host associated with the docker-machine named in <code>&lt;machine&gt;</code>, i.e. the <code>DOCKER_HOST</code> from <code>docker-machine env</code>. See <a href=\"#docker-machine\">below</a> for more information about Docker machine support.</p>\n</li>\n<li>\n<p>The value of the environment variable <code>DOCKER_HOST</code>.</p>\n</li>\n<li>\n<p><code>unix:///var/run/docker.sock</code> if it is a readable socket.</p>\n</li>\n</ol>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.host</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>filter</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">In order to temporarily restrict the operation of plugin goals this configuration option can be used.\n  Typically this will be set via the system property <code>jkube.image.filter</code> when Maven is called. The value can be a single\n  image name (either its alias or full name) or it can be a comma separated list with multiple image names. Any name\n  which doesn&#8217;t refer an image in the configuration will be ignored.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.image.filter</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>machine</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Docker machine configuration. See <a href=\"#docker-machine\">Docker Machine</a> for possible values.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>maxConnections</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Number of parallel connections are allowed to be opened to the Docker Host. For parsing log output, a connection needs\n  to be kept open (as well for the wait features), so don&#8217;t put that number to low. Default is 100 which should be\n  suitable for most of the cases.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.maxConnections</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>access</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Group of configuration parameters to connect to Kubernetes/OpenShift cluster.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>outputDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default output directory to be used by this plugin.\n  The default value is <code>target/docker</code> and is only used for the goal <code>k8s:build</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.target.dir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>profile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Profile to which contains enricher and generators configuration. See <a href=\"#profiles\">Profiles</a> for details.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.profile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>registry</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specify globally a registry to use for pulling and pushing images. See <a href=\"#registry\">Registry handling</a> for details.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.registry</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skip</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">With this parameter the execution of this plugin can be skipped completely.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipBuild</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set not images will be build (which implies also <em>skip.tag</em>) with <code>k8s:build</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.build</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipBuildPom</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set the build step will be skipped for modules of type <code>pom</code>. If not set, then by default projects of type <code>pom</code>\n  will be skipped if there are no image configurations contained.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.build.pom</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipTag</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code> this plugin won&#8217;t add any tags to images that have been built with <code>k8s:build</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.tag</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipMachine</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Skip using docker machine in any case</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.skip.machine</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>sourceDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default directory that contains the assembly descriptor(s) used by the plugin. The default value is <code>src/main/docker</code>.\n  This option is only relevant for the <code>k8s:build</code> goal.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.build.source.dir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>verbose</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Boolean attribute for switching on verbose output like the build steps when doing a Docker build. Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.verbose</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logDate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The date format to use when logging messages from Docker. Default is <code>DEFAULT</code> (<code>HH:mm:ss.SSS</code>)</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.logDate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logStdout</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Log to stdout regardless if log files are configured or not. Default is <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.logStdout</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect3\">\n<h4 id=\"_kubernetes_access_configuration\">5.2.3. Kubernetes Access Configuration</h4>\n<div class=\"paragraph\">\n<p>You can configure parameters to define how plugin is going to connect to Kubernetes cluster instead of relying on default parameters.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n  &lt;access&gt;\n    &lt;username&gt;&lt;/username&gt;\n    &lt;password&gt;&lt;/password&gt;\n    &lt;masterUrl&gt;&lt;/masterUrl&gt;\n    &lt;apiVersion&gt;&lt;/apiVersion&gt;\n  &lt;/access&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>username</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Username on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.username</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>password</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Password on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.password</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>namespace</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Namespace on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.namespace</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>masterUrl</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Master URL on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.masterUrl</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>apiVersion</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Api version on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.apiVersion</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>caCertFile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">CaCert File on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.caCertFile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>caCertData</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">CaCert Data on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.caCertData</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>clientCertFile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Client Cert File on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.clientCertFile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>clientCertData</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Client Cert Data on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.clientCertData</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>clientKeyFile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Client Key File on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.clientKeyFile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>clientKeyData</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Client Key Data on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.clientKeyData</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>clientKeyAlgo</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Client Key Algorithm on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.clientKeyAlgo</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>clientKeyPassphrase</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Client Key Passphrase on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.clientKeyPassphrase</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>trustStoreFile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Trust Store File on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.trustStoreFile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>trustStorePassphrase</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Trust Store Passphrase on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.trustStorePassphrase</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>keyStoreFile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Key Store File on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.keyStoreFile</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>keyStorePassphrase</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Key Store Passphrase on which to operate.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.keyStorePassphrase</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect3\">\n<h4 id=\"_image_configuration\">5.2.4. Image Configuration</h4>\n<div class=\"paragraph\">\n<p>The configuration how images should be created a defined in a dedicated <code>&lt;images&gt;</code> sections. These are specified for\neach image within the <code>&lt;images&gt;</code> element of the configuration with one <code>&lt;image&gt;</code> element per image to use.</p>\n</div>\n<div class=\"paragraph\">\n<p>The <code>&lt;image&gt;</code> element can contain the following sub elements:</p>\n</div>\n<table id=\"config-image\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 19. Image Configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#image-name\"><strong>name</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Each <code>&lt;image&gt;</code> configuration has a mandatory, unique docker\nrepository <em>name</em>. This can include registry and tag parts, but also placeholder parameters. See below for a detailed explanation.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>alias</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Shortcut name for an image which can be used for\nidentifying the image within this configuration. This is used when\nlinking images together or for specifying it with the global <strong>image</strong> configuration element.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#registry\"><strong>registry</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Registry to use for this image. If the <code>name</code> already contains a registry this takes precedence. See <a href=\"#registry\">Registry handling</a> for more details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#config-image-build\"><strong>build</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Element which contains all the configuration aspects when doing a <a href=\"#jkube:build\"><strong>k8s:build</strong></a>. This element can be omitted if the image is only pulled from a registry e.g. as support for integration tests like database images.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>The <code>&lt;build&gt;</code> section is mandatory and is explained in <a href=\"#build-configuration\">below</a>.</p>\n</div>\n<div id=\"image-name\" class=\"paragraph\">\n<p>When specifying the image name in the configuration with the <code>&lt;name&gt;</code> field you can use several placeholders which are replaced during runtime by this plugin. In addition you can use regular Maven properties which are resolved by Maven itself.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 20. Image Names</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Placeholder</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%g</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The last part of the Maven group name, sanitized so that it can be used as username on GitHub. Only the part after the last dot is used. E.g. for a group id <code>org.eclipse.jkube</code> this placeholder would insert <code>jkube</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%a</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A sanitized version of the artefact id so that it can be used as part of an Docker image name. I.e. it is converted to all lower case (as required by Docker)</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%v</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The project version. Synonym to <code>${project.version}</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%l</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If the project version ends with <code>-SNAPSHOT</code> then this placeholder is <code>latest</code>, otherwise its the full version (same as <code>%v</code>)</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>%t</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If the project version ends with <code>-SNAPSHOT</code> this placeholder resolves to <code>snapshot-&lt;timestamp&gt;</code> where timestamp has the date format <code>yyMMdd-HHmmss-SSSS</code> (eg <code>snapshot-</code>). This feature is especially useful during development in oder to avoid conflicts when images are to be updated which are still in use. You need to take care yourself of cleaning up old images afterwards, though.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"listingblock\">\n<div class=\"title\">Example for &lt;image&gt;</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n  &lt;!-- .... --&gt;\n  &lt;images&gt;\n    &lt;image&gt; <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n      &lt;name&gt;%g/jkube-build-demo:0.1&lt;/name&gt; <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n      &lt;alias&gt;service&lt;/alias&gt; <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n      &lt;build&gt;....&lt;/build&gt; <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n    &lt;/image&gt;\n    &lt;image&gt;\n      ....\n    &lt;/image&gt;\n  &lt;/images&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>One or more <code>&lt;image&gt;</code> definitions</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>The Docker image name used when creating the image. Note that <code>%g</code> would be replaced by project group id.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td>An alias which can be used in other parts of the plugin to reference to this image. This alias must be unique.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>A <code>&lt;build&gt;</code> section as described in <a href=\"#buid-configuration\">Build Configuration</a></td>\n</tr>\n</table>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"build-configuration\">5.2.5. Build Configuration</h4>\n<div id=\"build-overview\" class=\"paragraph\">\n<p>There are two different modes how images can be built:</p>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Inline plugin configuration</div>\n<p>With an inline plugin configuration all information required to build the image is contained in the plugin configuration. By default its the standard XML based configuration for the plugin but can be switched to a property based configuration syntax as described in the section <a href=\"#external-configuration\">External configuration</a>. The XML configuration syntax is recommended because of its more structured and typed nature.</p>\n</div>\n<div class=\"paragraph\">\n<p>When using this mode, the Dockerfile is created on the fly with all instructions extracted from the configuration given.</p>\n</div>\n<div id=\"external-dockerfile\" class=\"paragraph\">\n<div class=\"title\">External Dockerfile or Docker archive</div>\n<p>Alternatively an external Dockerfile template or Docker archive can be used. This mode is switched on by using one of these three configuration options within</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><strong>contextDir</strong> specifies docker build context if an external dockerfile is located outside of Docker build context. If not specified, Dockerfile&#8217;s parent directory is used as build context.</p>\n</li>\n<li>\n<p><strong>dockerFile</strong> specifies a specific Dockerfile path. The Docker build context directory is set to <code>contextDir</code> if given. If not the directory by default is the directory in which the Dockerfile is stored.</p>\n</li>\n<li>\n<p><strong>dockerArchive</strong> specifies a previously saved image archive to load directly. If a <code>dockerArchive</code> is provided, no <code>dockerFile</code> must be given.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>All paths can be either absolute or relative paths. A relative path is looked up in <code>${project.basedir}/src/main/docker</code> by default. You can make it easily an absolute path by using <code>${project.basedir}</code> in your configuration.</p>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Adding assemblies in Dockerfile mode</div>\n<p>You can also use an assembly if specified in an <a href=\"#build-assembly\">assembly configuration</a>.\nHowever, you need to add the files on your own in the Dockerfile with an <code>ADD</code> or <code>COPY</code> command.\nThe files of the assembly are stored in a build context relative directory <code>maven/</code> but can be changed by changing the assembly name with the option <code>&lt;name&gt;</code> in the assembly configuration.</p>\n</div>\n<div class=\"paragraph\">\n<p>E.g. the files can be added with</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-dockerfile\" data-lang=\"dockerfile\">COPY maven/ /my/target/directory</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>so that the assembly files will end up in <code>/my/target/directory</code> within the container.</p>\n</div>\n<div class=\"paragraph\">\n<p>If this directory contains a <code>.jkube-dockerignore</code> (or alternatively, a <code>.jkube-dockerexclude</code> file), then it is used\nfor excluding files for the build. If the file doesn&#8217;t exist, or it&#8217;s empty, then there are no exclusions.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each line in this file is treated as an entry in the <code>excludes</code> assembly <code>fileSet</code> <a href=\"#build-assembly-inline\">configuration </a>.\nFiles can be referenced by using their relative path name.\nWildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</div>\n<div class=\"paragraph\">\n<p>It is similar to <code>.dockerignore</code> when using Docker but has a slightly different syntax (hence the different name).</p>\n</div>\n<div class=\"paragraph\">\n<p><a href=\"#ex-build-dockerexclude\">Example <code>.jkube-dockerexclude</code> or <code>.jkube-dockerignore</code></a> is an  example which excludes all compiled Java classes.</p>\n</div>\n<div id=\"ex-build-dockerexclude\" class=\"exampleblock\">\n<div class=\"title\">Example 1. Example <code>.jkube-dockerexclude</code> or <code>.jkube-dockerignore</code></div>\n<div class=\"content\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code>target/classes/**  <i class=\"conum\" data-value=\"1\"></i><b>(1)</b></code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Exclude all compiled classes</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If this directory contains a <code>.jkube-dockerinclude</code> file, then it is used for including only those files for the build.\nIf the file doesn&#8217;t exist or it&#8217;s empty, then everything is included.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each line in this file is treated as an entry in the <code>includes</code> assembly <code>fileSet</code> <a href=\"#build-assembly-inline\">configuration </a>.\nFiles can be referenced by using their relative path name.\nWildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</div>\n<div class=\"paragraph\">\n<p><a href=\"#ex-build-dockerinclude\">Example <code>.jkube-dockerinclude</code></a> shows how to include only jar file that have build to the Docker build context.</p>\n</div>\n<div id=\"ex-build-dockerinclude\" class=\"exampleblock\">\n<div class=\"title\">Example 2. Example <code>.jkube-dockerinclude</code></div>\n<div class=\"content\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code>target/*.jar  <i class=\"conum\" data-value=\"1\"></i><b>(1)</b></code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Only add jar file to you Docker build context.</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Except for the <a href=\"#build-assembly\">assembly configuration</a> all other configuration options are ignored for now.</p>\n</div>\n<div id=\"simple-dockerfile-build\" class=\"paragraph\">\n<div class=\"title\">Simple Dockerfile build</div>\n<p>When only a single image should be built with a Dockerfile no XML configuration is needed at all.\nAll what need to be done is to place a <code>Dockerfile</code> into the top-level module directory, alongside to <code>pom.xml</code>.\nYou can still configure <a href=\"#global-configuration\">global aspects</a> in the plugin configuration, but as soon as you add an <code>&lt;image&gt;</code> in the XML configuration, you need to configure also the build explicitly.</p>\n</div>\n<div class=\"paragraph\">\n<p>The image name is by default set from the Maven coordinates (<code>%g/%a:%l</code>, see <a href=\"#image-name\">Image Name </a> for an explanation of the params which are essentially the Maven GAV)\nThis name can be set with the property <code>jkube.image.name</code>.</p>\n</div>\n<div id=\"build-filtering\" class=\"paragraph\">\n<div class=\"title\">Filtering</div>\n<p>kubernetes-maven-plugin filters given Dockerfile with Maven properties, much like the <code>maven-resource-plugin</code> does. Filtering is enabled by default and can be switched off with a build config <code>&lt;filter&gt;false&lt;/filter&gt;</code>. Properties which we want to replace are specified with the <code>${..}</code> syntax.\nReplacement includes Maven project properties<span class=\"line-through\"> such as <code>${project.artifactId}</code></span>, properties set in the build, command-line properties, and system properties. Unresolved properties remain untouched.</p>\n</div>\n<div class=\"paragraph\">\n<p>This partial replacement means that you can easily mix it with Docker build arguments and environment variable reference, but you need to be careful.\nIf you want to be more explicit about the property delimiter to clearly separate Docker properties and Maven properties you can redefine the delimiter.\nIn general, the <code>filter</code> option can be specified the same way as delimiters in the resource plugin.\nIn particular,  if this configuration contains a * then the parts left, and right of the asterisks are used as delimiters.</p>\n</div>\n<div class=\"paragraph\">\n<p>For example, the default <code>&lt;filter&gt;${*}&lt;/filter&gt;</code> parse Maven properties in the format that we know.\nIf you specify a single character for <code>&lt;filter&gt;</code> then this delimiter is taken for both, the start and the end.\nE.g a <code>&lt;filter&gt;@&lt;/filter&gt;</code> triggers on parameters in the format <code>@&#8230;&#8203;@</code>, much like in the <code>maven-invoker-plugin</code>.\nUse something like this if you want to clearly separate from Docker builds args.\nThis form of property replacement works for Dockerfile only.\nFor replacing other data in other files targeted for the Docker image, please use the <code>maven-resource-plugin</code> or an <a href=\"#build-assembly\">assembly configuration</a> with filtering to make them available in the docker build context.</p>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Example</div>\n<p>The following example replaces all properties in the format <code>@property@</code> within the Dockerfile.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n &lt;configuration&gt;\n   &lt;images&gt;\n     &lt;image&gt;\n       &lt;name&gt;user/demo&lt;/name&gt;\n       &lt;build&gt;\n         &lt;filter&gt;@&lt;/filter&gt;\n       &lt;/build&gt;\n     &lt;/image&gt;\n   &lt;/images&gt;\n &lt;/configuration&gt;\n ...\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div id=\"build-plugin\" class=\"paragraph\">\n<div class=\"title\">Build Plugins</div>\n<p>This plugin supports so call <strong>dmp-plugins</strong> which are used during the build phase.\ndmp-plugins are enabled by just declaring a dependency in the plugin declaration:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n\n  &lt;dependencies&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n      &lt;artifactId&gt;run-java-sh&lt;/artifactId&gt;\n      &lt;version&gt;1.2.2&lt;/version&gt;\n    &lt;/dependency&gt;\n  &lt;/dependencies&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code>org.eclipse.jkube.runsh.RunShLoader</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>During a build with <code>kubernetes-maven-plugin:build</code>, those classes are loaded and certain fixed method are called.</p>\n</div>\n<div class=\"paragraph\">\n<p>The following methods are supported:</p>\n</div>\n<table id=\"build-plugin-methods\" class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Method</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>addExtraFiles</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A <em>static</em> method called by dmp with a single <code>File</code> argument. This will point to a directory <code>docker-extra</code> which can be referenced easily by a Dockerfile or an assembly. A dmp plugin typically will create an own subdirectory to avoid a clash with other dmp-plugins.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>If a configured plugin does not provide method of this name and signature, then it will be simply ignored.\nAlso, no interface needs to be implemented to keep the coupling low.</p>\n</div>\n<div class=\"paragraph\">\n<p>The following official dmp-plugins are known and supported:</p>\n</div>\n<table id=\"build-plugins-official\" class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4286%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Name</th>\n<th class=\"tableblock halign-left valign-top\">G,A</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"https://github.com/fabric8io-images/run-java-sh\">run-java.sh</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.io</code>, <code>run-java</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">General purpose startup script fo running Java applications. The dmp plugin creates a\n  <code>target/docker-extra/run-java/run-java.sh</code> which can be included in a Dockerfile (see the example above).\n  See the <a href=\"https://github.com/fabric8io-images/run-java-sh\">run-java.sh Documentation</a> for more details.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>Check out <code>samples/run-java</code> for a fully working example.</p>\n</div>\n<div class=\"paragraph\">\n<p>All build relevant configuration is contained in the <code>&lt;build&gt;</code> section\nof an image configuration. The following configuration options are supported:</p>\n</div>\n<table id=\"config-image-build\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 21. Build configuration (<a href=\"#config-image\">&lt;image&gt; </a>)</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#config-image-build-assembly\"><strong>assembly</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specifies the assembly configuration as described in <a href=\"#build-assembly\">Build Assembly</a></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-buildargs\"><strong>args</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Map specifying the value of <a href=\"https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg\">Docker build args</a>\nwhich should be used when building the image with an external Dockerfile which uses build arguments. The key-value syntax is the same as when defining Maven properties (or <code>labels</code> or <code>env</code>).\nThis argument is ignored when no external Dockerfile is used. Build args can also be specified as properties as\ndescribed in <a href=\"#build-buildargs\">Build Args</a></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>buildOptions</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Map specifying the build options to provide to the docker daemon when building the image. These options map to the ones listed as query parameters in the\n<a href=\"https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#build-image-from-a-dockerfile\">Docker Remote API</a> and are restricted to simple options\n(e.g.: memory, shmsize). If you use the respective configuration options for build options natively supported by the build configuration (i.e. <code>noCache</code>, <code>cleanup=remove</code> for buildoption <code>forcerm=1</code> and <code>args</code> for build args) then these will override any corresponding options given here. The key-value syntax is the same as when defining environment variables or labels as described in <a href=\"#misc-env\">Setting Environment Variables and Labels</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>cleanup</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Cleanup dangling (untagged) images after each build (including any containers created from them). Default is <code>try</code> which tries to remove the old image, but doesn&#8217;t fail the build if this is not possible because e.g. the image is still used by a running container. Use <code>remove</code> if you want to fail the build and <code>none</code> if no cleanup is requested.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"context-dir\"></a><strong>contextDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to a directory used for the build&#8217;s context. You can specify the <code>Dockerfile</code> to use with <strong>dockerFile</strong>, which by default is the Dockerfile found in the <code>contextDir</code>. The Dockerfile can be also located outside of the <code>contextDir</code>, if provided with an absolute file path. See <a href=\"#external-dockerfile\">External Dockerfile</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-startup\"><strong>cmd</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A command to execute by default (i.e. if no command is provided when a container for this image is started). See <a href=\"#misc-startup\">Startup Arguments</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>compression</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The compression mode how the build archive is transmitted to the docker daemon (<code>k8s:build</code>) and how docker build archives are attached to this build as sources (<code>k8s:source</code>). The value can be <code>none</code> (default), <code>gzip</code> or <code>bzip2</code>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerFile</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to a <code>Dockerfile</code> which also triggers <em>Dockerfile mode</em>. See <a href=\"#external-dockerfile\">External Dockerfile</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>dockerArchive</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Path to a saved image archive which is then imported. See <a href=\"#external-dockerfile\">Docker archive</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-startup\"><strong>entryPoint</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">An entrypoint allows you to configure a container that will run as an executable. See <a href=\"#misc-startup\">Startup Arguments</a> for details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-env\"><strong>env</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The environments as described in <a href=\"#misc-env\">Setting Environment Variables and Labels</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>filter</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Enable and set the delimiters for property replacements. By default properties in the format <code>${..}</code> are replaced with Maven properties. You can switch off property replacement by setting this property to <code>false</code>. When using a single char like <code>@</code> then this is used as a delimiter (e.g <code>@&#8230;&#8203;@</code>). See <a href=\"#build-filtering\">Filtering</a> for more details.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"build-config-from\"></a><strong>from</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The base image which should be used for this image. If not given this default to <code>busybox:latest</code> and is suitable for a pure data image.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a id=\"build-config-from-ext\"></a><strong>fromExt</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Extended definition for a base image. This field holds a map of defined in <code>&lt;key&gt;value&lt;/key&gt;</code> format. The known keys are:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>&lt;name&gt;</code> : Name of the base image</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>A provided <code>&lt;from&gt;</code> takes precedence over the name given here. This tag is useful for extensions of this plugin.</p>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-healthcheck\"><strong>healthCheck</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Definition of a health check as described in <a href=\"#build-healthcheck\">Healthcheck</a></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>imagePullPolicy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specific pull policy for the base image. This overwrites any global pull policy.\n  See the global configuration option <a href=\"#image-pull-policy\">imagePullPolicy</a> for the possible values and the default.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#misc-env\"><strong>labels</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Labels  as described in <a href=\"#misc-env\">Setting Environment Variables and Labels</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>maintainer</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The author (<code>MAINTAINER</code>) field for the generated image</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>noCache</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Don&#8217;t use Docker&#8217;s build cache. This can be overwritten by setting a system property <code>docker.noCache</code> when running Maven.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>cacheFrom</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A list of <code>&lt;image&gt;</code> elements specifying image names to use as cache sources.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>optimise</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">if set to true then it will compress all the <code>runCmds</code> into a single <code>RUN</code> directive so that only one image layer is created.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ports</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The exposed ports which is a list of <code>&lt;port&gt;</code> elements, one for each port to expose. Whitespace is trimmed from each element and empty elements are ignored. The format can be either pure numerical (\"8080\") or with the protocol attached (\"8080/tcp\").</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>shell</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Shell to be used for the <strong>runCmds</strong>. It contains <strong>arg</strong> elements which are defining the executable and its params.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>runCmds</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Commands to be run during the build process. It contains <strong>run</strong> elements which are passed to the shell. Whitespace is trimmed from each element and empty elements are ignored. The run commands are inserted right after the assembly and after <strong>workdir</strong> into the Dockerfile.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skip</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">if set to true disables building of the image. This config option is best used together with a maven property</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipTag</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code> this plugin won&#8217;t add any tags to images.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tags</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of additional <code>tag</code> elements with which an image is to be tagged after the build. Whitespace is trimmed from each element and empty elements are ignored.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>user</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">User to which the Dockerfile should switch to the end (corresponds to the <code>USER</code> Dockerfile directive).</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>volumes</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of <code>volume</code> elements to create a container volume. Whitespace is trimmed from each element and empty elements are ignored.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>workdir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Directory to change to when starting the container.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>From this configuration this Plugin creates an in-memory Dockerfile,\ncopies over the assembled files and calls the Docker daemon via its\nremote API.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;build&gt;\n  &lt;from&gt;java:8u40&lt;/from&gt;\n  &lt;maintainer&gt;john.doe@example.com&lt;/maintainer&gt;\n  &lt;tags&gt;\n    &lt;tag&gt;latest&lt;/tag&gt;\n    &lt;tag&gt;${project.version}&lt;/tag&gt;\n  &lt;/tags&gt;\n  &lt;ports&gt;\n    &lt;port&gt;8080&lt;/port&gt;\n  &lt;/ports&gt;\n  &lt;volumes&gt;\n    &lt;volume&gt;/path/to/expose&lt;/volume&gt;\n  &lt;/volumes&gt;\n  &lt;buildOptions&gt;\n    &lt;shmsize&gt;2147483648&lt;/shmsize&gt;\n  &lt;/buildOptions&gt;\n\n  &lt;shell&gt;\n    &lt;exec&gt;\n      &lt;arg&gt;/bin/sh&lt;/arg&gt;\n      &lt;arg&gt;-c&lt;/arg&gt;\n    &lt;/exec&gt;\n  &lt;/shell&gt;\n  &lt;runCmds&gt;\n    &lt;run&gt;groupadd -r appUser&lt;/run&gt;\n    &lt;run&gt;useradd -r -g appUser appUser&lt;/run&gt;\n  &lt;/runCmds&gt;\n\n  &lt;entryPoint&gt;\n    &lt;!-- exec form for ENTRYPOINT --&gt;\n    &lt;exec&gt;\n      &lt;arg&gt;java&lt;/arg&gt;\n      &lt;arg&gt;-jar&lt;/arg&gt;\n      &lt;arg&gt;/opt/demo/server.jar&lt;/arg&gt;\n    &lt;/exec&gt;\n  &lt;/entryPoint&gt;\n\n  &lt;assembly&gt;\n    &lt;mode&gt;dir&lt;/mode&gt;\n    &lt;targetDir&gt;/opt/demo&lt;/targetDir&gt;\n  &lt;/assembly&gt;\n&lt;/build&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>In order to see the individual build steps you can switch on <code>verbose</code> mode either by setting the property\n<code>jkube.docker.verbose</code> or by using <code>&lt;verbose&gt;true&lt;/verbose&gt;</code> in the <a href=\"#build-goal-configuration\">Build Goal configuration</a></p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"build-assembly\">5.2.6. Assembly</h4>\n<div class=\"paragraph\">\n<p>The <code>&lt;assembly&gt;</code> element within <code>&lt;build&gt;</code> element has an XML structure and defines how build artifacts and other files\ncan be added to the Docker image.</p>\n</div>\n<table id=\"config-image-build-assembly\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 22. Assembly Configuration (<a href=\"#config-image\">&lt;image&gt; </a> : <a href=\"#config-image-build\">&lt;build&gt; </a>)</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>name</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Assembly name, which is <code>maven</code> by default. This name is used for the archives and directories created during the build.\n  This directory holds the files specified by the assembly. If an <a href=\"#external-dockerfile\">external Dockerfile</a> is used then\n  this name is also the relative directory which contains the assembly files.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>targetDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Directory under which the files and artifacts contained in the assembly will be copied within the container.\n  The default value for this is <code>/&lt;assembly name&gt;</code>, so <code>/maven</code> if <strong>name</strong> is not set to a different value.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-assembly-layer\"><strong>inline</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><em>Deprecated: Use layers instead</em>\n  Inlined assembly descriptor as described in <a href=\"#build-assembly-layer\">Assembly - Inline</a> below.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#build-assembly-layer\"><strong>layers</strong></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Each of the layers that the assembly will contain as described in\n  <a href=\"#build-assembly-layer\">Assembly - Layer</a> below.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>exportTargetDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Specification whether the <code>targetDir</code> should be exported as a volume. This value is <code>true</code> by default except in the\n  case the <code>targetDir</code> is set to the container root (<code>/</code>). It is also <code>false</code> by default when a base image is used with\n  <code>from</code> since exporting makes no sense in this case and will waste disk space unnecessarily.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>excludeFinalOutputArtifact</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">By default, the project&#8217;s final artifact will be included in the assembly, set this flag to true in case the\n  artifact should be excluded from the assembly.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>mode</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Mode how the how the assembled files should be collected:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>dir</code> : Files are simply copied (default),</p>\n</li>\n<li>\n<p><code>tar</code> : Transfer via tar archive</p>\n</li>\n<li>\n<p><code>tgz</code> : Transfer via compressed tar archive</p>\n</li>\n<li>\n<p><code>zip</code> : Transfer via ZIP archive</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The archive formats have the advantage that file permission can be preserved better (since the copying is independent\nfrom the underlying files systems), but might triggers internal bugs from the Maven assembler (as it has been reported\nin <a href=\"https://github.com/fabric8io/docker-maven-plugin/issues/171\">#171</a>)</p>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>permissions</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>Permission of the files to add:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>ignore</code> to use the permission as found on files regardless on any\nassembly configuration</p>\n</li>\n<li>\n<p><code>keep</code> to respect the assembly provided permissions</p>\n</li>\n<li>\n<p><code>exec</code> for setting the executable bit on all files (required for Windows when using an assembly mode <code>dir</code>)</p>\n</li>\n<li>\n<p><code>auto</code> to let the plugin select <code>exec</code> on Windows and <code>keep</code> on others.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p><code>keep</code> is the default value.</p>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tarLongFileMode</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Sets the TarArchiver behaviour on file paths with more than 100 characters length. Valid values are: \"warn\"(default), \"fail\", \"truncate\", \"gnu\", \"posix\", \"posix_warn\" or \"omit\"</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>user</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>User and/or group under which the files should be added. The user must already exist in the base image.</p>\n</div>\n<div class=\"paragraph\">\n<p>It has the general format <code>user[:group[:run-user]]</code>. The user and group can be given either as numeric user- and group-id or as names. The group id is optional.</p>\n</div>\n<div class=\"paragraph\">\n<p>If a third part is given, then the build changes to user <code>root</code> before changing the ownerships, changes the ownerships and then change to user <code>run-user</code> which is then used for the final command to execute. This feature might be needed, if the base image already changed the user (e.g. to 'jboss') so that a <code>chown</code> from root to this user would fail.</p>\n</div>\n<div class=\"paragraph\">\n<p>For example, the image <code>jboss/wildfly</code> use a \"jboss\" user under which all commands are executed. Adding files in Docker always happens under the UID root. These files can only be changed to \"jboss\" is the <code>chown</code> command is executed as root. For the following commands to be run again as \"jboss\" (like the final <code>standalone.sh</code>), the plugin switches back to user <code>jboss</code> (this is this \"run-user\") after changing the file ownership. For this example a specification of\n<code>jboss:jboss:jboss</code> would be required.</p>\n</div></div></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>In the event you do not need to include any artifacts with the image, you may safely omit this element from the configuration.</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"build-assembly-layer\">Assembly - Inline/Layer</h5>\n<div class=\"paragraph\">\n<p>Inlined assembly description with a format very similar to\n<a href=\"https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html\">Maven Assembly Plugin</a>.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Partial configuration example of an inline/layer element</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;assembly&gt;\n  &lt;!-- ... --&gt;\n  &lt;layers&gt;\n    &lt;layer&gt;\n      &lt;id&gt;static-files&lt;/id&gt;\n      &lt;fileSets&gt;\n        &lt;fileSet&gt;\n          &lt;directory&gt;src/static&lt;/directory&gt;\n          &lt;outputDirectory&gt;static&lt;/outputDirectory&gt;\n        &lt;/fileSet&gt;\n      &lt;/fileSets&gt;\n    &lt;/layer&gt;\n  &lt;/layers&gt;\n&lt;/assembly&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The <code>&lt;layers&gt;</code> element within the <code>&lt;assembly&gt;</code> element can have one or more\n<code>&lt;layer&gt;</code> elements with an XML structure that supports the following configuration options:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 23. Assembly - Inline/Layer (<a href=\"#config-image\">&lt;image&gt; </a> : <a href=\"#config-image-build\">&lt;build&gt; </a> : <a href=\"#config-image-build-assembly\">&lt;assembly&gt; </a>)</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>id</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Unique ID for the layer.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>files</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>List of files for the layer.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each file has the following fields:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>source</code>: Absolute or relative path from the project&#8217;s directory of the file to be included in the assembly.</p>\n</li>\n<li>\n<p><code>outputDirectory</code>: Output directory relative to the root of the root directory of the assembly.</p>\n</li>\n<li>\n<p><code>destName</code>: Destination filename in the outputDirectory.</p>\n</li>\n<li>\n<p><code>fileMode</code>: Similar to a UNIX permission, sets the file mode of the file included.</p>\n</li>\n</ul>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>fileSets</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>List of filesets for the layer.</p>\n</div>\n<div class=\"paragraph\">\n<p>Each fileset has the following fields:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>directory</code>: Absolute or relative location from the project&#8217;s directory.</p>\n</li>\n<li>\n<p><code>outputDirectory</code>: Output directory relative to the root of the root directory of the assembly fileSet.</p>\n</li>\n<li>\n<p><code>includes</code>:  A set of files and directories to include.</p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If none is present, then everything is included.</p>\n</li>\n<li>\n<p>Files can be referenced by using their complete path name.</p>\n</li>\n<li>\n<p>Wildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</li>\n</ul>\n</div>\n</li>\n<li>\n<p><code>excludes</code>: A set of files and directory to exclude.</p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If none is present, then there are no exclusions.</p>\n</li>\n<li>\n<p>Wildcards are also supported, patterns will be matched using\n<a href=\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)\">\nFileSystem#getPathMatcher</a> <code>glob</code> syntax.</p>\n</li>\n</ul>\n</div>\n</li>\n<li>\n<p><code>fileMode</code>: Similar to a UNIX permission, sets the file mode of the files included.</p>\n</li>\n<li>\n<p><code>directoryMode</code>: Similar to a UNIX permission, sets the directory mode of the directories included.</p>\n</li>\n</ul>\n</div></div></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>baseDirectory</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Base directory from which to resolve the Assembly&#8217;s layer files and filesets.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"misc-env\">5.2.7. Environment and Labels</h4>\n<div class=\"paragraph\">\n<p>When creating a container one or more environment variables can be set via configuration with the <code>env</code> parameter</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;env&gt;\n  &lt;JAVA_HOME&gt;/opt/jdk8&lt;/JAVA_HOME&gt;\n  &lt;CATALINA_OPTS&gt;-Djava.security.egd=file:/dev/./urandom&lt;/CATALINA_OPTS&gt;\n&lt;/env&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If you put this configuration into profiles you can easily create various test variants with a single image (e.g. by switching the JDK or whatever).</p>\n</div>\n<div class=\"paragraph\">\n<p>It is also possible to set the environment variables from the outside of the plugin&#8217;s configuration with the parameter <code>envPropertyFile</code>. If given, this property file is used to set the environment variables where the keys and values specify the environment variable. Environment variables specified in this file override any environment variables specified in the configuration.</p>\n</div>\n<div class=\"paragraph\">\n<p>Labels can be set inline the same way as environment variables:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;labels&gt;\n   &lt;com.example.label-with-value&gt;foo&lt;/com.example.label-with-value&gt;\n   &lt;version&gt;${project.version}&lt;/version&gt;\n   &lt;artifactId&gt;${project.artifactId}&lt;/artifactId&gt;\n&lt;/labels&gt;</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"misc-startup\">5.2.8. Startup Arguments</h4>\n<div class=\"paragraph\">\n<p>Using <code>entryPoint</code> and <code>cmd</code> it is possible to specify the <a href=\"https://docs.docker.com/reference/builder/#entrypoint\">entry point</a>\nor <a href=\"https://docs.docker.com/reference/builder/#cmd\">cmd</a> for a container.</p>\n</div>\n<div class=\"paragraph\">\n<p>The difference is, that an <code>entrypoint</code> is the command that always be executed, with the <code>cmd</code> as argument. If no <code>entryPoint</code> is provided, it defaults to <code>/bin/sh -c</code> so any <code>cmd</code> given is executed with a shell. The arguments given to <code>docker run</code> are always given as arguments to the\n<code>entrypoint</code>, overriding any given <code>cmd</code> option. On the other hand if no extra arguments are given to <code>docker run</code> the default <code>cmd</code> is used as argument to <code>entrypoint</code>.</p>\n</div>\n<div class=\"sidebarblock\">\n<div class=\"content\">\n<div class=\"paragraph\">\n<p>See this <a href=\"http://stackoverflow.com/questions/21553353/what-is-the-difference-between-cmd-and-entrypoint-in-a-dockerfile\">stackoverflow question</a> for a detailed explanation.</p>\n</div>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>An entry point or command can be specified in two alternative formats:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 24. Entrypoint and Command Configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Mode</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>shell</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Shell form in which the whole line is given to <code>shell -c</code> for interpretation.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>exec</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">List of arguments (with inner <code>&lt;args&gt;</code>) arguments which will be given to the <code>exec</code> call directly without any shell interpretation.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>Either shell or params should be specified.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;entryPoint&gt;\n   &lt;!-- shell form  --&gt;\n   &lt;shell&gt;java -jar $HOME/server.jar&lt;/shell&gt;\n&lt;/entryPoint&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>or</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;entryPoint&gt;\n   &lt;!-- exec form  --&gt;\n   &lt;exec&gt;\n     &lt;arg&gt;java&lt;/arg&gt;\n     &lt;arg&gt;-jar&lt;/arg&gt;\n     &lt;arg&gt;/opt/demo/server.jar&lt;/arg&gt;\n   &lt;/exec&gt;\n&lt;/entryPoint&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This can be formulated also more dense with:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;!-- shell form  --&gt;\n&lt;entryPoint&gt;java -jar $HOME/server.jar&lt;/entryPoint&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>or</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;entryPoint&gt;\n  &lt;!-- exec form  --&gt;\n  &lt;arg&gt;java&lt;/arg&gt;\n  &lt;arg&gt;-jar&lt;/arg&gt;\n  &lt;arg&gt;/opt/demo/server.jar&lt;/arg&gt;\n&lt;/entryPoint&gt;</code></pre>\n</div>\n</div>\n<div class=\"dlist\">\n<dl>\n<dt class=\"hdlist1\">INFO</dt>\n<dd>\n<p>Startup arguments are not used in S2I builds</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"build-buildargs\">5.2.9. Build Args</h4>\n<div id=\"property-buildargs\" class=\"paragraph\">\n<p>As described in section <a href=\"#build-configuration\">Configuration</a> for external Dockerfiles <a href=\"https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg\">Docker build arg</a> can be used. In addition to the\nconfiguration within the plugin configuration you can also use properties to specify them:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Set a system property when running Maven, eg.: <code>-Ddocker.buildArg.http_proxy=http://proxy:8001</code>. This is especially\nuseful when using predefined Docker arguments for setting proxies transparently.</p>\n</li>\n<li>\n<p>Set a project property within the <code>pom.xml</code>, eg.:</p>\n</li>\n</ul>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;docker.buildArg.myBuildArg&gt;myValue&lt;/docker.buildArg.myBuildArg&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Please note that the system property setting will always override the project property. Also note that for all\nproperties which are not Docker <a href=\"https://docs.docker.com/engine/reference/builder/#arg\">predefined</a> properties, the\nexternal Dockerfile must contain an <code>ARGS</code> instruction.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"build-healthcheck\">5.2.10. Healthcheck</h4>\n<div class=\"paragraph\">\n<p>Healthchecks has been introduced since Docker 1.12 and are a way to tell Docker how to test a container to check that it&#8217;s still working. With a health check you specify a command which is periodically executed and checked for its return value. If the healtcheck return with an exit 0 the container is considered to be healthy, if it returns with 1 then the container is not working correctly.</p>\n</div>\n<div class=\"paragraph\">\n<p>The healtcheck configuration can have the following options</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 25. Healthcheck Configuration</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>cmd</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Command to execute, which can be given in an shell or exec format as described in <a href=\"#misc-startup\">Startup Arguments</a>.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>interval</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Interval for how often to run the healthcheck. The time is specified in seconds, but a time unit can be appended to change this.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>mode</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Mode of the healthcheck. This can be <code>cmd</code> which is the default and specifies that the health check should be executed. Or <code>none</code> to disable a health check from the base image. Only use this option with <code>none</code> for disabling some healthcheck from the base image.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>retries</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How many retries should be performed before the container is to be considered unhealthy.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>startPeriod</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Initialization time for containers that need time to bootstrap. Probe failure during that period will not be counted towards the maximum number of retries. However, if a health check succeeds during the start period, the container is considered started and all consecutive failures will be counted towards the maximum number of retries. Given in seconds, but another time unit can be appended.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>timeout</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Timeout after which healthckeck should be stopped and considered to have failed. Given in seconds, but another time unit can be appended.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>The following example queries an URL every 10s as an healthcheck:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;healthCheck&gt;\n  &lt;!-- Check every 5 minutes --&gt;\n  &lt;interval&gt;5m&lt;/interval&gt;\n  &lt;!-- Fail if no response after 3 seconds --&gt;\n  &lt;timeout&gt;3s&lt;/timeout&gt;\n  &lt;!-- Allow 30 minutes for the container to start before being flagged as unhealthy --&gt;\n  &lt;startPeriod&gt;30m&lt;/startPeriod&gt;\n  &lt;!-- Fail 3 times until the container is considerd unhealthy --&gt;\n  &lt;retries&gt;3&lt;/retries&gt;\n  &lt;!-- Command to execute in shell form --&gt;\n  &lt;cmd&gt;curl -f http://localhost/ || exit 1&lt;/cmd&gt;\n&lt;/healthCheck&gt;</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"jkube:push\">5.3. <strong>k8s:push</strong></h3>\n<div class=\"admonitionblock warning\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-warning\" title=\"Warning\"></i>\n</td>\n<td class=\"content\">\nSection needs review and rearrangements\n</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>This goal uploads images to the registry which have a <code>&lt;build&gt;</code> configuration section. The images to push can be restricted with\nthe global option <code>filter</code> (see <a href=\"#build-goal-configuration\">Build Goal Configuration</a> for details). The registry to push is by\ndefault <code>docker.io</code> but can be specified as part of the images&#8217;s <code>name</code> the Docker way.\nE.g. <code>docker.test.org:5000/data:1.5</code> will push the image <code>data</code> with tag <code>1.5</code> to the registry <code>docker.test.org</code> at port\n<code>5000</code>. Registry credentials (i.e. username and password) can be specified in multiple ways as described in section <a href=\"#authentication\">Authentication</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>By default a progress meter is printed out on the console, which is omitted when using Maven in batch mode (option <code>-B</code>).\nA very simplified progress meter is provided when using no color output (i.e. with <code>-Djkube.useColor=false</code>).</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 26. Push options</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipPush</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code> the plugin won&#8217;t push any images that have been built.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.push</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipTag</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code> this plugin won&#8217;t push any tags</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.tag</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>pushRegistry</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The registry to use when pushing the image. See <a href=\"#registry\">Registry Handling</a> for\nmore details.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.push.registry</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>retries</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How often should a push be retried before giving up. This useful for flaky registries which tend to return 500 error codes from time to time. The default is 0 which means no retry at all.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.docker.push.retries</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect2\">\n<h3 id=\"jkube:apply\">5.4. <strong>k8s:apply</strong></h3>\n<div class=\"paragraph\">\n<p>This goal applies the resources created with <a href=\"#jkube:resource\"><strong>k8s:resource</strong></a> to a connected Kubernetes cluster. It&#8217;s  similar to <a href=\"#jkube:deploy\"><strong>k8s:deploy</strong></a> but does not the full deployment cycle of creating the resource, creating the application image and sending the resource descriptors to the clusters. This goal can be easily bound to <code>&lt;executions&gt;</code> within the plugin&#8217;s configuration and binds by default to the <code>install</code> lifecycle phase.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:apply</code></pre>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"Supported-Properties-Apply\">5.4.1. Supported Properties For Apply goal</h4>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 27. Other options available with apply goal</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>recreate</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Should we update resources by deleting them first and then creating them again.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.recreate</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>kubernetesManifest</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The generated kubernetes YAML file.</p>\n<p class=\"tableblock\">  Defaults to <code>${basedir}/target/classes/META-INF/jkube/kubernetes.yml</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.kubernetesManifest</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>create</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Should we create new resources.</p>\n<p class=\"tableblock\">  Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.create</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>rolling</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Should we use rolling updates to apply changes.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.rolling</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>failOnNoKubernetesJson</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Should we fail if there is no Kubernetes JSON.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.failOnNoKubernetesJson</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>servicesOnly</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">In services only mode we only process services so that those can be recursively created/updated first before\n  creating/updating any pods and replication controllers.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.servicesOnly</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ignoreServices</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Do we want to ignore services. This is particularly useful when in recreate mode to let you easily recreate all the\n  ReplicationControllers and Pods but leave any service definitions alone to avoid changing the portalIP addresses and\n  breaking existing pods using the service.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.ignoreServices</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>processTemplatesLocally</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Process templates locally in Java so that we can apply OpenShift templates on any Kubernetes environment.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.processTemplatesLocally</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>deletePods</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Should we delete all the pods if we update a Replication Controller.</p>\n<p class=\"tableblock\">  Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.deletePods</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ignoreRunningOAuthClients</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Do we want to ignore OAuthClients which are already running?. OAuthClients are shared across namespaces so we should\n  not try to update or create/delete global oauth clients.</p>\n<p class=\"tableblock\">  Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.ignoreRunningOAuthClients</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>jsonLogDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The folder we should store any temporary json files or results.</p>\n<p class=\"tableblock\">  Defaults to <code>${basedir}/target/jkube/applyJson</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.deploy.jsonLogDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>waitSeconds</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">How many seconds to wait for a URL to be generated for a service.</p>\n<p class=\"tableblock\">  Defaults to <code>5</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.serviceUrl.waitSeconds</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>resourceDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Folder where to find project specific files.</p>\n<p class=\"tableblock\">  Defaults to <code>${basedir}/src/main/jkube</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.resourceDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>environment</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Environment name where resources are placed. For example, if you set this property to dev and resourceDir is the\n  default one, jkube will look at <code>src/main/jkube/dev</code>.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.environment</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>skipApply</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Skip applying the resources.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.skip.apply</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"jkube:helm\">5.5. <strong>k8s:helm</strong></h3>\n<div class=\"paragraph\">\n<p>This goal is for creating\n<a href=\"https://helm.sh/docs/topics/charts\">Helm charts</a>\nfor your Maven project so that you can install, update or delete your app in Kubernetes\nusing <a href=\"https://github.com/helm/helm\">Helm</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>For creating a Helm chart you simply call <code>k8s:helm</code> goal on the command line:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:resource k8s:helm</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The <code>k8s:resource</code> goal is required to create the resource descriptors which are included in the Helm chart.\nIf you have already built the resource then you can omit this goal.</p>\n</div>\n<div class=\"paragraph\">\n<p>The configuration is defined in a <code>&lt;helm&gt;</code> section within the plugin&#8217;s configuration:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example Helm configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;configuration&gt;\n    &lt;helm&gt;\n      &lt;chart&gt;Jenkins&lt;/chart&gt;\n      &lt;keywords&gt;ci,cd,server&lt;/keywords&gt;\n      &lt;dependencies&gt;\n        &lt;dependency&gt;\n          &lt;name&gt;ingress-nginx&lt;/name&gt;\n          &lt;version&gt;1.26.0&lt;/version&gt;\n          &lt;repository&gt;https://kubernetes.github.io/ingress-nginx&lt;/repository&gt;\n        &lt;/dependency&gt;\n      &lt;/dependencies&gt;\n    &lt;/helm&gt;\n  &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This configuration section knows the following sub-elements in order to configure your Helm chart.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 28. Helm configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>chart</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart name, which is <code>${project.artifactId}</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.chart</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>version</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart SemVer version, which is <code>${project.version}</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.version</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>description</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart single-sentence description, which is <code>${project.description}</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.description</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>home</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart URL for this project&#8217;s home page, which is <code>${project.url}</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.home</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>sources</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart list of URLs to source code for this project, defaults to the list of <code>${project.scm.url}</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>maintainers</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart list of maintainers (name+email), defaults to the list of\n  `${project.developers.name}:${project.developers.name}`if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>icon</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Chart URL to an SVG or PNG image to be used as an icon, default is extracted from the kubernetes manifest\n  (<code>kubernetes.yml</code>) <code>jkube.io/iconUrl</code> annotation if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.icon</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>keywords</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Comma separated list of keywords to add to the chart.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>engine</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The template engine to use.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>additionalFiles</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The list of additional files to be included in the Chart archive. Any file named <code>README</code> or <code>LICENSE</code> will <strong>always</strong>\n  be included by default.</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>type</strong> / <strong>types</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Platform for which to generate the chart. By default this is <code>kubernetes</code>, but can be also <code>openshift</code> for using\n  OpenShift specific resources in the chart. You can also add both values as a comma separated list.</p>\n<p class=\"tableblock\">  <em>Please note that there is no OpenShift support yet for charts, so this is experimental.</em></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.type</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>sourceDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to find the resource descriptors generated with <code>k8s:resource</code>.\n  By default this is <code>${basedir}/target/classes/META-INF/jkube., which is also the output directory used by `k8s:resource</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.sourceDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>outputDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to create the Helm chart, which is <code>${basedir}/target/jkube/helm</code> by default for Kubernetes\n  and <code>${basedir}/target/jkube/helmshift</code> for OpenShift.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.outputDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tarballOutputDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to create the the Helm chart archive, which is <code>${basedir}/target</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.tarballOutputDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>chartExtension</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Helm chart file extension (<code>tgz</code>, <code>tar.bz</code>, <code>tar.bzip2</code>, <code>tar.bz2</code>), default value is <code>tar.gz</code> if not provided.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.chartExtension</code></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>In a next step you can install this via the <a href=\"https://github.com/helm/helm/releases\">helm command line tool</a> as follows:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">helm install nameForChartInRepository target/jkube/helm/${chartName}/kubernetes</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>or</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>helm install target/jkube/helm/${chartName}/kubernetes --generate-name</pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>To add the <code>helm</code> goal to your project so that it is automatically executed just add the <code>helm</code> goal to the <code>executions</code>\nsection of the <code>kubernetes-maven-plugin</code> section of your <code>pom.xml</code>.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Add helm goal</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n\n  &lt;!-- ... --&gt;\n\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;goals&gt;\n        &lt;goal&gt;resource&lt;/goal&gt;\n        &lt;goal&gt;helm&lt;/goal&gt;\n        &lt;goal&gt;build&lt;/goal&gt;\n        &lt;goal&gt;deploy&lt;/goal&gt;\n      &lt;/goals&gt;\n    &lt;/execution&gt;\n  &lt;/executions&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>In addition, this goal will also create a tar-archive below <code>${basedir}/target</code> which contains the chart with its template.\nThis tar is added as an artifact with classifier <code>helm</code> to the build (<code>helmshift</code> for the OpenShift mode).</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"helm-multi-module\">5.5.1. Multi-module projects</h4>\n<div class=\"paragraph\">\n<p>In multi-module Maven projects, some configuration default values differ from what you may expect.</p>\n</div>\n<div class=\"paragraph\">\n<p>Given a project with a parent module and at least a child module, if you run the helm goal within the child\nmodule, values for <code>home</code> and <code>sources</code> will get the submodule&#8217;s artifactId appended.</p>\n</div>\n<div class=\"paragraph\">\n<p>This behavior is normal, since the helm goal is executed in the scope of the submodule. The Maven\nvariables from which JKube extracts these defaults (<code>${project.url}</code> and <code>${project.scm.url}</code>)\nalready contain the appended submodule&#8217;s artifactId.</p>\n</div>\n<div class=\"paragraph\">\n<p>In order to prevent this, there are several alternatives:</p>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Manual configuration</div>\n<p>Provide the configuration manually for these values:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;configuration&gt;\n    &lt;helm&gt;\n      &lt;home&gt;https://valid-home-with-no-appended-values.example.com&lt;/home&gt;\n      &lt;sources&gt;\n          &lt;source&gt;https://github.com/valid-repo/with-no-appended-values&lt;/source&gt;\n      &lt;/sources&gt;\n    &lt;/helm&gt;\n  &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Manual configuration using properties in child module</div>\n<p>Following the previous approach, if you don&#8217;t want to hardcode the values, or if you\nalready defined them in the parent module you can proceed with the following configuration\nin the <strong>child</strong> module:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;properties&gt;\n    &lt;!-- ... --&gt;\n    &lt;helm.home&gt;${project.parent.url}&lt;/helm.home&gt;\n    &lt;helm.source&gt;${project.parent.scm.url}&lt;/helm.source&gt;\n&lt;/properties&gt;\n&lt;!-- ... --&gt;\n&lt;plugin&gt;\n  &lt;configuration&gt;\n    &lt;helm&gt;\n      &lt;home&gt;${helm.home}&lt;/home&gt;\n      &lt;sources&gt;\n          &lt;source&gt;${helm.source}&lt;/source&gt;\n      &lt;/sources&gt;\n    &lt;/helm&gt;\n  &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Configure inheritance in parent project for the affected elements</div>\n<p>Configure inheritance of the <code>project</code> and  <code>scm</code> elements in the <strong>parent</strong> module:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\"\n         child.project.url.inherit.append.path=\"false\"\n         &gt;\n&lt;!-- ... --&gt;\n    &lt;url&gt;https://jkube.example.com&lt;/url&gt;\n    &lt;scm child.scm.url.inherit.append.path=\"false\"&gt;\n        &lt;url&gt;https://github.com/eclipse/jkube&lt;/url&gt;\n    &lt;/scm&gt;\n&lt;!-- ... --&gt;\n&lt;/project&gt;</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"jkube:helm-push\">5.6. <strong>k8s:helm-push</strong></h3>\n<div class=\"paragraph\">\n<p>This goal is for pushing\n<a href=\"https://helm.sh/docs/topics/charts\">Helm charts</a>\nin a remote repository [Artifactory, Chartmuseum, Nexus].</p>\n</div>\n<div class=\"paragraph\">\n<p>To publish a Helm chart you simply call <code>k8s:helm-push</code> goal on the command line:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:resource k8s:helm k8s:helm-push</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The <code>k8s:resource</code> and the <code>k8s:helm</code> goals are required to create the resource descriptors which are included in the Helm chart and the Helm chart itself.\nIf you have already built the resource and create the chart, then you can omit these goals.</p>\n</div>\n<div class=\"paragraph\">\n<p>The configuration is defined in a <code>&lt;helm&gt;</code> section within the plugin&#8217;s configuration:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example Helm configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;configuration&gt;\n    &lt;helm&gt;\n      &lt;chart&gt;Jenkins&lt;/chart&gt;\n      &lt;keywords&gt;ci,cd,server&lt;/keywords&gt;\n      &lt;stableRepository&gt;\n        &lt;name&gt;stable-repo-id&lt;/name&gt;\n        &lt;url&gt;https://stable-repo-url&lt;/url&gt;\n        &lt;type&gt;ARTIFACTORY&lt;/type&gt;\n      &lt;/stableRepository&gt;\n      &lt;snapshotRepository&gt;\n        &lt;name&gt;snapshot-repo-id&lt;/name&gt;\n        &lt;url&gt;https://snapshot-repo-url&lt;/url&gt;\n        &lt;type&gt;ARTIFACTORY&lt;/type&gt;\n      &lt;/snapshotRepository&gt;\n    &lt;/helm&gt;\n  &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This configuration section knows the following sub-elements in order to configure your Helm chart.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 29. Helm configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>stableRepository</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The configuration of the stable helm repository (see Helm stable repository configuration).</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>snapshotRepository</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The configuration of the snapshot helm repository (see Helm repository configuration).</p></td>\n<td class=\"tableblock halign-left valign-top\"></td>\n</tr>\n</tbody>\n</table>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 30. Helm stable repository configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>name</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The name (id) of the server configuration. It can select the maven server by this ID.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.stableRepository.name</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>url</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The url of the server.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.stableRepository.url</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>username</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The username of the repository. Optional. If a maven server ID is specified, the username is taken from there.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.stableRepository.username</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>password</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The password of the repository. Optional. If a maven server ID is specified, the password is taken from there.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.stableRepository.password</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>type</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The type of the repository. One of ARTIFACTORY, NEXUS, CHARTMUSEUM</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.stableRepository.type</code></p></td>\n</tr>\n</tbody>\n</table>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 31. Helm snapshot repository configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 71.4285%;\">\n<col style=\"width: 14.2858%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>name</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The name (id) of the server configuration. It can select the maven server by this ID.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.snapshotRepository.name</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>url</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The url of the server.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.snapshotRepository.url</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>username</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The username of the repository. Optional. If a maven server ID is specified, the username is taken from there.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.snapshotRepository.username</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>password</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The password of the repository. Optional. If a maven server ID is specified, the password is taken from there.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.snapshotRepository.password</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>type</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The type of the repository. One of ARTIFACTORY, NEXUS, CHARTMUSEUM</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.helm.snapshotRepository.type</code></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>To add the <code>helm-push</code> goal to your project so that it is automatically executed just add the <code>helm-push</code> goal to the <code>executions</code>\nsection of the <code>kubernetes-maven-plugin</code> section of your <code>pom.xml</code>.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Add helm goal</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n\n  &lt;!-- ... --&gt;\n\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;goals&gt;\n        &lt;goal&gt;resource&lt;/goal&gt;\n        &lt;goal&gt;helm&lt;/goal&gt;\n        &lt;goal&gt;build&lt;/goal&gt;\n        &lt;goal&gt;deploy&lt;/goal&gt;\n        &lt;goal&gt;helm-push&lt;/goal&gt;\n      &lt;/goals&gt;\n    &lt;/execution&gt;\n  &lt;/executions&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"goals-overview-develop\">6. Development Goals</h2>\n<div class=\"sectionbody\">\n<div class=\"sect2\">\n<h3 id=\"jkube:deploy\">6.1. <strong>k8s:deploy</strong></h3>\n<div class=\"paragraph\">\n<p>This is the main goal for building your docker image, generating the kubernetes resources and deploying them into the cluster (insofar your pom.xml is set up correct; keep reading :)).</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:deploy</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This goal is designed to run <a href=\"#jkube:build\"><strong>k8s:build</strong></a> and <a href=\"#jkube:resource\"><strong>k8s:resource</strong></a> before the deploy <strong>if</strong> you have the goals bound in your pom.xml:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n  &lt;version&gt;1.5.0&lt;/version&gt;\n\n  &lt;!-- Connect k8s:resource, k8s:build and k8s:helm to lifecycle phases --&gt;\n  &lt;executions&gt;\n    &lt;execution&gt;\n       &lt;id&gt;jkube&lt;/id&gt;\n       &lt;goals&gt;\n         &lt;goal&gt;resource&lt;/goal&gt;\n         &lt;goal&gt;build&lt;/goal&gt;\n         &lt;goal&gt;helm&lt;/goal&gt;\n       &lt;/goals&gt;\n    &lt;/execution&gt;\n  &lt;/executions&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Effectively this builds your project then invokes these goals:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"#jkube:build\"><strong>k8s:build</strong></a></p>\n</li>\n<li>\n<p><a href=\"#jkube:apply\"><strong>k8s:apply</strong></a></p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>By default the behaviour of resource goal is it generates <code>route.yml</code> for a service if you have not done any configuration changes. Sometimes there may be case when you want to generate route.yml but do not want to create route resource on OpenShift Cluster. This can be achieved by the following configuration.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example for not generating route resource on your cluster</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n    &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n    &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n    &lt;version&gt;1.5.0&lt;/version&gt;\n    &lt;configuration&gt;\n        &lt;enricher&gt;\n            &lt;excludes&gt;\n                &lt;exclude&gt;jkube-expose&lt;/exclude&gt;\n            &lt;/excludes&gt;\n        &lt;/enricher&gt;\n    &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"jkube:undeploy\">6.2. <strong>k8s:undeploy</strong></h3>\n<div class=\"paragraph\">\n<p>This goal is for deleting the kubernetes resources that you deployed via the  <a href=\"#jkube:apply\"><strong>k8s:apply</strong></a> or <a href=\"#jkube:deploy\"><strong>k8s:deploy</strong></a> goals</p>\n</div>\n<div class=\"paragraph\">\n<p>It iterates through all the resources generated by the <a href=\"#jkube:resource\"><strong>k8s:resource</strong></a> goal and deletes them from your current kubernetes cluster.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:undeploy</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"jkube:log\">6.3. <strong>k8s:log</strong></h3>\n<div class=\"paragraph\">\n<p>This goal tails the log of the app that you deployed via the <a href=\"#jkube:deploy\"><strong>k8s:deploy</strong></a> goal</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:log</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>You can then terminate the output by hitting <code>Ctrl+C</code></p>\n</div>\n<div class=\"paragraph\">\n<p>If you wish to get the log of the app and then terminate immediately then try:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:log -Djkube.log.follow=false</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This lets you pipe the output into grep or some other tool</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:log -Djkube.log.follow=false | grep Exception</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If your app is running in multiple pods you can configure the pod name to log via the <code>jkube.log.pod</code> property, otherwise it defaults to the latest pod:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:log -Djkube.log.pod=foo</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>If your pod has multiple containers you can configure the container name to log via the <code>jkube.log.container</code> property, otherwise it defaults to the first container:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:log -Djkube.log.container=foo</code></pre>\n</div>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example XML configuration for log goal</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;configuration&gt;\n    &lt;logFollow&gt;true&lt;/logFollow&gt;\n    &lt;logContainer&gt;container&lt;/logContainer&gt;\n    &lt;logPod&gt;pod&lt;/logPod&gt;\n  &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"Supported-Properties-Log\">6.3.1. Supported Properties for Log goal</h4>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 32. Options available with log goal</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logFollow</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Get follow logs for your application inside Kubernetes.</p>\n<p class=\"tableblock\">  Defaults to <code>true</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.log.follow</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logContainer</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Get logs of some specific container inside your application Deployment.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.log.container</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>logPod</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Get logs of some specific pod inside your application Deployment.</p>\n<p class=\"tableblock\">  Defaults to <code>null</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.log.pod</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"jkube:debug\">6.4. <strong>k8s:debug</strong></h3>\n<div class=\"paragraph\">\n<p>This goal enables debugging in your Java app and then port forwards from localhost to the latest running pod of your app so that you can easily debug your app from your Java IDE.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:debug</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then follow the on screen instructions.</p>\n</div>\n<div class=\"paragraph\">\n<p>The default debug port is <code>5005</code>. If you wish to change the local port to use for debugging then pass in the <code>jkube.debug.port</code> parameter:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:debug -Djkube.debug.port=8000</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then in your IDE you start a Remote debug execution using this remote port using localhost and you should be able to set breakpoints and step through your code.</p>\n</div>\n<div class=\"paragraph\">\n<p>This lets you debug your apps while they are running inside a Kubernetes cluster - for example if you wish to debug a REST endpoint while another pod is invoking it.</p>\n</div>\n<div class=\"paragraph\">\n<p>Debug is enabled via the <code>JAVA_ENABLE_DEBUG</code> environment variable being set to <code>true</code>. This environment variable is used for all the standard Java docker images used by Spring Boot, flat classpath and executable JAR projects and Wildfly Swarm. If you use your own custom docker base image you may wish to also respect this environment variable too to enable debugging.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"_speeding_up_debugging\">6.4.1. Speeding up debugging</h4>\n<div class=\"paragraph\">\n<p>By default the <code>k8s:debug</code> goal has to edit your Deployment to enable debugging then wait for a pod to start. It might be in development you frequently want to debug things and want to speed things up a bit.</p>\n</div>\n<div class=\"paragraph\">\n<p>If so you can enable debug mode for each build via the <code>jkube.debug.enabled</code> property.</p>\n</div>\n<div class=\"paragraph\">\n<p>e.g. you can pass this property on the command line:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:deploy -Djkube.debug.enabled=true</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Or you can add something like this to your <code>~/.m2/settings.xml</code> file so that you enable debug mode for all maven builds on your laptop by using a profile :</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;?xml version=\"1.0\"?&gt;\n&lt;settings&gt;\n  &lt;profiles&gt;\n    &lt;profile&gt;\n      &lt;id&gt;enable-debug&lt;/id&gt;\n      &lt;activation&gt;\n        &lt;activeByDefault&gt;true&lt;/activeByDefault&gt;\n      &lt;/activation&gt;\n      &lt;properties&gt;\n        &lt;jkube.debug.enabled&gt;true&lt;/jkube.debug.enabled&gt;\n      &lt;/properties&gt;\n    &lt;/profile&gt;\n  &lt;/profiles&gt;\n&lt;/settings&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then whenever you type the <code>k8s:debug</code> goal there is no need for the maven goal to edit the <code>Deployment</code> and wait for a pod to restart; we can immediately start debugging when you type:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:debug</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"_debugging_with_suspension\">6.4.2. Debugging with suspension</h4>\n<div class=\"paragraph\">\n<p>The <code>k8s:debug</code> goal allows to attach a remote debugger to a running container, but the application is free to execute when the debugger is not attached.\nIn some cases, you may want to have complete control on the execution, e.g. to investigate the application behavior at startup. This can be done using the <code>jkube.debug.suspend</code> flag:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:debug -Djkube.debug.suspend</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The suspend flag will set the <code>JAVA_DEBUG_SUSPEND</code> environment variable to <code>true</code> and <code>JAVA_DEBUG_SESSION</code> to a random number in your deployment.\nWhen the <code>JAVA_DEBUG_SUSPEND</code> environment variable is set, standard docker images will use <code>suspend=y</code> in the JVM startup options for debugging.</p>\n</div>\n<div class=\"paragraph\">\n<p>The <code>JAVA_DEBUG_SESSION</code> environment variable is always set to a random number (each time you run the debug goal with the suspend flag) in order to tell Kubernetes to restart the pod.\nThe remote application will start only after a remote debugger is attached. You can use the remote debugging feature of your IDE to connect (on <code>localhost</code>, port <code>5005</code> by default).</p>\n</div>\n<div class=\"admonitionblock warning\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-warning\" title=\"Warning\"></i>\n</td>\n<td class=\"content\">\nThe <code>jkube.debug.suspend</code> flag will disable readiness probes in the Kubernetes deployment in order to start port-forwarding during the early phases of application startup\n</td>\n</tr>\n</table>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"Supported-Properties-Debug\">6.4.3. Supported Properties For Debug Goal</h4>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 33. Options available with debug goal</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>debugPort</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Default port available for debugging your application inside Kubernetes.</p>\n<p class=\"tableblock\">  Defaults to <code>5005</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.debug.port</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>debugSuspend</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Disables readiness probes in Kubernetes Deployment in order to start port forwarding during early phases of\n  application startup.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.debug.suspend</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"jkube:watch\">6.5. <strong>k8s:watch</strong></h3>\n<div class=\"paragraph\">\n<p>This goal is used to monitor the project workspace for changes and automatically trigger a redeploy of the application\nrunning on Kubernetes. There are two kinds of watchers present at the moment:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Docker Image Watcher(watches docker images)</p>\n</li>\n<li>\n<p>Spring Boot Watcher(based on Spring Boot Devtools)</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Before entering the watch mode, this goal must generate the docker image and the Kubernetes resources\n(optionally including some development libraries/configuration),\nand deploy the app on Kubernetes. Lifecycle bindings should be configured as follows to allow\nthe generation of such resources.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Lifecycle bindings for k8s:watch</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n\n  &lt;!-- ... --&gt;\n\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;goals&gt;\n        &lt;goal&gt;resource&lt;/goal&gt;\n        &lt;goal&gt;build&lt;/goal&gt;\n      &lt;/goals&gt;\n    &lt;/execution&gt;\n  &lt;/executions&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>For any application having <code>resource</code> and <code>build</code> goals bound to the lifecycle, the following\ncommand can be used to run the watch task.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">mvn k8s:watch</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This plugin supports different watcher providers, enabled automatically if the project satisfies certain conditions.</p>\n</div>\n<div class=\"paragraph\">\n<p>Watcher providers can also be configured manually. The <a href=\"#generator-example\">Generator example</a> is a good blueprint, simply replace <code>&lt;generator&gt;</code> with <code>&lt;watcher&gt;</code>. The configuration is structurally identical.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"watcher-spring-boot\">6.5.1. Spring Boot</h4>\n<div class=\"paragraph\">\n<p>This watcher is enabled by default for all Spring Boot projects. It performs the following actions:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>deploys your application with Spring Boot DevTools enabled</p>\n</li>\n<li>\n<p>tails the log of the latest running pod for your application</p>\n</li>\n<li>\n<p>watches the local development build of your Spring Boot based application and then triggers a reload of the application when there are changes</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>You need to make sure that <code>devtools</code> is included in the repacked archive, as shown in the following listing:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;\n  &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;\n  &lt;configuration&gt;\n    &lt;excludeDevtools&gt;false&lt;/excludeDevtools&gt;\n  &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Then you need to set a <code>spring.devtools.remote.secret</code> in application.properties, as shown in the following example:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>spring.devtools.remote.secret=mysecret</pre>\n</div>\n</div>\n<div class=\"admonitionblock warning\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-warning\" title=\"Warning\"></i>\n</td>\n<td class=\"content\">\nSpring devtools automatically ignores projects named <code>spring-boot</code>, <code>spring-boot-devtools</code>,\n         <code>spring-boot-autoconfigure</code>, <code>spring-boot-actuator</code>, <code>and spring-boot-starter</code>\n</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>You can try it on any spring boot application via:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn k8s:watch</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>Once the goal starts up the spring boot RemoteSpringApplication it will watch for local development changes.</p>\n</div>\n<div class=\"paragraph\">\n<p>e.g. if you edit the java code of your app and then build it via something like this:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn package</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>You should see your app reload on the fly in the shell running the <a href=\"#jkube:watch\"><strong>k8s:watch</strong></a> goal!</p>\n</div>\n<div class=\"paragraph\">\n<p>There is also support for LiveReload as well.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"watcher-docker-image\">6.5.2. Docker Image</h4>\n<div class=\"paragraph\">\n<p>This is a generic watcher that can be used in Kubernetes mode only. Once activated, it listens for changes in the project workspace\n in order to trigger a redeploy of the application. This enables rebuilding of images and restarting of containers in case of updates.</p>\n</div>\n<div class=\"paragraph\">\n<p>There are five watch modes, which can be specified in multiple ways:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>build</code>: Automatically rebuild one or more Docker images when one of the files selected by an assembly changes. This works for all files included in assembly.</p>\n</li>\n<li>\n<p><code>run</code>: Automatically restart your application when their associated images change.</p>\n</li>\n<li>\n<p><code>copy</code>:  Copy changed files into the running container. This is the fast way to update a container, however the target container must support hot deploy, too so that it makes sense. Most application servers like Tomcat supports this.</p>\n</li>\n<li>\n<p><code>both</code>: Enables both <code>build</code> and <code>run</code>. <strong>This is the default</strong>.</p>\n</li>\n<li>\n<p><code>none</code>:  Image is completely ignored for watching.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The watcher can be activated e.g. by running this command in another shell:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn package</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The watcher will detect that the binary artifact has changed and will first rebuild the docker image,\nthen start a redeploy of the Kubernetes pod.</p>\n</div>\n<div class=\"paragraph\">\n<p>It uses the watch feature of the <a href=\"https://dmp.fabric8.io/#docker:watch\">docker-maven-plugin</a> under the hood.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"Supported-Properties-Watch\">6.5.3. Supported Properties for Watch goal</h4>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 34. Options available with watch goal</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>kubernetesManifest</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The generated kubernetes YAML file.</p>\n<p class=\"tableblock\">  Defaults to <code>${basedir}/target/classes/META-INF/jkube/kubernetes.yml</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.kubernetesManifest</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>watchMode</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><div class=\"content\"><div class=\"paragraph\">\n<p>How to watch for image changes.</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>copy</code>: Copy watched artifacts into container</p>\n</li>\n<li>\n<p><code>build</code>: Build only images</p>\n</li>\n<li>\n<p><code>run</code>: Run images</p>\n</li>\n<li>\n<p><code>both</code>: Build and run images</p>\n</li>\n<li>\n<p><code>none</code>: Neither build nor run</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Defaults to <code>both</code>.</p>\n</div></div></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.watch.mode</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>watchInterval</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Interval in milliseconds (how often to check for changes).</p>\n<p class=\"tableblock\">  Defaults to <code>5000</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.watch.interval</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>keepRunning</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to true all containers will be kept running after k8s:watch has been stopped.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.watch.keepRunning</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>watchPostGoal</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A maven goal which should be called if a rebuild or a restart has been performed.</p>\n<p class=\"tableblock\">  This goal must have the format <code>&lt;pluginGroupId&gt;:&lt;pluginArtifactId&gt;:&lt;goal&gt;</code> and the plugin must be\n  configured in the pom.xml.</p>\n<p class=\"tableblock\">  For example a post-goal <code>com.example:group:delete-pods</code> will trigger the <code>delete-pods</code>\n  goal of this hypothetic example.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.watch.postGoal</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>watchPostExec</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A command which is executed within the container after files are copied into this container\n  when watchMode is copy. Note that this container must be running.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.watch.postExec</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>keepContainer</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If this is set to <code>false</code> (and <code>keepRunning</code> is disabled) then all containers will be removed after\n  they have been stopped.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.watch.keepContainer</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>removeVolumes</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code> remove any volumes associated with the container as well.</p>\n<p class=\"tableblock\">  This option will be ignored if either <code>keepContainer</code> or <code>keepRunning</code> is <code>true</code>.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.watch.removeVolumes</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>watchShowLogs</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set to <code>true</code>, logs will be shown for watched container.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.watch.showLogs</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>watchFollow</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If <code>watchShowLogs</code> is set to <code>false</code>, and there is a run image configuration, logs are followed\n  if set to <code>true</code>.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.watch.follow</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"generators\">7. Generators</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>The usual way to define Docker images is with the plugin configuration as explained in <a href=\"#jkube:build\"><strong>k8s:build</strong></a>. This can either be done completely within the <code>pom.xml</code> or by referring to an external Dockerfile. Since kubernetes-maven-plugin includes <a href=\"https://github.com/jkubeio/docker-maven-plugin\">docker-maven-plugin</a> the way by which images are built is identical.</p>\n</div>\n<div class=\"paragraph\">\n<p>However, this plugin provides an additional route for defining image configurations. This is done by so called <em>Generators</em>. A generator is a Java component providing an auto-detection mechanism for certain build types like a Spring Boot build or a plain Java build. As soon as a <em>Generator</em> detects that it is applicable it will be called with the list of images configured in the <code>pom.xml</code>. Typically a generator only creates dynamically a new image configuration if this list is empty. But a generator is free to also add new images to an existing list or even change the current image list.</p>\n</div>\n<div class=\"paragraph\">\n<p>You can easily create your own generator as explained in <a href=\"#generators-api\">Generator API</a>. This section will focus on existing generators and how you can configure them.</p>\n</div>\n<div class=\"paragraph\">\n<p>The included <em>Generators</em> are enabled by default, but you can easily disable them or only select a certain set of generators. Each generator has a <em>name</em>, which is unique for a generator.</p>\n</div>\n<div class=\"paragraph\">\n<p>The generator configuration is embedded in a <code>&lt;generator&gt;</code> configuration section:</p>\n</div>\n<div id=\"generator-example\" class=\"listingblock\">\n<div class=\"title\">Example for a generator configuration</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  ....\n  &lt;configuration&gt;\n    ....\n    &lt;generator&gt; <i class=\"conum\" data-value=\"1\"></i><b>(1)</b>\n      &lt;includes&gt; <i class=\"conum\" data-value=\"2\"></i><b>(2)</b>\n        &lt;include&gt;spring-boot&lt;/include&gt;\n      &lt;/includes&gt;\n      &lt;config&gt; <i class=\"conum\" data-value=\"3\"></i><b>(3)</b>\n        &lt;spring-boot&gt; <i class=\"conum\" data-value=\"4\"></i><b>(4)</b>\n          &lt;alias&gt;ping&lt;/alias&gt;\n        &lt;/spring-boot&gt;\n      &lt;/config&gt;\n    &lt;/generator&gt;\n  &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"colist arabic\">\n<table>\n<tr>\n<td><i class=\"conum\" data-value=\"1\"></i><b>1</b></td>\n<td>Start of generators' configuration.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"2\"></i><b>2</b></td>\n<td>Generators can be included and excluded. Includes have precedence, and the generators are called in the given order.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"3\"></i><b>3</b></td>\n<td>Configuration for individual generators.</td>\n</tr>\n<tr>\n<td><i class=\"conum\" data-value=\"4\"></i><b>4</b></td>\n<td>The config is a map of supported config values. Each section is embedded in a tag named after the generator.</td>\n</tr>\n</table>\n</div>\n<div class=\"paragraph\">\n<p>The following sub-elements are supported:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 35. Generator configuration</caption>\n<colgroup>\n<col style=\"width: 14.2857%;\">\n<col style=\"width: 85.7143%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>&lt;includes&gt;</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Contains one ore more <code>&lt;include&gt;</code> elements with generator names which should be included. If given only this list of generators are included in this given order. The order is important because by default only the first matching generator kicks in. The generators from every active profile are included, too. However the generators listed here are moved to the front of the list, so that they are called first. Use the profile <code>raw</code> if you want to explicitly set the complete list of generators.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>&lt;excludes&gt;</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Holds one or more <code>&lt;exclude&gt;</code> elements with generator names to exclude. If set then all detected generators are used except the ones mentioned in this section.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>&lt;config&gt;</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration for all generators. Each generator support a specific set of configuration values as described in the documentation. The subelements of this section are generator names to configure. E.g. for generator <code>spring-boot</code>, the sub-element is called <code>&lt;spring-boot&gt;</code>. This element then holds the specific generator configuration like <code>&lt;name&gt;</code> for specifying the final image name. See above for an example. Configuration coming from profiles are merged into this config, but not overriding the configuration specified here.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>Beside specifying generator configuration in the plugin&#8217;s configuration it can be set directly with properties, too:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">Example generator property config</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-sh\" data-lang=\"sh\">mvn -Djkube.generator.java-exec.webPort=8082</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The general scheme is a prefix <code>jkube.generator.</code> followed by the unique generator name and then the generator specific key.</p>\n</div>\n<div class=\"paragraph\">\n<p>In addition to the provided default <em>Generators</em> described in the next section <a href=\"#generators-default\">Default Generators</a>, custom generators can be easily added. There are two ways to include generators:</p>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Plugin dependency</div>\n<p>You can declare the generator holding jars as dependency to this plugin as shown in this example</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n  ....\n  &lt;dependencies&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;io.acme&lt;/groupId&gt;\n      &lt;artifactId&gt;mygenerator&lt;/artifactId&gt;\n      &lt;version&gt;1.0&lt;/version&gt;\n    &lt;/dependency&gt;\n  &lt;/dependencies&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<div class=\"title\">Compile time dependency</div>\n<p>Alternatively and if your application code comes with a custom generator you can set the global configuration option <code>useProjectClasspath</code> (property: <code>jkube.useProjectClasspath</code>) to true. In this case also the project artifact and its dependencies are looked up for <em>Generators</em>. See <a href=\"#generators-api\">Generator API</a> for details how to write your own generators.</p>\n</div>\n<div class=\"sect2\">\n<h3 id=\"generators-default\">7.1. Default Generators</h3>\n<div class=\"paragraph\">\n<p>All default generators examine the build information for certain aspects and generate a Docker build configuration on the fly. They can be configured to a certain degree, where the configuration is generator specific.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 36. Default Generators</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 66.6668%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Generator</th>\n<th class=\"tableblock halign-left valign-top\">Name</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-java-exec\">Java Applications</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>java-exec</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generic generator for flat classpath and fat-jar Java applications</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-spring-boot\">Spring Boot</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>spring-boot</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Spring Boot specific generator</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-wildfly-swarm\">Wildfly Swarm</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>wildfly-swarm</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generator for Wildfly Swarm apps</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-thorntail-v2\">Thorntail v2</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>thorntail-v2</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generator for Thorntail v2 apps</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-vertx\">Vert.x</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>vertx</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generator for Vert.x applications</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-karaf\">Karaf</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>karaf</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generator for Karaf based apps</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-webapp\">Web applications</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>webapps</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generator for WAR based applications supporting Tomcat, Jetty and Wildfly base images</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-quarkus\">Quarkus</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>Quarkus</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generator for Quarkus based applications</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-openliberty\">Open Liberty</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>openliberty</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generator for Open Liberty applications</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-wildfly-jar\">WildFly Bootable JAR</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>wildfly-jar</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generator for WildFly Bootable JAR applications</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#generator-micronaut\">Micronaut</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>micronaut</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Generator for Micronaut based applications</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>There are some configuration options which are shared by all generators:</p>\n</div>\n<table id=\"generator-options-common\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 37. Common generator options</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>add</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">When set to <code>true</code>, then the generator <em>adds</em> to an existing image configuration. By default this is disabled, so\n  that a generator only kicks in when there are no other image configurations in the build, which are either configured\n  directly for a <code>k8s:build</code> or already added by a generator which has been run previously.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.add</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>alias</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">An alias name for referencing this image in various other parts of the configuration. This is also used in the log\n  output. The default alias name is the name of the generator.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.alias</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>from</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">This is the base image from where to start when creating the images. By default the generators make an opinionated\n  decision for the base image which are described in the respective generator section.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.from</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>fromMode</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whe using OpenShift S2I builds the base image can be either a plain docker image (mode: <code>jib</code>) or a reference to an\n  <a href=\"https://docs.openshift.com/container-platform/3.3/architecture/core_concepts/builds_and_image_streams.html\"> ImageStreamTag</a>\n  (mode: <code>istag</code>). In the case of an ImageStreamTag, <code>from</code> has to be specified in the form <code>namespace/image-stream:tag</code>.\n  The mode takes only effect when running in OpenShift mode.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.fromMode</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>name</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Docker image name used when doing Docker builds. For OpenShift S2I builds its the name of the image stream. This\n  can be a pattern as described in <a href=\"#image-name-placeholders\">Name Placeholders</a>. The default is <code>%g/%a:%l</code>. Note that this flag would only work\n  when you&#8217;re using opinionated image configuration provided by generators. if generators are not applicable for your project configuration, this\n  flag won&#8217;t work.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.name</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>registry</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">A optional Docker registry used when doing Docker builds. It has no effect for OpenShift S2I builds.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.registry</code></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>When used as properties they can be directly referenced with the property names above.</p>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-java-exec\">7.1.1. Java Applications</h4>\n<div class=\"paragraph\">\n<p>One of the most generic <em>Generators</em> is the <code>java-exec</code> generator.\nIt is responsible for starting up arbitrary Java application.\nIt knows how to deal with fat-jar applications where the application and all dependencies are included within a single jar and the <code>MANIFEST.MF</code> within the jar references a main class.\nBut also flat classpath applications, where the dependencies are separate jar files and a main class is given.</p>\n</div>\n<div class=\"paragraph\">\n<p>If no main class is explicitly configured, the plugin first attempts to locate a fat jar.\nIf the Maven build creates a JAR file with a <code>META-INF/MANIFEST.MF</code> containing a <code>Main-Class</code> entry, then this is considered to be the fat jar to use.\nIf there are more than one of such files then the largest one is used.</p>\n</div>\n<div class=\"paragraph\">\n<p>If a main class is configured (see below) then the image configuration will contain the application jar plus all dependency jars.\nIf no main class is configured as well as no fat jar being detected, then this <em>Generator</em> tries to detect a single main class by searching for <code>public static void main(String args[])</code> among the application classes. If exactly one class is found this is considered to be the main class. If no or more than one is found the <em>Generator</em> finally does nothing.</p>\n</div>\n<div class=\"paragraph\">\n<p>It will use the following base image by default, but as explained <a href=\"#generator-options-common\">above</a> and can be changed with the <code>from</code> configuration.</p>\n</div>\n<table id=\"generator-java-exec-from\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 38. Java Base Images</caption>\n<colgroup>\n<col style=\"width: 7.6923%;\">\n<col style=\"width: 30.7692%;\">\n<col style=\"width: 30.7692%;\">\n<col style=\"width: 30.7693%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\"></th>\n<th class=\"tableblock halign-left valign-top\">Docker Build</th>\n<th class=\"tableblock halign-left valign-top\">S2I Build</th>\n<th class=\"tableblock halign-left valign-top\">ImageStream</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Community</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-java-binary-s2i</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-java-binary-s2i</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube-java</code></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>These images always refer to the latest tag.</p>\n</div>\n<div class=\"paragraph\">\n<p>When a <code>fromMode</code> of <code>istag</code> is used to specify an <code>ImageStreamTag</code> and when no <code>from</code> is given, then as default the\n<code>ImageStreamTag</code> <code>jkube-java</code> in the namespace <code>openshift</code> is chosen.\nBy default, <code>fromMode = \"docker\"</code> which use the a plain Docker image reference for the S2I builder image.</p>\n</div>\n<div class=\"paragraph\">\n<p>Beside the common configuration parameters described in the table <a href=\"#generator-options-common\">common generator options</a>\nthe following additional configuration options are recognized:</p>\n</div>\n<table id=\"generator-java-exec-options\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 39. Java Application configuration options</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>targetDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Directory within the generated image where to put the detected artefacts into. Change this only if the base image is\n  changed, too.</p>\n<p class=\"tableblock\">  Defaults to <code>/deployments</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.java-exec.targetDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>jolokiaPort</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Port of the Jolokia agent exposed by the base image. Set this to 0 if you don&#8217;t want to expose the Jolokia port.</p>\n<p class=\"tableblock\">  Defaults to <code>8778</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.java-exec.jolokiaPort</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>mainClass</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Main class to call. If not given first a check is performed to detect a fat-jar (see above). Next a class is looked up\n  by scanning <code>target/classes</code> for a single class with a main method. If no such class is found or if more than one is\n  found, then this generator does nothing.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.java-exec.mainClass</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>prometheusPort</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Port of the Prometheus jmx_exporter exposed by the base image. Set this to 0 if you don&#8217;t want to expose the Prometheus\n  port.</p>\n<p class=\"tableblock\">  Defaults to <code>9779</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.java-exec.prometheusPort</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>webPort</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Port to expose as service, which is supposed to be the port of a web application. Set this to 0 if you don&#8217;t want to\n  expose a port.</p>\n<p class=\"tableblock\">  Defaults to <code>8080</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.java-exec.webPort</code></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>The exposed ports are typically later on use by <a href=\"#enrichers\">Enrichers</a> to create default Kubernetes or OpenShift services.</p>\n</div>\n<div class=\"paragraph\">\n<p>You can add additional files to the target image within <code>baseDir</code> by placing files into <code>src/main/jkube-includes</code>.\nThese will be added with mode <code>0644</code>, while everything in <code>src/main/jkube-includes/bin</code> will be added with <code>0755</code>.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-spring-boot\">7.1.2. Spring Boot</h4>\n<div class=\"paragraph\">\n<p>This generator is called <code>spring-boot</code> and gets activated when it finds a <code>spring-boot-maven-plugin</code> in the pom.xml.</p>\n</div>\n<div class=\"paragraph\">\n<p>This generator is based on the <a href=\"#generator-java-exec\">Java Application</a> Generator and inherits all of its configuration values. The generated container port is read from the <code>server.port</code> property <code>application.properties</code>, defaulting to <code>8080</code> if it is not found. It also uses the same default images as the <a href=\"#generator-java-exec-from\">java-exec Generator</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Beside the  <a href=\"#generator-options-common\">common generator options</a> and the <a href=\"#generator-java-exec-options\">java-exec options</a> the following additional configuration is recognized:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 40. Spring-Boot configuration options</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>color</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If set, force the use of color in the Spring Boot console output.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.spring-boot.color</code></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>The generator adds Kubernetes liveness and readiness probes pointing to either the management or server port as read from the <code>application.properties</code>.\nIf the <code>management.port</code> (for Spring Boot 1) or <code>management.server.port</code> (for Spring Boot 2) and <code>management.ssl.key-store</code> (for Spring Boot 1) or <code>management.server.ssl.key-store</code> (for Spring Boot 2) properties are set in <code>application.properties</code> otherwise or <code>server.ssl.key-store</code> property is set in <code>application.properties</code> then the probes are automatically set to use <code>https</code>.</p>\n</div>\n<div class=\"paragraph\">\n<p>The generator works differently when called together with <code>k8s:watch</code>.\nIn that case it enables support for <a href=\"http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html\">Spring Boot Developer Tools</a> which allows for hot reloading of the Spring Boot app.\nIn particular, the following steps are performed:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>If a secret token is not provided within the Spring Boot application configuration <code>application.properties</code> or <code>application.yml</code> with the key <code>spring.devtools.remote.secret</code> then a custom secret token is created and added to <code>application.properties</code></p>\n</li>\n<li>\n<p>Add <code>spring-boot-devtools.jar</code> as <code>BOOT-INF/lib/spring-devtools.jar</code> to the spring-boot fat jar.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Since during <code>k8s:watch</code> the application itself within the <code>target/</code> directory is modified for allowing easy reloading you must ensure that you do a <code>mvn clean</code> before building an artifact which should be put into production.\nSince the released version are typically generated with a CI system which does a clean build anyway this should be only a theoretical problem.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-wildfly-swarm\">7.1.3. Wildfly Swarm</h4>\n<div class=\"paragraph\">\n<p>The WildFly Swarm generator detects a WildFly Swarm build and disables the Prometheus Java agent because of this <a href=\"https://issues.jboss.org/browse/THORN-1859\">issue</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Otherwise this generator is identical to the <a href=\"#generator-java-exec\">java-exec generator</a>.\nIt supports the  <a href=\"#generator-options-common\">common generator options</a> and the <a href=\"#generator-java-exec-options\"><code>java-exec</code> options</a>.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-thorntail-v2\">7.1.4. Thorntail v2</h4>\n<div class=\"paragraph\">\n<p>The Thorntail v2 generator detects a Thorntail v2 build and disables the Prometheus Java agent because of this <a href=\"https://issues.jboss.org/browse/THORN-1859\">issue</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>Otherwise this generator is identical to the <a href=\"#generator-java-exec\">java-exec generator</a>. It supports the  <a href=\"#generator-options-common\">common generator options</a> and the <a href=\"#generator-java-exec-options\"><code>java-exec</code> options</a>.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-vertx\">7.1.5. Vert.x</h4>\n<div class=\"paragraph\">\n<p>The Vert.x generator detects an application using Eclipse Vert.x. It generates the metadata to start the application as a fat jar.</p>\n</div>\n<div class=\"paragraph\">\n<p>Currently, this generator is enabled if:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>you are using the Vert.x Maven Plugin (<a href=\"https://github.com/reactiverse/vertx-maven-plugin\" class=\"bare\">https://github.com/reactiverse/vertx-maven-plugin</a>)</p>\n</li>\n<li>\n<p>you are depending on <code>io.vertx:vertx-core</code> and uses the Maven Shader plugin</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Otherwise this generator is identical to the <a href=\"#generator-java-exec\">java-exec generator</a>. It supports the  <a href=\"#generator-options-common\">common generator options</a> and the <a href=\"#generator-java-exec-options\"><code>java-exec</code> options</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>The generator automatically:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>enable metrics and JMX publishing of the metrics when <code>io.vertx:vertx-dropwizard-metrics</code> is in the project&#8217;s classpath / dependencies.</p>\n</li>\n<li>\n<p>enable clustering when a Vert.x cluster manager is available in the project&#8217;s classpath / dependencies. this is done by appending <code>-cluster</code> to the command line.</p>\n</li>\n<li>\n<p>Force IPv4 stack when <code>vertx-infinispan</code> is used.</p>\n</li>\n<li>\n<p>Disable the async DNS resolver to fallback to the regular JVM DNS resolver.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>You can pass application parameter by setting the <code>JAVA_ARGS</code> env variable. You can pass system properties either using the same variable or using <code>JAVA_OPTIONS</code>. For instance, create <code>src/main/jkube/deployment.yml</code> with the following content to configure <code>JAVA_ARGS</code>:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">spec:\n template:\n   spec:\n     containers:\n       - env:\n         - name: JAVA_ARGS\n           value: \"-Dfoo=bar -cluster -instances=2\"</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-karaf\">7.1.6. Karaf</h4>\n<div class=\"paragraph\">\n<p>This generator named <code>karaf</code> kicks in when the build uses a <code>karaf-maven-plugin</code>. By default the following base images are used:</p>\n</div>\n<table id=\"generator-karaf-from\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 41. Karaf Base Images</caption>\n<colgroup>\n<col style=\"width: 7.6923%;\">\n<col style=\"width: 30.7692%;\">\n<col style=\"width: 30.7692%;\">\n<col style=\"width: 30.7693%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\"></th>\n<th class=\"tableblock halign-left valign-top\">Docker Build</th>\n<th class=\"tableblock halign-left valign-top\">S2I Build</th>\n<th class=\"tableblock halign-left valign-top\">ImageStream</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Community</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-karaf-binary-s2i</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-karaf-binary-s2i</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube-karaf</code></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>When a <code>fromMode</code> of <code>istag</code> is used to specify an <code>ImageStreamTag</code> and when no <code>from</code> is given, then as default the\n<code>ImageStreamTag</code> <code>jkube-karaf</code> in the namespace <code>openshift</code> is chosen.</p>\n</div>\n<div class=\"paragraph\">\n<p>In addition to the  <a href=\"#generator-options-common\">common generator options</a> this generator can be configured with the following options:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 42. Karaf configuration options</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>baseDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Directory within the generated image where to put the detected artifacts into. Change this only if the base image is\n  changed, too.</p>\n<p class=\"tableblock\">  Defaults to <code>/deployments</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.karaf.baseDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>webPort</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Port to expose as service, which is supposed to be the port of a web application. Set this to 0 if you don&#8217;t want to\nexpose a port.</p>\n<p class=\"tableblock\">  Defaults to <code>8080</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.karaf.webPort</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-webapp\">7.1.7. Web Applications</h4>\n<div class=\"paragraph\">\n<p>The <code>webapp</code> generator tries to detect WAR builds and selects a base servlet container image based on the configuration found in the <code>pom.xml</code>:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>A <strong>Tomcat</strong> base image is selected when a <code>tomcat6-maven-plugin</code> or <code>tomcat7-maven-plugin</code> is present or when a <code>META-INF/context.xml</code> could be found in the classes directory.</p>\n</li>\n<li>\n<p>A <strong>Jetty</strong> base image is selected when a <code>jetty-maven-plugin</code> is present or one of the files <code>WEB-INF/jetty-web.xml</code> or <code>WEB-INF/jetty-logging.properties</code> is found.</p>\n</li>\n<li>\n<p>A <strong>Wildfly</strong> base image is chosen for a given <code>jboss-as-maven-plugin</code> or <code>wildfly-maven-plugin</code> or when a Wildfly specific deployment descriptor like <code>jboss-web.xml</code> is found.</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The base images chosen are:</p>\n</div>\n<table id=\"generator-webapp-from\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 43. Webapp Base Images</caption>\n<colgroup>\n<col style=\"width: 11.1111%;\">\n<col style=\"width: 44.4444%;\">\n<col style=\"width: 44.4445%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\"></th>\n<th class=\"tableblock halign-left valign-top\">Docker Build</th>\n<th class=\"tableblock halign-left valign-top\">S2I Build</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Tomcat</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-tomcat9-binary-s2i</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-tomcat9-binary-s2i</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Jetty</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-jetty9-binary-s2i</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-jetty9-binary-s2i</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Wildfly</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jboss/wildfly</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"https://github.com/wildfly/wildfly-s2i\"><code>quay.io/wildfly/wildfly-centos7</code></a></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>In addition to the  <a href=\"#generator-options-common\">common generator options</a> this generator can be configured with the following options:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 44. Webapp configuration options</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>server</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Fix server to use in the base image. Can be either <strong>tomcat</strong>, <strong>jetty</strong> or <strong>wildfly</strong>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.webapp.server</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>targetDir</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where to put the war file into the target image. By default its selected by the base image chosen but can be\n  overwritten with this option.</p>\n<p class=\"tableblock\">  Defaults to <code>/deployments</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.webapp.targetDir</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>user</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">User and/or group under which the files should be added. The syntax of this options is descriped in\n  <a href=\"#config-image-build-assembly-user\">Assembly Configuration</a>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.webapp.user</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>path</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Context path with which the application can be reached by default.</p>\n<p class=\"tableblock\">  Defaults to <code>/</code> (root context).</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.webapp.path</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>cmd</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Command to use to start the container. By default the base images startup command is used.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.webapp.cmd</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>ports</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Comma separated list of ports to expose in the image and which eventually are translated later to Kubernetes services.\n  The ports depend on the base image and are selected automatically. But they can be overridden here.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.generator.webapp.ports</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-quarkus\">7.1.8. Quarkus</h4>\n<div class=\"paragraph\">\n<p>The <code>Quarkus</code> generator tries to detect quarkus based projects looking at project <code>pom.xml</code>:</p>\n</div>\n<div class=\"paragraph\">\n<p>The base images chosen are:</p>\n</div>\n<table id=\"generator-quarkus-from\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 45. Webapp Base Images</caption>\n<colgroup>\n<col style=\"width: 11.1111%;\">\n<col style=\"width: 44.4444%;\">\n<col style=\"width: 44.4445%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\"></th>\n<th class=\"tableblock halign-left valign-top\">Docker Build</th>\n<th class=\"tableblock halign-left valign-top\">S2I Build</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Native</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>registry.access.redhat.com/ubi8/ubi-minimal:8.1</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/quarkus/ubi-quarkus-native-binary-s2i</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>Normal Build</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-java-binary-s2i</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>quay.io/jkube/jkube-java-binary-s2i</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-openliberty\">7.1.9. Open Liberty</h4>\n<div class=\"paragraph\">\n<p>The Open Liberty generator runs when the Open Liberty plugin is enabled in the maven build.</p>\n</div>\n<div class=\"paragraph\">\n<p>The generator is similar to the <a href=\"#generator-java-exec\">java-exec generator</a>. It supports the  <a href=\"#generator-options-common\">common generator options</a> and the <a href=\"#generator-java-exec-options\"><code>java-exec</code> options</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>For Open Liberty, the default value of webPort is 9080.</p>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-wildfly-jar\">7.1.10. Wildfly JAR Generator</h4>\n<div class=\"paragraph\">\n<p>The Wildfly JAR generator detects a WildFly Bootable JAR build and disables the Jolokia and Prometheus Java agent.</p>\n</div>\n<div class=\"paragraph\">\n<p>Otherwise this generator is identical to the <a href=\"#generator-java-exec\">java-exec generator</a>. It supports the  <a href=\"#generator-options-common\">common generator options</a> and the <a href=\"#generator-java-exec-options\"><code>java-exec</code> options</a>.</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"_support_for_slim_bootable_jar\">Support for slim Bootable JAR</h5>\n<div class=\"paragraph\">\n<p>A slim Bootable JAR is a JAR that retrieves JBoss module artifacts from a Maven local cache. Such JAR are smaller and start faster. The WildFly JAR generator\nhas a builtin support to install a maven local cache in the image.</p>\n</div>\n<div class=\"paragraph\">\n<p>In order to build a slim Bootable JAR, configure the <em>wildfly-jar-maven-plugin</em> for slim server and maven local cache generation:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>  &lt;plugin&gt;\n    &lt;groupId&gt;org.wildfly.plugins&lt;/groupId&gt;\n    &lt;artifactId&gt;wildfly-jar-maven-plugin&lt;/artifactId&gt;\n    &lt;configuration&gt;\n      &lt;plugin-options&gt;\n       &lt;!-- Build a slim Bootable JAR --&gt;\n       &lt;jboss-maven-dist/&gt;\n       &lt;!-- Path to the Maven local cache that the plugin generates during build.\n            It contains JBoss module artifacts required by the server. --&gt;\n       &lt;jboss-maven-repo&gt;target/myapp-repo&lt;/jboss-maven-repo&gt;\n      &lt;/plugin-options&gt;\n      ...\n    &lt;/configuration&gt;\n    &lt;executions&gt;\n      &lt;execution&gt;\n        &lt;goals&gt;\n          &lt;goal&gt;package&lt;/goal&gt;\n        &lt;/goals&gt;\n      &lt;/execution&gt;\n    &lt;/executions&gt;\n  &lt;/plugin&gt;</pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The generator detects the path of the generated maven local repository directory\n(value of the <em>&lt;jboss-maven-repo&gt;</em> element) and copies it into the image <em>/deployments/&lt;repo directory name&gt;</em> directory.\nNB: A relative path is considered relative to the maven project base directory.</p>\n</div>\n<div class=\"paragraph\">\n<p>In order for the Bootable JAR to retrieve the JBoss modules artifacts, the java\noption <em>-Dmaven.repo.local=/deployments/&lt;repo directory name&gt;</em> is automatically added to the launch options.</p>\n</div>\n</div>\n</div>\n<div class=\"sect3\">\n<h4 id=\"generator-micronaut\">7.1.11. Micronaut Generator</h4>\n<div class=\"paragraph\">\n<p>The Micronaut generator (named <code>micronaut</code>) detects a Micronaut project by analyzing the plugin\ndependencies searching for <code>io.micronaut.build:micronaut-maven-plugin</code>.</p>\n</div>\n<div class=\"paragraph\">\n<p>This generator is based on the <a href=\"#generator-java-exec\">Java Application</a> Generator and inherits all\nof its configuration values.</p>\n</div>\n</div>\n</div>\n<div class=\"sect2\">\n<h3 id=\"generators-api\">7.2. Generator API</h3>\n<div class=\"admonitionblock warning\">\n<table>\n<tr>\n<td class=\"icon\">\n<i class=\"fa icon-warning\" title=\"Warning\"></i>\n</td>\n<td class=\"content\">\nThe API is still a bit in flux and will be documented later. Please refer to the\n         <a href=\"https://github.com/eclipse/jkube/blob/master/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/Generator.java\">Generator</a>\n         Interface in the meantime.\n</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"enrichers\">8. Enrichers</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Enriching is the complementary concept to <a href=\"#generators\">Generators</a>. Whereas Generators are used to create and customize Docker images, Enrichers are use to create and customize Kubernetes resource objects.</p>\n</div>\n<div class=\"paragraph\">\n<p>There are a lot of similarities to Generators:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Each Enricher has a unique name.</p>\n</li>\n<li>\n<p>Enrichers are looked up automatically from the plugin dependencies and there is a set of default enrichers delivered with this plugin.</p>\n</li>\n<li>\n<p>Enrichers are configured the same ways as generators</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>The <a href=\"#generator-example\">Generator example</a> is a good blueprint, simply replace <code>&lt;generator&gt;</code> with <code>&lt;enricher&gt;</code>. The configuration is structural identical:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 46. Enricher configuration</caption>\n<colgroup>\n<col style=\"width: 25%;\">\n<col style=\"width: 75%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>&lt;includes&gt;</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Contains one ore more <code>&lt;include&gt;</code> elements with enricher names which should be included. If given, only this list of enrichers are included in this order. The enrichers from every active profile are included, too. However the enrichers listed here are moved to the front of the list, so that they are called first. Use the profile <code>raw</code> if you want to explicitly set the complete list of enrichers.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>&lt;excludes&gt;</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Holds one or more <code>&lt;exclude&gt;</code> elements with enricher names to exclude. This means all the detected enrichers are used except the ones mentioned in this section.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>&lt;config&gt;</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configuration for all enrichers. Each enricher supports a specific set of configuration values as described in its documentation. The subelements of this section are enricher names. E.g. for enricher <code>jkube-service</code>, the sub-element is called <code>&lt;jkube-service&gt;</code>. This element then holds the specific enricher configuration like <code>&lt;name&gt;</code> for the service name. Configuration coming from profiles are merged into this config, but not overriding the configuration specified here.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>This plugin comes with a set of default enrichers. In addition custom enrichers can be easily added by providing implementation of the <a href=\"#enricher-api\">Enricher API</a> and adding these as a dependency to the build.</p>\n</div>\n<div class=\"sect2\">\n<h3 id=\"enrichers-default\">8.1. Default Enrichers</h3>\n<div class=\"paragraph\">\n<p>kubernetes-maven-plugin comes with a set of enrichers which are enabled by default. There are two categories of default enrichers:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"#enrichers-generic\"><strong>Generic Enrichers</strong></a> are used to add default resource object when they are missing or add common\nmetadata extracted from the given build information.</p>\n</li>\n<li>\n<p><a href=\"#enrichers-specific\"><strong>Specific Enrichers</strong></a> are enrichers which are focused on a certain tech stack that they detect.</p>\n</li>\n</ul>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 47. Default Enrichers Overview</caption>\n<colgroup>\n<col style=\"width: 22.2222%;\">\n<col style=\"width: 77.7778%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Enricher</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-configmap-file\">jkube-configmap-file</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add ConfigMap elements defined as XML or as annotation.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-container-env-java-options\">jkube-container-env-java-options</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Merges <code>JAVA_OPTIONS</code> environment variable defined in <a href=\"#config-image-build\">Build configuration (&lt;image&gt; )</a>\n  environment (<code>env</code>) with <code>Container</code> <code>JAVA_OPTIONS</code> environment variable added\n  by other enrichers, XML configuration or fragment.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-controller\">jkube-controller</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Create default controller (replication controller, replica set or deployment <a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/\">Kubernetes doc</a>) if missing.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-dependency\">jkube-dependency</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Examine build dependencies for <code>kubernetes.yml</code> and add the objects found therein.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-docker-registry-secret\">jkube-docker-registry-secret</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add a <code>Secret</code> for your Docker registry credentials.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-git\">jkube-git</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Check local <code>.git</code> directory and add build information as annotations.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-image\">jkube-image</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add the image name into a <code>PodSpec</code> of replication controller, replication sets and deployments, if missing.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-ingress\">jkube-ingress</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Create a default Ingress if missing or configured from XML configuration</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-metadata\">jkube-metadata</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add labels/annotations to generated Kubernetes resources</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-maven-issue-mgmt-enricher\">jkube-maven-issue-mgmt</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add Maven Issue Management information as annotations to the kubernetes/openshift resources</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-maven-scm-enricher\">jkube-maven-scm-enricher</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add Maven SCM information as annotations to the kubernetes/openshift resources</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-name\">jkube-name</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add a default name to every object which misses a name.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-namespace\">jkube-namespace</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Set the <em>Namespace</em> of the generated and processed Kubernetes resources metadata and optionally create a new Namespace</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-pod-annotation\">jkube-pod-annotation</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Copy over annotations from a <code>Deployment</code> to a <code>Pod</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-portname\">jkube-portname</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add a default portname for commonly known service.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-project-label\">jkube-project-label</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add Maven coordinates as labels to all objects.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-prometheus\">jkube-prometheus</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add Prometheus annotations.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-replicas\">jkube-replicas</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Override number of replicas for any controller processed by JKube.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-revision-history-enricher\">jkube-revision-history</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add revision history limit (<a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#revision-history-limit\">Kubernetes doc</a>) as a deployment spec property to the Kubernetes/OpenShift resources.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-secret-file\">jkube-secret-file</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add Secret elements defined as annotation.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-service\">jkube-service</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Create a default service if missing and extract ports from the Docker image configuration.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-serviceaccount\">jkube-serviceaccount</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add a ServiceAccount defined as XML or mentioned in resource fragment.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#jkube-triggers-annotation\">jkube-triggers-annotation</a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Add ImageStreamTag change triggers on Kubernetes resources such as StatefulSets, ReplicaSets and DaemonSets using the <code>image.openshift.io/triggers</code> annotation.</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"sect3\">\n<h4 id=\"enrichers-generic\">8.1.1. Generic Enrichers</h4>\n<div class=\"paragraph\">\n<p>Default generic enrichers are used for adding missing resources or adding metadata to given resource objects.\nThe following default enhancers are available out of the box.</p>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-configmap-file\">jkube-configmap-file</h5>\n<div class=\"paragraph\">\n<p>This enricher adds ConfigMap defined as <code>resources</code> in plugin configuration and/or resolves file content from an annotation.</p>\n</div>\n<div class=\"paragraph\">\n<p>As XML you can define:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"title\">pom.xml</div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n  &lt;resources&gt;\n    &lt;configMap&gt;\n      &lt;name&gt;myconfigmap&lt;/name&gt;\n      &lt;entries&gt;\n        &lt;entry&gt;\n          &lt;name&gt;A&lt;/name&gt;\n          &lt;value&gt;B&lt;/value&gt;\n        &lt;/entry&gt;\n       &lt;/entries&gt;\n    &lt;/configMap&gt;\n  &lt;/resources&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This creates a ConfigMap data with key <code>A</code> and value <code>B</code>.</p>\n</div>\n<div class=\"paragraph\">\n<p>You can also use <code>file</code> tag to refer to the content of a file.</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n  &lt;resources&gt;\n    &lt;configMap&gt;\n      &lt;name&gt;configmap-test&lt;/name&gt;\n      &lt;entries&gt;\n        &lt;entry&gt;\n          &lt;file&gt;src/test/resources/test-application.properties&lt;/file&gt;\n        &lt;/entry&gt;\n       &lt;/entries&gt;\n    &lt;/configMap&gt;\n  &lt;/resources&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This creates a ConfigMap with key <code>test-application.properties</code> and value the content of the <code>src/test/resources/test-application.properties</code> file.\nIf you set <code>name</code> tag then this is used as key instead of the filename.</p>\n</div>\n<div class=\"sect5\">\n<h6 id=\"configmap-xml-configuration\">ConfigMap XML Configuration</h6>\n<div class=\"paragraph\">\n<p>Here are the supported options while providing <code>&lt;configMap&gt;</code> in XML configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 48. XML configmap configuration`&lt;configMap&gt;`</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><a href=\"#configmap-entry-xml-configuration\"><code>entries</code></a></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">data for ConfigMap</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>name</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Name of the ConfigMap</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect5\">\n<h6 id=\"configmap-entry-xml-configuration\">ConfigMap Entry XML Configuration</h6>\n<div class=\"paragraph\">\n<p><code>&lt;entries&gt;</code> is a list of <code>&lt;port&gt;</code> configuration objects. Here are the supported options while providing <code>&lt;entry&gt;</code> in XML configuration</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 49. XML configmap entry configuration`&lt;entry&gt;`</caption>\n<colgroup>\n<col style=\"width: 16.6666%;\">\n<col style=\"width: 83.3334%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>value</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Entry value</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>file</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">path to a file or directory. If it&#8217;s a single file then file contents would be read as value. If it&#8217;s a directory then each file&#8217;s content is stored as value with file name as key.</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>name</code></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Entry name</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>If you are defining a custom <code>ConfigMap</code> file, you can use an annotation to define a file name as key and its content as the value:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">metadata:\n  name: ${project.artifactId}\n  annotations:\n    maven.jkube.io/cm/application.properties: src/test/resources/test-application.properties</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This creates a <code>ConfigMap</code> data with key <code>application.properties</code> (part defined after <code>cm</code>) and value the content of <code>src/test/resources/test-application.properties</code> file.</p>\n</div>\n<div class=\"paragraph\">\n<p>You can specify a directory instead of a file:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\">metadata:\n  name: ${project.artifactId}\n  annotations:\n    maven.jkube.io/cm/application.properties: src/test/resources/test-dir</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This creates a <code>ConfigMap</code> named <code>application.properties</code> (part defined after <code>cm</code>) and for each file under the directory <code>test-dir</code> one entry with file name as key and its content as the value; subdirectories are ignored.</p>\n</div>\n</div>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-container-env-java-options\">jkube-container-env-java-options</h5>\n<div class=\"paragraph\">\n<p>Merges <code>JAVA_OPTIONS</code> environment variable defined in <a href=\"#config-image-build\">Build configuration (&lt;image&gt; )</a>\nenvironment (<code>env</code>) with <code>Container</code> <code>JAVA_OPTIONS</code> environment variable added\nby other enrichers, XML configuration or fragment.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Option</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>disable</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Disabled the enricher, any <code>JAVA_OPTIONS</code> environment variable defined by an enricher,\n  XML configuration or YAML fragment will override the one defined by the generator\n  or Image Build configuration.</p>\n<p class=\"tableblock\">  Defaults to <code>false</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-container-env-java-options.disable</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-controller\">jkube-controller</h5>\n<div class=\"paragraph\">\n<p>This enricher is used to ensure that a controller is present.\nThis can be either directly configured with fragments or with the XML configuration.\nAn explicit configuration always takes precedence over auto detection.\nSee <a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/\">Kubernetes doc</a> for more information on types of controllers.</p>\n</div>\n<div class=\"paragraph\">\n<p>The following configuration parameters can be used to influence the behaviour of this enricher:</p>\n</div>\n<table id=\"enricher-jkube-controller\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 50. Default controller enricher</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>name</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Name of the Controller. Kubernetes Controller names must start with a letter. If the maven artifactId starts with a\n  digit, <code>s</code> will be prefixed.</p>\n<p class=\"tableblock\">  Defaults to <code>${project.artifactId}</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-controller.name</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>pullPolicy</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Image pull policy to use for the container. One of: <em>IfNotPresent</em>, <em>Always</em>.</p>\n<p class=\"tableblock\">  Defaults to <code>IfNotPresent</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-controller.pullPolicy</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>type</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Type of Controller to create. One of: <em>ReplicationController</em>, <em>ReplicaSet</em>, <em>Deployment</em>, <em>DeploymentConfig</em>,\n  <em>StatefulSet</em>, <em>DaemonSet</em>, <em>Job</em>.</p>\n<p class=\"tableblock\">  Defaults to <code>Deployment</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-controller.type</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>replicaCount</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Number of replicas for the container.</p>\n<p class=\"tableblock\">  Defaults to <code>1</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-controller.replicaCount</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-dependency\">jkube-dependency</h5>\n\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-docker-registry-secret\">jkube-docker-registry-secret</h5>\n<div class=\"paragraph\">\n<p>This enricher enables k8s:resource Secret generation feature. You can read more about it <a href=\"#resource-secrets\">Secrets</a>.</p>\n</div>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-git\">jkube-git</h5>\n<div class=\"paragraph\">\n<p>Enricher that adds info from .git directory as annotations.</p>\n</div>\n<div class=\"paragraph\">\n<p>The git branch &amp; latest commit on the branch are annotated as <code>jkube.io/git-branch</code> &amp; <code>jkube.io/git-commit</code>.\n<code>jkube.io/git-url</code> is annotated as the URL of your configured remote.</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Option</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>gitRemote</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Configures the git remote name, whose URL you want to annotate as 'git-url'.</p>\n<p class=\"tableblock\">  Defaults to <code>origin</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-git.gitRemote</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-image\">jkube-image</h5>\n\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-ingress\">jkube-ingress</h5>\n<div class=\"paragraph\">\n<p>Enricher responsible for creation of Ingress either using opinionated defaults or as per provided XML configuration.\nThis enricher gets activated when <code>jkube.createExternalUrls</code> is set to <code>true</code>.\nJKube generates Ingress only for Services which have either <code>expose=true</code> or <code>exposeUrl=true</code> labels set.</p>\n</div>\n<table id=\"enricher-jkube-ingress\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 51. Ingress enricher</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>host</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Host is the fully qualified domain name of a network host.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-ingress.host</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>targetApiVersion</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether to generate <code>extensions/v1beta1</code> Ingress or <code>networking.k8s.io/v1</code> Ingress.</p>\n<p class=\"tableblock\">  Defaults to <code>extensions/v1beta1</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-ingress.targetApiVersion</code></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>This enricher is responsible for generating Ingress resource during k8s:resource goal. You can read more about it in <a href=\"#ingress-generation\">Ingress Generation</a> section.</p>\n</div>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-metadata\">jkube-metadata</h5>\n<div class=\"paragraph\">\n<p>This enricher is responsible for adding labels and annotations to your resources. It reads <code>&lt;labels&gt;</code> and <code>&lt;annotations&gt;</code> fields provided in <code>&lt;resources&gt;</code> and adds respective labels/annotations to Kubernetes resources.</p>\n</div>\n<div class=\"paragraph\">\n<p>You can also configure whether you want to add these labels/annotations to some specific resource or all resources. You can see an example if it&#8217;s usage in k8s:resource <a href=\"#resource-labels-annotations\">Labels And Annotations</a> section.</p>\n</div>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-maven-scm-enricher\">jkube-maven-scm-enricher</h5>\n<div class=\"paragraph\">\n<p>This enricher adds additional <a href=\"https://maven.apache.org/pom.html#SCM\">SCM</a> related metadata to all objects supporting annotations.\nThese metadata will be added only if <a href=\"https://maven.apache.org/pom.html#SCM\">SCM</a> information is present in the maven <code>pom.xml</code> of the project.</p>\n</div>\n<div class=\"paragraph\">\n<p>The following annotations will be added to the objects that supports annotations,</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 52. Maven SCM Enrichers Annotation Mapping</caption>\n<colgroup>\n<col style=\"width: 28.5714%;\">\n<col style=\"width: 28.5714%;\">\n<col style=\"width: 42.8572%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Maven SCM Info</th>\n<th class=\"tableblock halign-left valign-top\">Annotation</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">scm/connection</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">jkube.io/scm-con-url</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The SCM connection that will be used to connect to the project&#8217;s SCM</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">scm/developerConnection</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">jkube.io/scm-devcon-url</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The SCM Developer Connection that will be used to connect to the project&#8217;s developer SCM</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">scm/tag</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">jkube.io/scm-tag</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The SCM tag that will be used to checkout the sources, like HEAD dev-branch etc.,</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">scm/url</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">jkube.io/scm-url</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The SCM web url that can be used to browse the SCM over web browser</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>Lets say you have a maven pom.xml with the following scm information,</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;scm&gt;\n    &lt;connection&gt;scm:git:git://github.com/jkubeio/kubernetes-maven-plugin.git&lt;/connection&gt;\n    &lt;developerConnection&gt;scm:git:git://github.com/jkubeio/kubernetes-maven-plugin.git&lt;/developerConnection&gt;\n    &lt;url&gt;git://github.com/jkubeio/kubernetes-maven-plugin.git&lt;/url&gt;\n&lt;/scm&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This information will be enriched as annotations in the generated manifest like,</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\"># ...\n  kind: Service\n  metadata:\n    annotations\n      jkube.io/scm-con-url: \"scm:git:git://github.com/jkubeio/kubernetes-maven-plugin.git\"\n      jkube.io/scm-devcon-url: \"scm:git:git://github.com/jkubeio/kubernetes-maven-plugin.git\"\n      jkube.io/scm-tag: \"HEAD\"\n      jkube.io/scm-url: \"git://github.com/jkubeio/kubernetes-maven-plugin.git\"\n# ...</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-maven-issue-mgmt-enricher\">jkube-maven-issue-mgmt</h5>\n<div class=\"paragraph\">\n<p>This enricher adds additional <a href=\"https://maven.apache.org/pom.html#Issue_Management\">Issue Management</a> related metadata to\nall objects supporting annotations.\nThese metadata will be added only if the <a href=\"https://maven.apache.org/pom.html#Issue_Management\">Issue Management</a>\ninformation is available in the <code>pom.xml</code> of the Maven project.</p>\n</div>\n<div class=\"paragraph\">\n<p>The following annotations will be added to the objects that support these annotations,</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 53. Maven Issue Tracker Enrichers Annotation Mapping</caption>\n<colgroup>\n<col style=\"width: 28.5714%;\">\n<col style=\"width: 28.5714%;\">\n<col style=\"width: 42.8572%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Maven Issue Tracker Info</th>\n<th class=\"tableblock halign-left valign-top\">Annotation</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">issueManagement/system</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">jkube.io/issue-system</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Issue Management system like Bugzilla, JIRA, GitHub etc.,</p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">issueManagement/url</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">jkube.io/issue-tracker-url</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The Issue Management url e.g. GitHub Issues Url</p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>Lets say you have a maven pom.xml with the following issue management information,</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;issueManagement&gt;\n   &lt;system&gt;GitHub&lt;/system&gt;\n   &lt;url&gt;https://github.com/reactiverse/vertx-maven-plugin/issues/&lt;/url&gt;\n&lt;/issueManagement&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>This information will be enriched as annotations in the generated manifest like,</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-yaml\" data-lang=\"yaml\"># ...\n  kind: Service\n  metadata:\n    annotations:\n      jkube.io/issue-system: \"GitHub\"\n      jkube.io/issue-tracker-url: \"https://github.com/reactiverse/vertx-maven-plugin/issues/\"\n# ...</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-name\">jkube-name</h5>\n\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-namespace\">jkube-namespace</h5>\n<div class=\"paragraph\">\n<p>This enricher adds a <code>Namespace</code>/<code>Project</code> resource to the Kubernetes Resources list in case the namespace\nconfiguration (<code>jkube.enricher.jkube-namespace.namespace</code>) is provided.</p>\n</div>\n<div class=\"paragraph\">\n<p>In addition, this enricher sets the namespace (<code>.metadata.namespace</code> ) of the JKube generated and processed Kubernetes\nresources in case they don&#8217;t already have one configured (see the <code>force</code> configuration).</p>\n</div>\n<div class=\"paragraph\">\n<p>The following configuration parameters can be used to influence the behaviour of this enricher:</p>\n</div>\n<table id=\"enricher-jkube-namespace\" class=\"tableblock frame-all grid-all stretch\">\n<caption class=\"title\">Table 54. Default namespace enricher</caption>\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>namespace</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Namespace as string which we want to create. A new <code>Namespace</code> object will be created and added to the list of Kubernetes resources generated during the enrichment phase.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-namespace.namespace</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>type</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Whether we want to generate a <code>Namespace</code> or an OpenShift specific <code>Project</code> resource. One of: <em>Namespace</em>, <em>Project</em>.</p>\n<p class=\"tableblock\">  Defaults to <code>Namespace</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-namespace.type</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>force</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">If the <code>.metadata.namespace</code> field must be forced even if the resource has already one configured.</p>\n<p class=\"tableblock\">  Defaults to false.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-namespace.force</code></p></td>\n</tr>\n</tbody>\n</table>\n<div class=\"paragraph\">\n<p>This enricher also configures generated Namespace in <code>.metadata.namespace</code> field for Kubernetes resources as per provided XML configuration too. Here is an example:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;configuration&gt;\n    &lt;resources&gt;\n        &lt;namespace&gt;mynamespace&lt;/namespace&gt;\n    &lt;/resources&gt;\n&lt;/configuration&gt;</code></pre>\n</div>\n</div>\n</div>\n<div class=\"sect4\">\n<h5 id=\"jkube-openshift-autotls\">jkube-openshift-autotls</h5>\n<div class=\"paragraph\">\n<p>Enricher which adds appropriate annotations and volumes to enable OpenShift&#8217;s automatic\n<a href=\"https://docs.openshift.org/latest/dev_guide/secrets.html#service-serving-certificate-secrets\">Service Serving Certificate Secrets</a>.\nThis enricher adds an init container to convert the service serving certificates from PEM (the format that OpenShift generates them in) to\na JKS-format Java keystore ready for consumption in Java services.</p>\n</div>\n<div class=\"paragraph\">\n<p>This enricher is disabled by default. In order to use it, you must configure the kubernetes-maven-plugin to use this enricher:</p>\n</div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-xml\" data-lang=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.eclipse.jkube&lt;/groupId&gt;\n  &lt;artifactId&gt;kubernetes-maven-plugin&lt;/artifactId&gt;\n  &lt;version&gt;1.5.0&lt;/version&gt;\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;goals&gt;\n        &lt;goal&gt;resource&lt;/goal&gt;\n      &lt;/goals&gt;\n    &lt;/execution&gt;\n  &lt;/executions&gt;\n  &lt;configuration&gt;\n    &lt;enricher&gt;\n      &lt;includes&gt;\n        &lt;include&gt;jkube-openshift-autotls&lt;/include&gt;\n      &lt;/includes&gt;\n      &lt;config&gt;\n        &lt;jkube-openshift-autotls&gt;\n          &lt;!-- ... --&gt;\n        &lt;/jkube-openshift-autotls&gt;\n      &lt;/config&gt;\n    &lt;/enricher&gt;\n  &lt;/configuration&gt;\n&lt;/plugin&gt;</code></pre>\n</div>\n</div>\n<div class=\"paragraph\">\n<p>The auto-TLS enricher supports the following configuration options:</p>\n</div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col style=\"width: 12.5%;\">\n<col style=\"width: 75%;\">\n<col style=\"width: 12.5%;\">\n</colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Element</th>\n<th class=\"tableblock halign-left valign-top\">Description</th>\n<th class=\"tableblock halign-left valign-top\">Property</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tlsSecretName</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">The name of the secret to be used to store the generated service serving certs.</p>\n<p class=\"tableblock\">  Defaults to <code>&lt;project.artifactId&gt;-tls</code>.</p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><code>jkube.enricher.jkube-openshift-autotls.tlsSecretName</code></p></td>\n</tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\"><strong>tlsSecretVolumeMountPoint</strong></p></td>\n<td class=\"tableblock halign-left valign-top\"><p class=\"tableblock\">Where the service serving secret should be mounted to in the pod.</p>\n<p class=\"tableblock\">  Defaults to <code>/var/run/secrets/jkube.io/tls-pem</code>.</p></td>\n<td class=\"tableblock halign-left va