kubernetes-operator/docs/docs/getting-started/v0.2.0/index.xml

2175 lines
133 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Jenkins Operator v0.2.0</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/</link>
<description>Recent Hugo news from gohugo.io</description>
<generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Mon, 05 Aug 2019 00:00:00 +0000</lastBuildDate>
<image>
<url>https://jenkinsci.github.io/kubernetes-operator/img/hugo.png</url>
<title>GoHugo.io</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/</link>
</image>
<atom:link href="https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Docs: Deploy Jenkins</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/deploy-jenkins/</link>
<pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
<guid>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/deploy-jenkins/</guid>
<description>
&lt;p&gt;Once jenkins-operator is up and running let&amp;rsquo;s deploy actual Jenkins instance.
Create manifest ie. &lt;strong&gt;jenkins_instance.yaml&lt;/strong&gt; with following data and save it on drive.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;apiVersion: jenkins.io/v1alpha2
kind: Jenkins
metadata:
name: example
spec:
master:
containers:
- name: jenkins-master
image: jenkins/jenkins:lts
imagePullPolicy: Always
livenessProbe:
failureThreshold: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;12&lt;/span&gt;
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;80&lt;/span&gt;
periodSeconds: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;10&lt;/span&gt;
successThreshold: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;
timeoutSeconds: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;5&lt;/span&gt;
readinessProbe:
failureThreshold: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;3&lt;/span&gt;
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;30&lt;/span&gt;
periodSeconds: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;10&lt;/span&gt;
successThreshold: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;
timeoutSeconds: &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;
resources:
limits:
cpu: 1500m
memory: 3Gi
requests:
cpu: &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;
memory: 500Mi
seedJobs:
- id: jenkins-operator
targets: &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;cicd/jobs/*.jenkins&amp;#34;&lt;/span&gt;
description: &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Jenkins Operator repository&amp;#34;&lt;/span&gt;
repositoryBranch: master
repositoryUrl: https://github.com/jenkinsci/kubernetes-operator.git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Deploy Jenkins to K8s:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl create -f jenkins_instance.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Watch Jenkins instance being created:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl get pods -w&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Get Jenkins credentials:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl get secret jenkins-operator-credentials-&amp;lt;cr_name&amp;gt; -o &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;jsonpath={.data.user}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d
kubectl get secret jenkins-operator-credentials-&amp;lt;cr_name&amp;gt; -o &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;jsonpath={.data.password}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Connect to Jenkins (minikube):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;minikube service jenkins-operator-http-&amp;lt;cr_name&amp;gt; --url&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Connect to Jenkins (actual Kubernetes cluster):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl port-forward jenkins-&amp;lt;cr_name&amp;gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8080&lt;/span&gt;:8080&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then open browser with address &lt;code&gt;http://localhost:8080&lt;/code&gt;.
&lt;img src=&#34;https://jenkinsci.github.io/kubernetes-operator/img/jenkins.png&#34; alt=&#34;jenkins&#34; /&gt;&lt;/p&gt;
</description>
</item>
<item>
<title>Docs: Configuration</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/configuration/</link>
<pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
<guid>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/configuration/</guid>
<description>
&lt;h2 id=&#34;configure-seed-jobs-and-pipelines&#34;&gt;Configure Seed Jobs and Pipelines&lt;/h2&gt;
&lt;p&gt;Jenkins operator uses &lt;a href=&#34;https://github.com/jenkinsci/job-dsl-plugin&#34; target=&#34;_blank&#34;&gt;job-dsl&lt;/a&gt; and &lt;a href=&#34;https://jenkinsci.github.io/kubernetes-credentials-provider-plugin/&#34; target=&#34;_blank&#34;&gt;kubernetes-credentials-provider&lt;/a&gt; plugins for configuring jobs
and deploy keys.&lt;/p&gt;
&lt;h2 id=&#34;prepare-job-definitions-and-pipelines&#34;&gt;Prepare job definitions and pipelines&lt;/h2&gt;
&lt;p&gt;First you have to prepare pipelines and job definition in your GitHub repository using the following structure:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cicd/
├── jobs
│   └── build.jenkins
└── pipelines
└── build.jenkins
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;cicd/jobs/build.jenkins&lt;/strong&gt; it&amp;rsquo;s a job definition:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/env groovy
pipelineJob(&#39;build-jenkins-operator&#39;) {
displayName(&#39;Build jenkins-operator&#39;)
definition {
cpsScm {
scm {
git {
remote {
url(&#39;https://github.com/jenkinsci/kubernetes-operator.git&#39;)
credentials(&#39;jenkins-operator&#39;)
}
branches(&#39;*/master&#39;)
}
}
scriptPath(&#39;cicd/pipelines/build.jenkins&#39;)
}
}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;cicd/jobs/build.jenkins&lt;/strong&gt; it&amp;rsquo;s an actual Jenkins pipeline:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/env groovy
def label = &amp;quot;build-jenkins-operator-${UUID.randomUUID().toString()}&amp;quot;
def home = &amp;quot;/home/jenkins&amp;quot;
def workspace = &amp;quot;${home}/workspace/build-jenkins-operator&amp;quot;
def workdir = &amp;quot;${workspace}/src/github.com/jenkinsci/kubernetes-operator/&amp;quot;
podTemplate(label: label,
containers: [
containerTemplate(name: &#39;jnlp&#39;, image: &#39;jenkins/jnlp-slave:alpine&#39;),
containerTemplate(name: &#39;go&#39;, image: &#39;golang:1-alpine&#39;, command: &#39;cat&#39;, ttyEnabled: true),
],
envVars: [
envVar(key: &#39;GOPATH&#39;, value: workspace),
],
) {
node(label) {
dir(workdir) {
stage(&#39;Init&#39;) {
timeout(time: 3, unit: &#39;MINUTES&#39;) {
checkout scm
}
container(&#39;go&#39;) {
sh &#39;apk --no-cache --update add make git gcc libc-dev&#39;
}
}
stage(&#39;Dep&#39;) {
container(&#39;go&#39;) {
sh &#39;make dep&#39;
}
}
stage(&#39;Test&#39;) {
container(&#39;go&#39;) {
sh &#39;make test&#39;
}
}
stage(&#39;Build&#39;) {
container(&#39;go&#39;) {
sh &#39;make build&#39;
}
}
}
}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;configure-seed-jobs&#34;&gt;Configure Seed Jobs&lt;/h2&gt;
&lt;p&gt;Jenkins Seed Jobs are configured using &lt;code&gt;Jenkins.spec.seedJobs&lt;/code&gt; section from your custom resource manifest:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apiVersion: jenkins.io/v1alpha2
kind: Jenkins
metadata:
name: example
spec:
seedJobs:
- id: jenkins-operator
targets: &amp;quot;cicd/jobs/*.jenkins&amp;quot;
description: &amp;quot;Jenkins Operator repository&amp;quot;
repositoryBranch: master
repositoryUrl: https://github.com/jenkinsci/kubernetes-operator.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;jenkins-operator&lt;/strong&gt; will automatically discover and configure all seed jobs.&lt;/p&gt;
&lt;p&gt;You can verify if deploy keys were successfully configured in Jenkins &lt;strong&gt;Credentials&lt;/strong&gt; tab.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/img/jenkins-credentials.png&#34; alt=&#34;jenkins&#34; /&gt;&lt;/p&gt;
&lt;p&gt;You can verify if your pipelines were successfully configured in Jenkins Seed Job console output.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/img/jenkins-seed.png&#34; alt=&#34;jenkins&#34; /&gt;&lt;/p&gt;
&lt;p&gt;If your GitHub repository is &lt;strong&gt;private&lt;/strong&gt; you have to configure SSH or username/password authentication.&lt;/p&gt;
&lt;h3 id=&#34;ssh-authentication&#34;&gt;SSH authentication&lt;/h3&gt;
&lt;h4 id=&#34;generate-ssh-keys&#34;&gt;Generate SSH Keys&lt;/h4&gt;
&lt;p&gt;There are two methods of SSH private key generation:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;$ openssl genrsa -out &amp;lt;filename&amp;gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2048&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;$ ssh-keygen -t rsa -b &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2048&lt;/span&gt;
$ ssh-keygen -p -f &amp;lt;filename&amp;gt; -m pem&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then copy content from generated file.&lt;/p&gt;
&lt;h4 id=&#34;public-key&#34;&gt;Public key&lt;/h4&gt;
&lt;p&gt;If you want to upload your public key to your Git server you need to extract it.&lt;/p&gt;
&lt;p&gt;If key was generated by &lt;code&gt;openssl&lt;/code&gt; then you need to type this to extract public key:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;$ openssl rsa -in &amp;lt;filename&amp;gt; -pubout &amp;gt; &amp;lt;filename&amp;gt;.pub&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If key was generated by &lt;code&gt;ssh-keygen&lt;/code&gt; the public key content is located in &lt;filename&gt;.pub and there is no need to extract public key&lt;/p&gt;
&lt;h4 id=&#34;configure-ssh-authentication&#34;&gt;Configure SSH authentication&lt;/h4&gt;
&lt;p&gt;Configure seed job like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apiVersion: jenkins.io/v1alpha2
kind: Jenkins
metadata:
name: example
spec:
seedJobs:
- id: jenkins-operator-ssh
credentialType: basicSSHUserPrivateKey
credentialID: k8s-ssh
targets: &amp;quot;cicd/jobs/*.jenkins&amp;quot;
description: &amp;quot;Jenkins Operator repository&amp;quot;
repositoryBranch: master
repositoryUrl: git@github.com:jenkinsci/kubernetes-operator.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and create Kubernetes Secret(name of secret should be the same from &lt;code&gt;credentialID&lt;/code&gt; field):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apiVersion: v1
kind: Secret
metadata:
name: k8s-ssh
stringData:
privateKey: |
-----BEGIN RSA PRIVATE KEY-----
MIIJKAIBAAKCAgEAxxDpleJjMCN5nusfW/AtBAZhx8UVVlhhhIKXvQ+dFODQIdzO
oDXybs1zVHWOj31zqbbJnsfsVZ9Uf3p9k6xpJ3WFY9b85WasqTDN1xmSd6swD4N8
...
username: github_user_name
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;username-password-authentication&#34;&gt;Username &amp;amp; password authentication&lt;/h3&gt;
&lt;p&gt;Configure seed job like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apiVersion: jenkins.io/v1alpha2
kind: Jenkins
metadata:
name: example
spec:
seedJobs:
- id: jenkins-operator-user-pass
credentialType: usernamePassword
credentialID: k8s-user-pass
targets: &amp;quot;cicd/jobs/*.jenkins&amp;quot;
description: &amp;quot;Jenkins Operator repository&amp;quot;
repositoryBranch: master
repositoryUrl: https://github.com/jenkinsci/kubernetes-operator.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and create Kubernetes Secret(name of secret should be the same from &lt;code&gt;credentialID&lt;/code&gt; field):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apiVersion: v1
kind: Secret
metadata:
name: k8s-user-pass
stringData:
username: github_user_name
password: password_or_token
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;pulling-docker-images-from-private-repositories&#34;&gt;Pulling Docker images from private repositories&lt;/h2&gt;
&lt;p&gt;To pull Docker Image from private repository you can use &lt;code&gt;imagePullSecrets&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Please follow the instructions on &lt;a href=&#34;https://kubernetes.io/docs/concepts/containers/images/?origin_team=T42NTAGHM#creating-a-secret-with-a-docker-config&#34; target=&#34;_blank&#34;&gt;creating a secret with a docker config&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;docker-hub-configuration&#34;&gt;Docker Hub Configuration&lt;/h3&gt;
&lt;p&gt;To use Docker Hub additional steps are required.&lt;/p&gt;
&lt;p&gt;Edit the previously created secret:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl -n &amp;lt;namespace&amp;gt; edit secret &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;.dockerconfigjson&lt;/code&gt; key&amp;rsquo;s value needs to be replaced with a modified version.&lt;/p&gt;
&lt;p&gt;After modifications it needs to be encoded as Base64 value before setting the &lt;code&gt;.dockerconfigjson&lt;/code&gt; key:q.&lt;/p&gt;
&lt;p&gt;Example config file to modify and use:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
&amp;quot;auths&amp;quot;:{
&amp;quot;https://index.docker.io/v1/&amp;quot;:{
&amp;quot;username&amp;quot;:&amp;quot;user&amp;quot;,
&amp;quot;password&amp;quot;:&amp;quot;password&amp;quot;,
&amp;quot;email&amp;quot;:&amp;quot;yourdockeremail@gmail.com&amp;quot;,
&amp;quot;auth&amp;quot;:&amp;quot;base64 of string user:password&amp;quot;
},
&amp;quot;auth.docker.io&amp;quot;:{
&amp;quot;username&amp;quot;:&amp;quot;user&amp;quot;,
&amp;quot;password&amp;quot;:&amp;quot;password&amp;quot;,
&amp;quot;email&amp;quot;:&amp;quot;yourdockeremail@gmail.com&amp;quot;,
&amp;quot;auth&amp;quot;:&amp;quot;base64 of string user:password&amp;quot;
},
&amp;quot;registry.docker.io&amp;quot;:{
&amp;quot;username&amp;quot;:&amp;quot;user&amp;quot;,
&amp;quot;password&amp;quot;:&amp;quot;password&amp;quot;,
&amp;quot;email&amp;quot;:&amp;quot;yourdockeremail@gmail.com&amp;quot;,
&amp;quot;auth&amp;quot;:&amp;quot;base64 of string user:password&amp;quot;
},
&amp;quot;docker.io&amp;quot;:{
&amp;quot;username&amp;quot;:&amp;quot;user&amp;quot;,
&amp;quot;password&amp;quot;:&amp;quot;password&amp;quot;,
&amp;quot;email&amp;quot;:&amp;quot;yourdockeremail@gmail.com&amp;quot;,
&amp;quot;auth&amp;quot;:&amp;quot;base64 of string user:password&amp;quot;
},
&amp;quot;https://registry-1.docker.io/v2/&amp;quot;: {
&amp;quot;username&amp;quot;:&amp;quot;user&amp;quot;,
&amp;quot;password&amp;quot;:&amp;quot;password&amp;quot;,
&amp;quot;email&amp;quot;:&amp;quot;yourdockeremail@gmail.com&amp;quot;,
&amp;quot;auth&amp;quot;:&amp;quot;base64 of string user:password&amp;quot;
},
&amp;quot;registry-1.docker.io/v2/&amp;quot;: {
&amp;quot;username&amp;quot;:&amp;quot;user&amp;quot;,
&amp;quot;password&amp;quot;:&amp;quot;password&amp;quot;,
&amp;quot;email&amp;quot;:&amp;quot;yourdockeremail@gmail.com&amp;quot;,
&amp;quot;auth&amp;quot;:&amp;quot;base64 of string user:password&amp;quot;
},
&amp;quot;registry-1.docker.io&amp;quot;: {
&amp;quot;username&amp;quot;:&amp;quot;user&amp;quot;,
&amp;quot;password&amp;quot;:&amp;quot;password&amp;quot;,
&amp;quot;email&amp;quot;:&amp;quot;yourdockeremail@gmail.com&amp;quot;,
&amp;quot;auth&amp;quot;:&amp;quot;base64 of string user:password&amp;quot;
},
&amp;quot;https://registry-1.docker.io&amp;quot;: {
&amp;quot;username&amp;quot;:&amp;quot;user&amp;quot;,
&amp;quot;password&amp;quot;:&amp;quot;password&amp;quot;,
&amp;quot;email&amp;quot;:&amp;quot;yourdockeremail@gmail.com&amp;quot;,
&amp;quot;auth&amp;quot;:&amp;quot;base64 of string user:password&amp;quot;
}
}
}
&lt;/code&gt;&lt;/pre&gt;
</description>
</item>
<item>
<title>Docs: Customization</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/customization/</link>
<pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
<guid>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/customization/</guid>
<description>
&lt;p&gt;Jenkins can be customized using groovy scripts or &lt;a href=&#34;https://github.com/jenkinsci/configuration-as-code-plugin&#34; target=&#34;_blank&#34;&gt;configuration as code plugin&lt;/a&gt;.
By using &lt;a href=&#34;https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/&#34; target=&#34;_blank&#34;&gt;ConfigMap&lt;/a&gt; you can create own &lt;strong&gt;Jenkins&lt;/strong&gt; customized configuration.
Then you must reference the &lt;em&gt;ConfigMap&lt;/em&gt; in &lt;strong&gt;Jenkins&lt;/strong&gt; pod customization file in &lt;code&gt;spec.groovyScripts&lt;/code&gt; or &lt;code&gt;spec.configurationAsCode&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For example create &lt;em&gt;ConfigMap&lt;/em&gt; with name &lt;code&gt;jenkins-operator-user-configuration&lt;/code&gt;. Then, modify the &lt;strong&gt;Jenkins&lt;/strong&gt; manifest to look like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.io/v1alpha2&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;example&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configurationAsCode&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configurations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-operator-user-configuration&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;groovyScripts&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configurations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-operator-user-configuration&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here is example of &lt;code&gt;jenkins-operator-user-configuration&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ConfigMap&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-operator-user-configuration&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;data&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;-configure-theme.groovy&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; import jenkins.*&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;import&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.model.*&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;import&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;hudson.*&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;import&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;hudson.model.*&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;import&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;org.jenkinsci.plugins.simpletheme.ThemeElement&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;import&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;org.jenkinsci.plugins.simpletheme.CssTextThemeElement&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;import&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;org.jenkinsci.plugins.simpletheme.CssUrlThemeElement&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;=&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins.getInstance()&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;def&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;decorator&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;=&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins.instance.getDescriptorByType(org.codefirst.SimpleThemeDecorator.class)&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;List&amp;lt;ThemeElement&amp;gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configElements&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;=&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;new&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ArrayList&amp;lt;&amp;gt;();&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configElements.add(new&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;CssTextThemeElement(&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;DEFAULT&amp;#34;&lt;/span&gt;));&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configElements.add(new&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;CssUrlThemeElement(&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://cdn.rawgit.com/afonsof/jenkins-material-theme/gh-pages/dist/material-light-green.css&amp;#34;&lt;/span&gt;));&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;decorator.setElements(configElements);&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;decorator.save();&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.save()&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;-system-message.yaml&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; jenkins:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;systemMessage&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Configuration as Code integration works!!!&amp;#34;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;*.groovy is Groovy script configuration&lt;/li&gt;
&lt;li&gt;*.yaml is configuration as code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to correct your configuration you can edit it while &lt;strong&gt;jenkins-operator&lt;/strong&gt; is running.
Jenkins will reconcile and apply new configuration.&lt;/p&gt;
&lt;h3 id=&#34;using-secrets-inside-groovy-script&#34;&gt;Using secrets inside Groovy script&lt;/h3&gt;
&lt;p&gt;If you configured &lt;code&gt;spec.groovyScripts.secret.name&lt;/code&gt;, then this secret is available to use inside map Groovy scripts.
The secrets are loaded to &lt;code&gt;secrets&lt;/code&gt; map.&lt;/p&gt;
&lt;p&gt;Create a &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/&#34; target=&#34;_blank&#34;&gt;secret&lt;/a&gt; with for eg. &lt;code&gt;jenkins-conf-secrets&lt;/code&gt; name.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Secret&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;type&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Opaque&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-conf-secrets&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;namespace&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;default&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;data&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;SYSTEM_MESSAGE&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;SGVsbG8gd29ybGQ=&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then modify the &lt;strong&gt;Jenkins&lt;/strong&gt; pod manifest by changing &lt;code&gt;spec.groovyScripts.secret.name&lt;/code&gt; to &lt;code&gt;jenkins-conf-secrets&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.io/v1alpha2&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;example&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configurationAsCode&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configurations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-operator-user-configuration&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;secret&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-conf-secrets&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;groovyScripts&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configurations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-operator-user-configuration&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;secret&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-conf-secrets&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now you can test that the secret is mounted by applying this ConfigMap for Groovy script:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ConfigMap&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-operator-user-configuration&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;data&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;-system-message.groovy&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; import jenkins.*&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;import&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.model.*&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;import&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;hudson.*&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;import&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;hudson.model.*&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;=&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins.getInstance()&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.setSystemMessage(secrets&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;SYSTEM_MESSAGE&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;)&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.save()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Or by applying configuration as code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ConfigMap&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-operator-user-configuration&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;data&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;-system-message.yaml&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; jenkins:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;systemMessage&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;${SYSTEM_MESSAGE}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After this, you should see the &lt;code&gt;Hello world&lt;/code&gt; system message at &lt;strong&gt;Jenkins&lt;/strong&gt; homepage.&lt;/p&gt;
&lt;h2 id=&#34;install-plugins&#34;&gt;Install Plugins&lt;/h2&gt;
&lt;p&gt;Edit CR under &lt;code&gt;spec.master.plugins&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apiVersion: jenkins.io/v1alpha2
kind: Jenkins
metadata:
name: example
spec:
master:
plugins:
- name: simple-theme-plugin
version: 0.5.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Under &lt;code&gt;spec.master.basePlugins&lt;/code&gt; you can find plugins for valid &lt;strong&gt;jenkins-operator&lt;/strong&gt; work:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.io/v1alpha2&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;example&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;master&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;basePlugins&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;kubernetes&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;version&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1.18&lt;/span&gt;.&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;workflow-job&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;version&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2.34&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;workflow-aggregator&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;version&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2.6&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;git&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;version&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;3.12&lt;/span&gt;.&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;job-dsl&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;version&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;1.76&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configuration-as-code&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;version&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;1.29&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configuration-as-code-support&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;version&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;1.19&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;kubernetes-credentials-provider&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;version&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0.12&lt;/span&gt;.&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can change version of them.&lt;/p&gt;
&lt;p&gt;Then &lt;strong&gt;jenkins-operator&lt;/strong&gt; will automatically install plugins after Jenkins master pod restart.&lt;/p&gt;
</description>
</item>
<item>
<title>Docs: AKS</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/aks/</link>
<pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
<guid>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/aks/</guid>
<description>
&lt;p&gt;Azure AKS managed Kubernetes service adds to every pod the following envs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;KUBERNETES_PORT_443_TCP_ADDR&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;value&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;KUBERNETES_PORT&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;value&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;tcp&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;//&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;KUBERNETES_PORT_443_TCP&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;value&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;tcp&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;//&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;KUBERNETES_SERVICE_HOST&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;value&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The operator is aware of it and omits these envs when checking if Jenkins pod envs have been changed. It prevents
restart Jenkins pod over and over again.&lt;/p&gt;
</description>
</item>
<item>
<title>Docs: Configure backup and restore</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/configure-backup-and-restore/</link>
<pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
<guid>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/configure-backup-and-restore/</guid>
<description>
&lt;p&gt;Backup and restore is done by container sidecar.&lt;/p&gt;
&lt;h3 id=&#34;pvc&#34;&gt;PVC&lt;/h3&gt;
&lt;h4 id=&#34;create-pvc&#34;&gt;Create PVC&lt;/h4&gt;
&lt;p&gt;Save to file pvc.yaml:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;PersistentVolumeClaim&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&amp;lt;pvc_name&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; namespace: &amp;lt;namesapce&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;accessModes&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ReadWriteOnce&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;resources&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;requests&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;storage&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;500Gi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Run command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;$ kubectl -n &amp;lt;namesapce&amp;gt; create -f pvc.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;configure-jenkins-cr&#34;&gt;Configure Jenkins CR&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.io/v1alpha2&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&amp;lt;cr_name&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; namespace: &amp;lt;namespace&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;master&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;securityContext&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;runAsUser&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1000&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;fsGroup&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1000&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;containers&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-master&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;image&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins/jenkins&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;lts&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;backup&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# container responsible for backup and restore&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;env&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;BACKUP_DIR&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;value&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;/backup&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;JENKINS_HOME&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;value&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;/jenkins-home&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;BACKUP_COUNT&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;value&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# keep only the 2 most recent backups&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;image&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;virtuslab/jenkins-operator-backup-pvc&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;v0.&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0.6&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# look at backup/pvc directory&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;imagePullPolicy&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;IfNotPresent&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;volumeMounts&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;mountPath&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;/jenkins-home&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Jenkins home volume&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-home&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;mountPath&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;/backup&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# backup volume&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;backup&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;volumes&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;backup&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# PVC volume where backups will be stored&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;persistentVolumeClaim&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;claimName&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&amp;lt;pvc_name&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; backup:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;containerName&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;backup&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# container name is responsible for backup&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;action&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;exec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;command&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;/home/user/bin/backup.sh&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# this command is invoked on &amp;#34;backup&amp;#34; container to make backup, for example /home/user/bin/backup.sh &amp;lt;backup_number&amp;gt;, &amp;lt;backup_number&amp;gt; is passed by operator&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;interval&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;30&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# how often make backup in seconds&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;makeBackupBeforePodDeletion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# make backup before pod deletion&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;restore&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;containerName&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;backup&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# container name is responsible for restore backup&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;action&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;exec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;command&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;/home/user/bin/restore.sh&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# this command is invoked on &amp;#34;backup&amp;#34; container to make restore backup, for example /home/user/bin/restore.sh &amp;lt;backup_number&amp;gt;, &amp;lt;backup_number&amp;gt; is passed by operator&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#recoveryOnce: &amp;lt;backup_number&amp;gt; # if want to restore specific backup configure this field and then Jenkins will be restarted and desired backup will be restored&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
</description>
</item>
<item>
<title>Docs: Migration from v0.1.1</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/migration/</link>
<pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
<guid>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/migration/</guid>
<description>
&lt;h3 id=&#34;added-seed-job-agent&#34;&gt;Added seed job agent&lt;/h3&gt;
&lt;p&gt;Now seed jobs are not built by master executors, but by dedicated agent deployed into Kubernetes. We disabled master executors for security reasons.&lt;/p&gt;
&lt;h3 id=&#34;apply-jenkins-configuration-via-groovy-scripts-instead-of-jenkins-jobs&#34;&gt;Apply Jenkins configuration via Groovy scripts instead of Jenkins jobs&lt;/h3&gt;
&lt;p&gt;We have removed hardcoded configuration by &lt;strong&gt;Jenkins&lt;/strong&gt; jobs.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;v0.1.1&lt;/code&gt; &lt;strong&gt;jenkins-operator&lt;/strong&gt; configuration was stored in &lt;code&gt;jenkins-operator-user-configuration-&amp;lt;cr_name&amp;gt;&lt;/code&gt;
If you want to use &lt;code&gt;v0.2.0&lt;/code&gt; or newer you must simply write refer to old ConfigMap by modifying CR, for example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins.io/v1alpha2&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Jenkins&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;example&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configurationAsCode&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configurations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-operator-user-configuration-&amp;lt;cr_name&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; groovyScripts:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;configurations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;jenkins-operator-user-configuration-&amp;lt;cr_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Jenkins&lt;/strong&gt; configuration jobs (&lt;em&gt;Configure Seed Jobs&lt;/em&gt;, &lt;em&gt;jenkins-operator-base-configuration&lt;/em&gt;, &lt;em&gt;jenkins-operator-user-configuration&lt;/em&gt;) have been removed from &lt;strong&gt;Jenkins&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;v0.1.1&lt;/code&gt; you can see if configuration failed or successfully updated in &lt;strong&gt;Jenkins&lt;/strong&gt; UI (job build logs).
Now, when Jenkins configuration jobs are removed, you must use this command to see if configuration was failed.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;$ kubectl -n logs deployment/jenkins-operator&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
</description>
</item>
<item>
<title>Docs: Diagnostics</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/diagnostics/</link>
<pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
<guid>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/diagnostics/</guid>
<description>
&lt;p&gt;Turn on debug in &lt;strong&gt;jenkins-operator&lt;/strong&gt; deployment:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;sed -i &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;s|\(args:\).*|\1\ [&amp;#34;--debug&amp;#34;\]|&amp;#39;&lt;/span&gt; deploy/operator.yaml
kubectl apply -f deploy/operator.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Watch Kubernetes events:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl get events --sort-by&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.lastTimestamp}&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Verify Jenkins master logs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl logs -f jenkins-&amp;lt;cr_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Verify jenkins-operator logs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl logs deployment/jenkins-operator&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;
&lt;p&gt;Delete Jenkins master pod and wait for the new one to come up:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl delete pod jenkins-&amp;lt;cr_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
</description>
</item>
<item>
<title>Docs: Scheme</title>
<link>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/scheme/</link>
<pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
<guid>https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.2.0/scheme/</guid>
<description>
&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;
&lt;p&gt;This document contains API scheme for &lt;code&gt;jenkins-operator&lt;/code&gt; manifest&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;#jenkins.io&#34;&gt;jenkins.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;jenkins.io&#34;&gt;jenkins.io&lt;/h2&gt;
&lt;p&gt;
&lt;p&gt;Package v1alpha2 contains API Schema definitions for the jenkins.io v1alpha2 API group&lt;/p&gt;
&lt;/p&gt;
Resource Types:
&lt;ul&gt;&lt;li&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Jenkins&#34;&gt;Jenkins&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Jenkins&#34;&gt;Jenkins
&lt;/h3&gt;
&lt;p&gt;
&lt;p&gt;Jenkins is the Schema for the jenkins API&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;apiVersion&lt;/code&gt;&lt;/br&gt;
string&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;
jenkins.io/v1alpha2
&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;kind&lt;/code&gt;&lt;/br&gt;
string
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Jenkins&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;metadata&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#objectmeta-v1-meta&#34;&gt;
Kubernetes meta/v1.ObjectMeta
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
Refer to the Kubernetes API documentation for the fields of the
&lt;code&gt;metadata&lt;/code&gt; field.
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;spec&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsSpec&#34;&gt;
JenkinsSpec
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Spec defines the desired state of the Jenkins&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;master&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsMaster&#34;&gt;
JenkinsMaster
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Master represents Jenkins master pod properties and Jenkins plugins.
Every single change here requires a pod restart.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;seedJobs&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob&#34;&gt;
[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;SeedJobs defines list of Jenkins Seed Job configurations
More info: &lt;a href=&#34;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-seed-jobs-and-pipelines&#34;&gt;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-seed-jobs-and-pipelines&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;service&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service&#34;&gt;
Service
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Service is Kubernetes service of Jenkins master HTTP pod
Defaults to :
port: 8080
type: ClusterIP&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;slaveService&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service&#34;&gt;
Service
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Service is Kubernetes service of Jenkins slave pods
Defaults to :
port: 50000
type: ClusterIP&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;backup&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Backup&#34;&gt;
Backup
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Backup defines configuration of Jenkins backup
More info: &lt;a href=&#34;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-backup-and-restore&#34;&gt;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-backup-and-restore&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;restore&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Restore&#34;&gt;
Restore
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Backup defines configuration of Jenkins backup restore
More info: &lt;a href=&#34;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-backup-and-restore&#34;&gt;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-backup-and-restore&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;status&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsStatus&#34;&gt;
JenkinsStatus
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Status defines the observed state of Jenkins&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Backup&#34;&gt;Backup
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec&#34;&gt;JenkinsSpec&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Backup defines configuration of Jenkins backup&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;containerName&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;ContainerName is the container name responsible for backup operation&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;action&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Handler&#34;&gt;
Handler
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Action defines action which performs backup in backup container sidecar&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;interval&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
uint64
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Interval tells how often make backup in seconds
Defaults to 30.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;makeBackupBeforePodDeletion&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
bool
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;MakeBackupBeforePodDeletion tells operator to make backup before Jenkins master pod deletion&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Build&#34;&gt;Build
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsStatus&#34;&gt;JenkinsStatus&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Build defines Jenkins Build status with corresponding metadata&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;jobName&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;JobName is the Jenkins job name&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;hash&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Hash is the unique data identifier used in build&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;number&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
int64
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Number is the Jenkins build number&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;status&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.BuildStatus&#34;&gt;
BuildStatus
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Status is the status of Jenkins build&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;retries&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
int
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Retires is the amount of Jenkins job build retries&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;createTime&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#time-v1-meta&#34;&gt;
Kubernetes meta/v1.Time
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;CreateTime is the time when the first build has been created&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;lastUpdateTime&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#time-v1-meta&#34;&gt;
Kubernetes meta/v1.Time
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;LastUpdateTime is the last update status time&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.BuildStatus&#34;&gt;BuildStatus
(&lt;code&gt;string&lt;/code&gt; alias)&lt;/p&gt;&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Build&#34;&gt;Build&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;BuildStatus defines type of Jenkins build job status&lt;/p&gt;
&lt;/p&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Container&#34;&gt;Container
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsMaster&#34;&gt;JenkinsMaster&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Container defines Kubernetes container attributes&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;name&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Name of the container specified as a DNS_LABEL.
Each container in a pod must have a unique name (DNS_LABEL).&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;image&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Docker image name.
More info: &lt;a href=&#34;https://kubernetes.io/docs/concepts/containers/images&#34;&gt;https://kubernetes.io/docs/concepts/containers/images&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;imagePullPolicy&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#pullpolicy-v1-core&#34;&gt;
Kubernetes core/v1.PullPolicy
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Image pull policy.
One of Always, Never, IfNotPresent.
Defaults to Always.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;resources&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#resourcerequirements-v1-core&#34;&gt;
Kubernetes core/v1.ResourceRequirements
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Compute Resources required by this container.
More info: &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/&#34;&gt;https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;command&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
[]string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Entrypoint array. Not executed within a shell.
The docker image&amp;rsquo;s ENTRYPOINT is used if this is not provided.
Variable references $(VAR_NAME) are expanded using the container&amp;rsquo;s environment. If a variable
cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
regardless of whether the variable exists or not.
More info: &lt;a href=&#34;https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell&#34;&gt;https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;args&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
[]string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Arguments to the entrypoint.
The docker image&amp;rsquo;s CMD is used if this is not provided.
Variable references $(VAR_NAME) are expanded using the container&amp;rsquo;s environment. If a variable
cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
regardless of whether the variable exists or not.
More info: &lt;a href=&#34;https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell&#34;&gt;https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;workingDir&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Container&amp;rsquo;s working directory.
If not specified, the container runtime&amp;rsquo;s default will be used, which
might be configured in the container image.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;ports&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#containerport-v1-core&#34;&gt;
[]Kubernetes core/v1.ContainerPort
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;List of ports to expose from the container. Exposing a port here gives
the system additional information about the network connections a
container uses, but is primarily informational. Not specifying a port here
DOES NOT prevent that port from being exposed. Any port which is
listening on the default &amp;ldquo;0.0.0.0&amp;rdquo; address inside a container will be
accessible from the network.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;envFrom&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#envfromsource-v1-core&#34;&gt;
[]Kubernetes core/v1.EnvFromSource
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;List of sources to populate environment variables in the container.
The keys defined within a source must be a C_IDENTIFIER. All invalid keys
will be reported as an event when the container is starting. When a key exists in multiple
sources, the value associated with the last source will take precedence.
Values defined by an Env with a duplicate key will take precedence.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;env&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#envvar-v1-core&#34;&gt;
[]Kubernetes core/v1.EnvVar
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;List of environment variables to set in the container.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;volumeMounts&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#volumemount-v1-core&#34;&gt;
[]Kubernetes core/v1.VolumeMount
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Pod volumes to mount into the container&amp;rsquo;s filesystem.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;livenessProbe&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#probe-v1-core&#34;&gt;
Kubernetes core/v1.Probe
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Periodic probe of container liveness.
Container will be restarted if the probe fails.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;readinessProbe&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#probe-v1-core&#34;&gt;
Kubernetes core/v1.Probe
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Periodic probe of container service readiness.
Container will be removed from service endpoints if the probe fails.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;lifecycle&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#lifecycle-v1-core&#34;&gt;
Kubernetes core/v1.Lifecycle
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Actions that the management system should take in response to container lifecycle events.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;securityContext&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#securitycontext-v1-core&#34;&gt;
Kubernetes core/v1.SecurityContext
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Security options the pod should run with.
More info: &lt;a href=&#34;https://kubernetes.io/docs/concepts/policy/security-context/&#34;&gt;https://kubernetes.io/docs/concepts/policy/security-context/&lt;/a&gt;
More info: &lt;a href=&#34;https://kubernetes.io/docs/tasks/configure-pod-container/security-context/&#34;&gt;https://kubernetes.io/docs/tasks/configure-pod-container/security-context/&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Handler&#34;&gt;Handler
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Backup&#34;&gt;Backup&lt;/a&gt;,
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Restore&#34;&gt;Restore&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Handler defines a specific action that should be taken&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;exec&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#execaction-v1-core&#34;&gt;
Kubernetes core/v1.ExecAction
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Exec specifies the action to take.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsCredentialType&#34;&gt;JenkinsCredentialType
(&lt;code&gt;string&lt;/code&gt; alias)&lt;/p&gt;&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.SeedJob&#34;&gt;SeedJob&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;JenkinsCredentialType defines type of Jenkins credential used to seed job mechanism&lt;/p&gt;
&lt;/p&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsMaster&#34;&gt;JenkinsMaster
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec&#34;&gt;JenkinsSpec&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;JenkinsMaster defines the Jenkins master pod attributes and plugins,
every single change requires a Jenkins master pod restart&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;masterAnnotations&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
map[string]string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Annotations is an unstructured key value map stored with a resource that may be
set by external tools to store and retrieve arbitrary metadata. They are not
queryable and should be preserved when modifying objects.
More info: &lt;a href=&#34;http://kubernetes.io/docs/user-guide/annotations&#34;&gt;http://kubernetes.io/docs/user-guide/annotations&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;nodeSelector&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
map[string]string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;NodeSelector is a selector which must be true for the pod to fit on a node.
Selector which must match a node&amp;rsquo;s labels for the pod to be scheduled on that node.
More info: &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/assign-pod-node/&#34;&gt;https://kubernetes.io/docs/concepts/configuration/assign-pod-node/&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;securityContext&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#podsecuritycontext-v1-core&#34;&gt;
Kubernetes core/v1.PodSecurityContext
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;SecurityContext that applies to all the containers of the Jenkins
Master. As per kubernetes specification, it can be overridden
for each container individually.
Defaults to:
runAsUser: 1000
fsGroup: 1000&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;containers&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Container&#34;&gt;
[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Container
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;List of containers belonging to the pod.
Containers cannot currently be added or removed.
There must be at least one container in a Pod.
Defaults to:
- image: jenkins/jenkins:lts
imagePullPolicy: Always
livenessProbe:
failureThreshold: 12
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: 80
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: jenkins-master
readinessProbe:
failureThreshold: 3
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
limits:
cpu: 1500m
memory: 3Gi
requests:
cpu: &amp;ldquo;1&amp;rdquo;
memory: 600Mi&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;volumes&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#volume-v1-core&#34;&gt;
[]Kubernetes core/v1.Volume
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;List of volumes that can be mounted by containers belonging to the pod.
More info: &lt;a href=&#34;https://kubernetes.io/docs/concepts/storage/volumes&#34;&gt;https://kubernetes.io/docs/concepts/storage/volumes&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;basePlugins&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin&#34;&gt;
[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;BasePlugins contains plugins required by operator
Defaults to :
- name: kubernetes
version: 1.15.7
- name: workflow-job
version: &amp;ldquo;2.32&amp;rdquo;
- name: workflow-aggregator
version: &amp;ldquo;2.6&amp;rdquo;
- name: git
version: 3.10.0
- name: job-dsl
version: &amp;ldquo;1.74&amp;rdquo;
- name: configuration-as-code
version: &amp;ldquo;1.19&amp;rdquo;
- name: configuration-as-code-support
version: &amp;ldquo;1.19&amp;rdquo;
- name: kubernetes-credentials-provider
version: 0.12.1&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;plugins&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin&#34;&gt;
[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Plugins contains plugins required by user&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsSpec&#34;&gt;JenkinsSpec
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Jenkins&#34;&gt;Jenkins&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;JenkinsSpec defines the desired state of the Jenkins&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;master&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsMaster&#34;&gt;
JenkinsMaster
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Master represents Jenkins master pod properties and Jenkins plugins.
Every single change here requires a pod restart.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;seedJobs&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob&#34;&gt;
[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;SeedJobs defines list of Jenkins Seed Job configurations
More info: &lt;a href=&#34;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-seed-jobs-and-pipelines&#34;&gt;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-seed-jobs-and-pipelines&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;service&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service&#34;&gt;
Service
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Service is Kubernetes service of Jenkins master HTTP pod
Defaults to :
port: 8080
type: ClusterIP&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;slaveService&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service&#34;&gt;
Service
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Service is Kubernetes service of Jenkins slave pods
Defaults to :
port: 50000
type: ClusterIP&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;backup&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Backup&#34;&gt;
Backup
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Backup defines configuration of Jenkins backup
More info: &lt;a href=&#34;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-backup-and-restore&#34;&gt;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-backup-and-restore&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;restore&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Restore&#34;&gt;
Restore
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Backup defines configuration of Jenkins backup restore
More info: &lt;a href=&#34;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-backup-and-restore&#34;&gt;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-backup-and-restore&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsStatus&#34;&gt;JenkinsStatus
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Jenkins&#34;&gt;Jenkins&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;JenkinsStatus defines the observed state of Jenkins&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;operatorVersion&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;OperatorVersion is the operator version which manages this CR&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;provisionStartTime&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#time-v1-meta&#34;&gt;
Kubernetes meta/v1.Time
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;ProvisionStartTime is a time when Jenkins master pod has been created&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;baseConfigurationCompletedTime&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#time-v1-meta&#34;&gt;
Kubernetes meta/v1.Time
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;BaseConfigurationCompletedTime is a time when Jenkins base configuration phase has been completed&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;userConfigurationCompletedTime&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#time-v1-meta&#34;&gt;
Kubernetes meta/v1.Time
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;UserConfigurationCompletedTime is a time when Jenkins user configuration phase has been completed&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;builds&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Build&#34;&gt;
[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Build
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Builds contains Jenkins builds statues&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;restoredBackup&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
uint64
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;RestoredBackup is the restored backup number after Jenkins master pod restart&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;lastBackup&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
uint64
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;LastBackup is the latest backup number&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;pendingBackup&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
uint64
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;PendingBackup is the pending backup number&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;backupDoneBeforePodDeletion&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
bool
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;BackupDoneBeforePodDeletion tells if backup before pod deletion has been made&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;userAndPasswordHash&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;UserAndPasswordHash is a SHA256 hash made from user and password&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;createdSeedJobs&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
[]string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;CreatedSeedJobs contains list of seed job id already created in Jenkins&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin&#34;&gt;Plugin
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsMaster&#34;&gt;JenkinsMaster&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Plugin defines Jenkins plugin&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;name&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Name is the name of Jenkins plugin&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;version&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Version is the version of Jenkins plugin&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Restore&#34;&gt;Restore
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec&#34;&gt;JenkinsSpec&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Restore defines configuration of Jenkins backup restore operation&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;containerName&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;ContainerName is the container name responsible for restore backup operation&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;action&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Handler&#34;&gt;
Handler
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Action defines action which performs restore backup in restore container sidecar&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;recoveryOnce&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
uint64
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;RecoveryOnce if want to restore specific backup set this field and then Jenkins will be restarted and desired backup will be restored&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob&#34;&gt;SeedJob
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec&#34;&gt;JenkinsSpec&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;SeedJob defines configuration for seed job
More info: &lt;a href=&#34;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-seed-jobs-and-pipelines&#34;&gt;https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-seed-jobs-and-pipelines&lt;/a&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;id&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;ID is the unique seed job name&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;credentialID&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;CredentialID is the Kubernetes secret name which stores repository access credentials&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;description&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Description is the description of the seed job&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;targets&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Targets is the repository path where are seed job definitions&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;repositoryBranch&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;RepositoryBranch is the repository branch where are seed job definitions&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;repositoryUrl&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;RepositoryURL is the repository access URL. Can be SSH or HTTPS.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;credentialType&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsCredentialType&#34;&gt;
JenkinsCredentialType
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;JenkinsCredentialType is the &lt;a href=&#34;https://jenkinsci.github.io/kubernetes-credentials-provider-plugin/&#34;&gt;https://jenkinsci.github.io/kubernetes-credentials-provider-plugin/&lt;/a&gt; credential type&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service&#34;&gt;Service
&lt;/h3&gt;
&lt;p&gt;
(&lt;em&gt;Appears on:&lt;/em&gt;
&lt;a href=&#34;#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec&#34;&gt;JenkinsSpec&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Service defines Kubernetes service attributes&lt;/p&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;annotations&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
map[string]string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Annotations is an unstructured key value map stored with a resource that may be
set by external tools to store and retrieve arbitrary metadata. They are not
queryable and should be preserved when modifying objects.
More info: &lt;a href=&#34;http://kubernetes.io/docs/user-guide/annotations&#34;&gt;http://kubernetes.io/docs/user-guide/annotations&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;labels&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
map[string]string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Route service traffic to pods with label keys and values matching this
selector. If empty or not present, the service is assumed to have an
external process managing its endpoints, which Kubernetes will not
modify. Only applies to types ClusterIP, NodePort, and LoadBalancer.
Ignored if type is ExternalName.
More info: &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/service/&#34;&gt;https://kubernetes.io/docs/concepts/services-networking/service/&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;type&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#servicetype-v1-core&#34;&gt;
Kubernetes core/v1.ServiceType
&lt;/a&gt;
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Type determines how the Service is exposed. Defaults to ClusterIP. Valid
options are ExternalName, ClusterIP, NodePort, and LoadBalancer.
&amp;ldquo;ExternalName&amp;rdquo; maps to the specified externalName.
&amp;ldquo;ClusterIP&amp;rdquo; allocates a cluster-internal IP address for load-balancing to
endpoints. Endpoints are determined by the selector or if that is not
specified, by manual construction of an Endpoints object. If clusterIP is
&amp;ldquo;None&amp;rdquo;, no virtual IP is allocated and the endpoints are published as a
set of endpoints rather than a stable IP.
&amp;ldquo;NodePort&amp;rdquo; builds on ClusterIP and allocates a port on every node which
routes to the clusterIP.
&amp;ldquo;LoadBalancer&amp;rdquo; builds on NodePort and creates an
external load-balancer (if supported in the current cloud) which routes
to the clusterIP.
More info: &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types&#34;&gt;https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services&amp;mdash;service-types&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;port&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
int32
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;The port that are exposed by this service.
More info: &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies&#34;&gt;https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;nodePort&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
int32
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;The port on each node on which this service is exposed when type=NodePort or LoadBalancer.
Usually assigned by the system. If specified, it will be allocated to the service
if unused or else creation of the service will fail.
Default is to auto-allocate a port if the ServiceType of this Service requires one.
More info: &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport&#34;&gt;https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;loadBalancerSourceRanges&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
[]string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;If specified and supported by the platform, this will restrict traffic through the cloud-provider
load-balancer will be restricted to the specified client IPs. This field will be ignored if the
cloud-provider does not support the feature.&amp;rdquo;
More info: &lt;a href=&#34;https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/&#34;&gt;https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;loadBalancerIP&lt;/code&gt;&lt;/br&gt;
&lt;em&gt;
string
&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;(Optional)&lt;/em&gt;
&lt;p&gt;Only applies to Service Type: LoadBalancer
LoadBalancer will get created with the IP specified in this field.
This feature depends on whether the underlying cloud-provider supports specifying
the loadBalancerIP when a load balancer is created.
This field will be ignored if the cloud-provider does not support the feature.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;em&gt;
Generated with &lt;code&gt;gen-crd-api-reference-docs&lt;/code&gt;
on git commit &lt;code&gt;37e531a&lt;/code&gt;.
&lt;/em&gt;&lt;/p&gt;
</description>
</item>
</channel>
</rss>