From 14b0018a7f55e7a2aeecdd4d401dece942f52b4a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 16:06:10 +0200 Subject: [PATCH] Auto-updated docs (#663) Co-authored-by: Sig00rd --- docs/docs/developer-guide/index.html | 63 +- docs/docs/developer-guide/index.xml | 50 +- docs/docs/faq/index.html | 49 +- docs/docs/getting-started/index.html | 53 +- .../getting-started/latest/aks/index.html | 57 +- .../configuring-backup-and-restore/index.html | 47 +- .../index.html | 47 +- .../custom-backup-and-restore/index.html | 57 +- .../latest/customizing-jenkins/index.html | 47 +- .../latest/deploying-jenkins/index.html | 81 +- docs/docs/getting-started/latest/index.html | 97 +- docs/docs/getting-started/latest/index.xml | 564 +-- .../latest/installing-the-operator/index.html | 47 +- .../latest/notifications/index.html | 973 ----- .../latest/openshift/index.html | 47 +- .../getting-started/latest/schema/index.html | 47 +- .../index.html | 162 +- .../getting-started/v0.1.x/aks/index.html | 47 +- .../v0.1.x/configuration/index.html | 47 +- .../configure-backup-and-restore/index.html | 47 +- .../v0.1.x/customization/index.html | 47 +- .../v0.1.x/deploy-jenkins/index.html | 47 +- .../v0.1.x/diagnostics/index.html | 47 +- docs/docs/getting-started/v0.1.x/index.html | 49 +- .../index.html | 47 +- .../getting-started/v0.1.x/scheme/index.html | 47 +- .../getting-started/v0.2.x/aks/index.html | 47 +- .../v0.2.x/configuration/index.html | 47 +- .../configure-backup-and-restore/index.html | 47 +- .../custom-backup-and-restore/index.html | 47 +- .../v0.2.x/customization/index.html | 47 +- .../v0.2.x/deploy-jenkins/index.html | 47 +- .../v0.2.x/diagnostics/index.html | 47 +- docs/docs/getting-started/v0.2.x/index.html | 49 +- .../v0.2.x/migration/index.html | 47 +- .../getting-started/v0.2.x/schema/index.html | 47 +- .../getting-started/v0.3.x/aks/index.html | 47 +- .../v0.3.x/configuration/index.html | 47 +- .../configure-backup-and-restore/index.html | 47 +- .../custom-backup-and-restore/index.html | 47 +- .../v0.3.x/customization/index.html | 47 +- .../v0.3.x/deploy-jenkins/index.html | 47 +- .../v0.3.x/diagnostics/index.html | 47 +- docs/docs/getting-started/v0.3.x/index.html | 49 +- .../v0.3.x/migration/index.html | 47 +- .../v0.3.x/notifications/index.html | 47 +- .../getting-started/v0.3.x/schema/index.html | 47 +- .../getting-started/v0.4.x/aks/index.html | 47 +- .../v0.4.x/configuration/index.html | 47 +- .../configure-backup-and-restore/index.html | 47 +- .../custom-backup-and-restore/index.html | 47 +- .../v0.4.x/customization/index.html | 47 +- .../v0.4.x/deploy-jenkins/index.html | 47 +- .../v0.4.x/diagnostics/index.html | 47 +- docs/docs/getting-started/v0.4.x/index.html | 49 +- .../v0.4.x/notifications/index.html | 47 +- .../v0.4.x/openshift/index.html | 47 +- .../getting-started/v0.4.x/schema/index.html | 47 +- .../getting-started/v0.5.x/aks/index.html | 47 +- .../v0.5.x/configuration/index.html | 47 +- .../configure-backup-and-restore/index.html | 47 +- .../custom-backup-and-restore/index.html | 47 +- .../v0.5.x/customization/index.html | 47 +- .../v0.5.x/deploy-jenkins/index.html | 47 +- .../v0.5.x/diagnostics/index.html | 47 +- docs/docs/getting-started/v0.5.x/index.html | 53 +- .../v0.5.x/notifications/index.html | 47 +- .../v0.5.x/openshift/index.html | 47 +- .../getting-started/v0.5.x/schema/index.html | 47 +- .../architecture-and-design/index.html | 47 +- docs/docs/how-it-works/index.html | 49 +- .../jenkins-docker-images/index.html | 47 +- docs/docs/index.html | 79 +- docs/docs/index.xml | 3419 ++++++++++++++--- .../tools => security}/index.html | 355 +- docs/docs/security/index.xml | 23 + docs/docs/troubleshooting/index.html | 65 +- docs/docs/troubleshooting/index.xml | 2 +- docs/index.html | 2 +- docs/index.xml | 2 +- docs/sitemap.xml | 49 +- .../content/en/docs/Developer Guide/_index.md | 2 +- .../en/docs/Getting Started/latest/aks.md | 2 +- .../latest/custom-backup-and-restore.md | 2 +- .../latest/deploying-jenkins.md | 2 +- .../latest/separate-namespaces.md | 2 +- website/content/en/docs/Security/_index.md | 2 +- .../content/en/docs/Troubleshooting/_index.md | 2 +- website/package-lock.json | 60 +- website/package.json | 2 +- 90 files changed, 5698 insertions(+), 3463 deletions(-) delete mode 100644 docs/docs/getting-started/latest/notifications/index.html rename docs/docs/getting-started/latest/{security => separate-namespaces}/index.html (95%) rename docs/docs/{developer-guide/tools => security}/index.html (76%) create mode 100644 docs/docs/security/index.xml diff --git a/docs/docs/developer-guide/index.html b/docs/docs/developer-guide/index.html index ec0313cd..471cedce 100644 --- a/docs/docs/developer-guide/index.html +++ b/docs/docs/developer-guide/index.html @@ -26,7 +26,7 @@ " /> - + @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -835,7 +846,7 @@
  • operator_sdk version 1.3.0
  • git
  • go version 1.15.6
  • -
  • goimports, golint, checkmake and staticcheck
  • +
  • goimports, golint, checkmake and staticcheck
  • minikube version 1.21.0 (preferred Hypervisor - virtualbox) (automatically downloaded)
  • docker version 17.03+
  • @@ -1198,16 +1209,6 @@ make deploy-webhook -
    -
    - Tools -
    -

    Required tools for building and running Jenkins Operator -

    -
    - - - @@ -1234,7 +1235,7 @@ make deploy-webhook -
    Last modified October 1, 2021 +
    Last modified October 6, 2021
    diff --git a/docs/docs/developer-guide/index.xml b/docs/docs/developer-guide/index.xml index 53fd7915..69fe912d 100644 --- a/docs/docs/developer-guide/index.xml +++ b/docs/docs/developer-guide/index.xml @@ -4,7 +4,7 @@ https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/ Recent Hugo news from gohugo.io Hugo -- gohugo.io - Fri, 01 Oct 2021 00:00:00 +0000 + Wed, 06 Oct 2021 00:00:00 +0000 https://jenkinsci.github.io/kubernetes-operator/img/hugo.png GoHugo.io @@ -19,53 +19,5 @@ - - Docs: Tools - https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/tools/ - Mon, 05 Aug 2019 00:00:00 +0000 - - https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/tools/ - - - - - - - -<div class="pageinfo pageinfo-primary"> -<p>This document explains how to install the Go tools used by the development process.</p> - -</div> - - -<h2 id="configure-environment-variables">Configure environment variables</h2> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#204a87">export</span> <span style="color:#000">GOPATH</span><span style="color:#ce5c00;font-weight:bold">=</span>/home/go <span style="color:#8f5902;font-style:italic"># example value</span> -<span style="color:#204a87">export</span> <span style="color:#000">GOROOT</span><span style="color:#ce5c00;font-weight:bold">=</span>/usr/lib/go-1.12 <span style="color:#8f5902;font-style:italic"># example value</span> -<span style="color:#204a87">export</span> <span style="color:#000">PATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$GOPATH</span>/bin:<span style="color:#000">$PATH</span></code></pre></div> -<h2 id="goimports">goimports</h2> -<pre><code>go get golang.org/x/tools/cmd/goimports -cd $GOPATH/src/golang.org/x/tools/cmd/goimports -go build -go install</code></pre> -<h2 id="golint">golint</h2> -<pre><code>go get -u golang.org/x/lint/golint -cd $GOPATH/src/golang.org/x/lint/golint -go build -go install</code></pre> -<h2 id="checkmake">checkmake</h2> -<pre><code>go get github.com/mrtazz/checkmake -cd $GOPATH/src/github.com/mrtazz/checkmake -go build -go install</code></pre> -<h2 id="staticcheck">staticcheck</h2> -<pre><code>mkdir -p $GOPATH/src/github.com/dominikh/ -cd $GOPATH/src/github.com/dominikh/ -git clone https://github.com/dominikh/go-tools.git -cd $GOPATH/src/github.com/dominikh/go-tools/staticcheck -go build -go install</code></pre> - - - \ No newline at end of file diff --git a/docs/docs/faq/index.html b/docs/docs/faq/index.html index 2dc8cb0c..7a5659d8 100644 --- a/docs/docs/faq/index.html +++ b/docs/docs/faq/index.html @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -981,8 +992,6 @@ and kept in a VCS.

    - - diff --git a/docs/docs/getting-started/index.html b/docs/docs/getting-started/index.html index 7ad57d24..1e989117 100644 --- a/docs/docs/getting-started/index.html +++ b/docs/docs/getting-started/index.html @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -909,6 +920,8 @@ + +
    v0.2.x @@ -1003,10 +1016,6 @@ - - - - diff --git a/docs/docs/getting-started/latest/aks/index.html b/docs/docs/getting-started/latest/aks/index.html index b884b025..f6b601d4 100644 --- a/docs/docs/getting-started/latest/aks/index.html +++ b/docs/docs/getting-started/latest/aks/index.html @@ -25,13 +25,13 @@ " /> - - + + - - + + @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + @@ -833,7 +844,7 @@ restart of a Jenkins pod over and over again.

    -
    Last modified August 19, 2021 +
    Last modified October 6, 2021
    diff --git a/docs/docs/getting-started/latest/configuring-backup-and-restore/index.html b/docs/docs/getting-started/latest/configuring-backup-and-restore/index.html index 6342c13a..4e9b3640 100644 --- a/docs/docs/getting-started/latest/configuring-backup-and-restore/index.html +++ b/docs/docs/getting-started/latest/configuring-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/latest/configuring-seed-jobs-and-pipelines/index.html b/docs/docs/getting-started/latest/configuring-seed-jobs-and-pipelines/index.html index d78b3883..fc4e7af7 100644 --- a/docs/docs/getting-started/latest/configuring-seed-jobs-and-pipelines/index.html +++ b/docs/docs/getting-started/latest/configuring-seed-jobs-and-pipelines/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/latest/custom-backup-and-restore/index.html b/docs/docs/getting-started/latest/custom-backup-and-restore/index.html index f9501f8d..524df49f 100644 --- a/docs/docs/getting-started/latest/custom-backup-and-restore/index.html +++ b/docs/docs/getting-started/latest/custom-backup-and-restore/index.html @@ -25,13 +25,13 @@ " /> - - + + - - + + @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + @@ -1005,7 +1016,7 @@ the number of backups under control, e.g. Cloud Formation fragment:

    DaysAfterInitiation: 3
    -
    Last modified August 19, 2021 +
    Last modified October 6, 2021
    diff --git a/docs/docs/getting-started/latest/customizing-jenkins/index.html b/docs/docs/getting-started/latest/customizing-jenkins/index.html index 2f38ff53..7e2e49ea 100644 --- a/docs/docs/getting-started/latest/customizing-jenkins/index.html +++ b/docs/docs/getting-started/latest/customizing-jenkins/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/latest/deploying-jenkins/index.html b/docs/docs/getting-started/latest/deploying-jenkins/index.html index 91807650..0606081f 100644 --- a/docs/docs/getting-started/latest/deploying-jenkins/index.html +++ b/docs/docs/getting-started/latest/deploying-jenkins/index.html @@ -25,14 +25,14 @@ " /> - - + + - - - + + + @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + @@ -769,6 +780,8 @@ + +
    @@ -825,7 +833,7 @@ @@ -833,69 +841,17 @@
    -

    Security

    -
    Jenkins security and hardening out of the box
    +

    Separate namespaces for Jenkins and Operator

    +
    How to install Jenkins and Jenkins Operator in separate namespaces
    -

    By default Jenkins Operator performs an initial security hardening of Jenkins instance -via groovy scripts to prevent any security gaps.

    - -

    Jenkins Access Control

    - -

    Currently Jenkins Operator generates a username and random password and stores them in a Kubernetes Secret. -However any other authorization mechanisms are possible and can be done via groovy scripts or configuration as code plugin. -For more information take a look at getting-started#jenkins-customization.

    - -

    Any change to Security Realm or Authorization requires that user called jenkins-operator must have admin rights -because Jenkins Operator calls Jenkins API.

    - -

    Jenkins Hardening

    - -

    The list below describes all the default security setting configured by the Jenkins Operator:

    - -
      -
    • basic settings - use Mode.EXCLUSIVE - Jobs must specify that they want to run on master node
    • -
    • enable CSRF - Cross Site Request Forgery Protection is enabled
    • -
    • disable usage stats - Jenkins usage stats submitting is disabled
    • -
    • enable master access control - Slave to Master Access Control is enabled
    • -
    • disable old JNLP protocols - JNLP3-connect, JNLP2-connect and JNLP-connect are disabled
    • -
    • disable CLI - CLI access of /cli URL is disabled
    • -
    • configure kubernetes-plugin - secure configuration for Kubernetes plugin
    • -
    - -

    If you would like to dig a little bit into the code, take a look here.

    - -

    Jenkins API

    - -

    The Jenkins Operator generates and configures Basic Authentication token for Jenkins Go client -and stores it in a Kubernetes Secret.

    - -

    Kubernetes

    - -

    Kubernetes API permissions are limited by the following roles:

    - - - -

    Since Jenkins Operator must be able to grant permission for its deployed Jenkins masters -to spawn pods (the Jenkins Master role above), -the operator itself requires permission to create RBAC resources (the jenkins-operator role above).

    - -

    Deployed this way, any subject which may create a Pod (including a Jenkins job) may -assume the jenkins-operator role by using its’ ServiceAccount, create RBAC rules, and thus escape its granted permissions. -Any namespace to which the jenkins-operator is deployed must be considered to implicitly grant all -possible permissions to any subject which can create a Pod in that namespace.

    - -

    To mitigate this issue Jenkins Operator should be deployed in one namespace, and the Jenkins CR should be created in a separate namespace. -Section below contains instructions on how to do it.

    - -

    Setup Jenkins Operator and Jenkins in separate namespaces

    +

    Create namespaces

    You need to create two namespaces, for example we’ll call them jenkins for Jenkins and jenkins-operator for Jenkins Operator.

    $ kubectl create ns jenkins-operator
     $ kubectl create ns jenkins
    +

    Create necessary resources in Jenkins Operator namespace

    +

    Next, you need to install resources necessary for the Operator to work in the jenkins-operator namespace. To do that, copy the manifest you see below to jenkins-operator-rbac.yamlfile.

    ---
    @@ -1123,7 +1079,7 @@ copy the manifest you see below to jenkins-operator-rbac.yamlfile.<
     

    Now install the required resources in jenkins-operator namespace with:

    kubectl apply -n jenkins-operator -f jenkins-operator-rbac.yaml

    There’s only one thing left to install in jenkins-operator namespace, and that is the Operator itself. The manifest -below contains the Operator as defined in all-in-one manifest found in Installating the Operator +below contains the Operator as defined in all-in-one manifest found in Installing the Operator page, the only difference is that the one here sets WATCH_NAMESPACE to the jenkins namespace we created.

    Copy its content to jenkins-operator.yaml file.

    @@ -1185,7 +1141,9 @@ spec: there are two things left to do: creating necessary Role and RoleBinding for the Operator in jenkins namespace, and deploying actual Jenkins instance there.

    -

    Below you can find manifest with RBAC that need to be created in jenkins namespace. Copy its content to jenkins-ns-rbac.yaml file.

    +

    Create necessary resources in Jenkins namespace

    + +

    Below you can find manifest with RBAC that needs to be created in jenkins namespace. Copy its content to jenkins-ns-rbac.yaml file.

    apiVersion: rbac.authorization.k8s.io/v1
     kind: Role
     metadata:
    @@ -1427,13 +1385,9 @@ Copy it to jenkins-instance.yaml

    With this, you have just set up Jenkins Operator and Jenkins in separate namespaces. Now the Operator will run in its own namespace (jenkins-operator), watch for CRs in jenkins namespace, and deploy Jenkins there.

    -

    Report a Security Vulnerability

    - -

    If you find a vulnerability or any misconfiguration in Jenkins, please report it in the issues.

    - -
    Last modified August 20, 2021 +
    Last modified October 6, 2021
    diff --git a/docs/docs/getting-started/v0.1.x/aks/index.html b/docs/docs/getting-started/v0.1.x/aks/index.html index 5779afe7..c287442f 100644 --- a/docs/docs/getting-started/v0.1.x/aks/index.html +++ b/docs/docs/getting-started/v0.1.x/aks/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.1.x/configuration/index.html b/docs/docs/getting-started/v0.1.x/configuration/index.html index 857b875d..0258a06a 100644 --- a/docs/docs/getting-started/v0.1.x/configuration/index.html +++ b/docs/docs/getting-started/v0.1.x/configuration/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.1.x/configure-backup-and-restore/index.html b/docs/docs/getting-started/v0.1.x/configure-backup-and-restore/index.html index d0c76e2d..830fc098 100644 --- a/docs/docs/getting-started/v0.1.x/configure-backup-and-restore/index.html +++ b/docs/docs/getting-started/v0.1.x/configure-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.1.x/customization/index.html b/docs/docs/getting-started/v0.1.x/customization/index.html index 842596a5..9b3a37a6 100644 --- a/docs/docs/getting-started/v0.1.x/customization/index.html +++ b/docs/docs/getting-started/v0.1.x/customization/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.1.x/deploy-jenkins/index.html b/docs/docs/getting-started/v0.1.x/deploy-jenkins/index.html index c63aae60..1801f89b 100644 --- a/docs/docs/getting-started/v0.1.x/deploy-jenkins/index.html +++ b/docs/docs/getting-started/v0.1.x/deploy-jenkins/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.1.x/diagnostics/index.html b/docs/docs/getting-started/v0.1.x/diagnostics/index.html index fb5f9a7a..6040b8cb 100644 --- a/docs/docs/getting-started/v0.1.x/diagnostics/index.html +++ b/docs/docs/getting-started/v0.1.x/diagnostics/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.1.x/index.html b/docs/docs/getting-started/v0.1.x/index.html index 8b22fe06..299c4d40 100644 --- a/docs/docs/getting-started/v0.1.x/index.html +++ b/docs/docs/getting-started/v0.1.x/index.html @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -999,8 +1010,6 @@ - - diff --git a/docs/docs/getting-started/v0.1.x/migration-guide-v1alpha1-to-v1alpha2/index.html b/docs/docs/getting-started/v0.1.x/migration-guide-v1alpha1-to-v1alpha2/index.html index 22dcbc77..42a3b538 100644 --- a/docs/docs/getting-started/v0.1.x/migration-guide-v1alpha1-to-v1alpha2/index.html +++ b/docs/docs/getting-started/v0.1.x/migration-guide-v1alpha1-to-v1alpha2/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.1.x/scheme/index.html b/docs/docs/getting-started/v0.1.x/scheme/index.html index 5d67fe8e..abe4c4e8 100644 --- a/docs/docs/getting-started/v0.1.x/scheme/index.html +++ b/docs/docs/getting-started/v0.1.x/scheme/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.2.x/aks/index.html b/docs/docs/getting-started/v0.2.x/aks/index.html index 2bdcf3b6..528ca390 100644 --- a/docs/docs/getting-started/v0.2.x/aks/index.html +++ b/docs/docs/getting-started/v0.2.x/aks/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.2.x/configuration/index.html b/docs/docs/getting-started/v0.2.x/configuration/index.html index 251df601..d635e91c 100644 --- a/docs/docs/getting-started/v0.2.x/configuration/index.html +++ b/docs/docs/getting-started/v0.2.x/configuration/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.2.x/configure-backup-and-restore/index.html b/docs/docs/getting-started/v0.2.x/configure-backup-and-restore/index.html index b5dd9c80..d5887ae2 100644 --- a/docs/docs/getting-started/v0.2.x/configure-backup-and-restore/index.html +++ b/docs/docs/getting-started/v0.2.x/configure-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.2.x/custom-backup-and-restore/index.html b/docs/docs/getting-started/v0.2.x/custom-backup-and-restore/index.html index 59e3baca..2d802714 100644 --- a/docs/docs/getting-started/v0.2.x/custom-backup-and-restore/index.html +++ b/docs/docs/getting-started/v0.2.x/custom-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.2.x/customization/index.html b/docs/docs/getting-started/v0.2.x/customization/index.html index e143b851..f394df77 100644 --- a/docs/docs/getting-started/v0.2.x/customization/index.html +++ b/docs/docs/getting-started/v0.2.x/customization/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.2.x/deploy-jenkins/index.html b/docs/docs/getting-started/v0.2.x/deploy-jenkins/index.html index 3c79521a..58279328 100644 --- a/docs/docs/getting-started/v0.2.x/deploy-jenkins/index.html +++ b/docs/docs/getting-started/v0.2.x/deploy-jenkins/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.2.x/diagnostics/index.html b/docs/docs/getting-started/v0.2.x/diagnostics/index.html index 17836346..e792d212 100644 --- a/docs/docs/getting-started/v0.2.x/diagnostics/index.html +++ b/docs/docs/getting-started/v0.2.x/diagnostics/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.2.x/index.html b/docs/docs/getting-started/v0.2.x/index.html index 69989402..052b11b0 100644 --- a/docs/docs/getting-started/v0.2.x/index.html +++ b/docs/docs/getting-started/v0.2.x/index.html @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -1017,8 +1028,6 @@ - - diff --git a/docs/docs/getting-started/v0.2.x/migration/index.html b/docs/docs/getting-started/v0.2.x/migration/index.html index 8218aed9..97cfe27e 100644 --- a/docs/docs/getting-started/v0.2.x/migration/index.html +++ b/docs/docs/getting-started/v0.2.x/migration/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.2.x/schema/index.html b/docs/docs/getting-started/v0.2.x/schema/index.html index 726ff5ea..fa3debd5 100644 --- a/docs/docs/getting-started/v0.2.x/schema/index.html +++ b/docs/docs/getting-started/v0.2.x/schema/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/aks/index.html b/docs/docs/getting-started/v0.3.x/aks/index.html index c4bdc55c..a0e7098a 100644 --- a/docs/docs/getting-started/v0.3.x/aks/index.html +++ b/docs/docs/getting-started/v0.3.x/aks/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/configuration/index.html b/docs/docs/getting-started/v0.3.x/configuration/index.html index fea849a3..8721e33b 100644 --- a/docs/docs/getting-started/v0.3.x/configuration/index.html +++ b/docs/docs/getting-started/v0.3.x/configuration/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/configure-backup-and-restore/index.html b/docs/docs/getting-started/v0.3.x/configure-backup-and-restore/index.html index 2012db27..198dffc9 100644 --- a/docs/docs/getting-started/v0.3.x/configure-backup-and-restore/index.html +++ b/docs/docs/getting-started/v0.3.x/configure-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/custom-backup-and-restore/index.html b/docs/docs/getting-started/v0.3.x/custom-backup-and-restore/index.html index 32662237..54a21d71 100644 --- a/docs/docs/getting-started/v0.3.x/custom-backup-and-restore/index.html +++ b/docs/docs/getting-started/v0.3.x/custom-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/customization/index.html b/docs/docs/getting-started/v0.3.x/customization/index.html index 0786fe84..3e3857d9 100644 --- a/docs/docs/getting-started/v0.3.x/customization/index.html +++ b/docs/docs/getting-started/v0.3.x/customization/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/deploy-jenkins/index.html b/docs/docs/getting-started/v0.3.x/deploy-jenkins/index.html index 30285b35..5ad6d2ba 100644 --- a/docs/docs/getting-started/v0.3.x/deploy-jenkins/index.html +++ b/docs/docs/getting-started/v0.3.x/deploy-jenkins/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/diagnostics/index.html b/docs/docs/getting-started/v0.3.x/diagnostics/index.html index a72c7fe9..520b1fcf 100644 --- a/docs/docs/getting-started/v0.3.x/diagnostics/index.html +++ b/docs/docs/getting-started/v0.3.x/diagnostics/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/index.html b/docs/docs/getting-started/v0.3.x/index.html index e591302e..e19cb26f 100644 --- a/docs/docs/getting-started/v0.3.x/index.html +++ b/docs/docs/getting-started/v0.3.x/index.html @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -1019,8 +1030,6 @@ - - diff --git a/docs/docs/getting-started/v0.3.x/migration/index.html b/docs/docs/getting-started/v0.3.x/migration/index.html index a73a21ef..396f1e63 100644 --- a/docs/docs/getting-started/v0.3.x/migration/index.html +++ b/docs/docs/getting-started/v0.3.x/migration/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/notifications/index.html b/docs/docs/getting-started/v0.3.x/notifications/index.html index fade65a8..2c8bb590 100644 --- a/docs/docs/getting-started/v0.3.x/notifications/index.html +++ b/docs/docs/getting-started/v0.3.x/notifications/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.3.x/schema/index.html b/docs/docs/getting-started/v0.3.x/schema/index.html index 096fc2f2..2b5f4b4c 100644 --- a/docs/docs/getting-started/v0.3.x/schema/index.html +++ b/docs/docs/getting-started/v0.3.x/schema/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/aks/index.html b/docs/docs/getting-started/v0.4.x/aks/index.html index 94a400c4..3411ac24 100644 --- a/docs/docs/getting-started/v0.4.x/aks/index.html +++ b/docs/docs/getting-started/v0.4.x/aks/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/configuration/index.html b/docs/docs/getting-started/v0.4.x/configuration/index.html index ff89ab1b..f04b585e 100644 --- a/docs/docs/getting-started/v0.4.x/configuration/index.html +++ b/docs/docs/getting-started/v0.4.x/configuration/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/configure-backup-and-restore/index.html b/docs/docs/getting-started/v0.4.x/configure-backup-and-restore/index.html index 850b1381..45edc6de 100644 --- a/docs/docs/getting-started/v0.4.x/configure-backup-and-restore/index.html +++ b/docs/docs/getting-started/v0.4.x/configure-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/custom-backup-and-restore/index.html b/docs/docs/getting-started/v0.4.x/custom-backup-and-restore/index.html index cad57394..de94435e 100644 --- a/docs/docs/getting-started/v0.4.x/custom-backup-and-restore/index.html +++ b/docs/docs/getting-started/v0.4.x/custom-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/customization/index.html b/docs/docs/getting-started/v0.4.x/customization/index.html index 8e0ee0cf..ae931d6e 100644 --- a/docs/docs/getting-started/v0.4.x/customization/index.html +++ b/docs/docs/getting-started/v0.4.x/customization/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/deploy-jenkins/index.html b/docs/docs/getting-started/v0.4.x/deploy-jenkins/index.html index c31679f2..e876a2eb 100644 --- a/docs/docs/getting-started/v0.4.x/deploy-jenkins/index.html +++ b/docs/docs/getting-started/v0.4.x/deploy-jenkins/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/diagnostics/index.html b/docs/docs/getting-started/v0.4.x/diagnostics/index.html index 67eaa6df..01933eb6 100644 --- a/docs/docs/getting-started/v0.4.x/diagnostics/index.html +++ b/docs/docs/getting-started/v0.4.x/diagnostics/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/index.html b/docs/docs/getting-started/v0.4.x/index.html index 18f6ece2..b3883fc8 100644 --- a/docs/docs/getting-started/v0.4.x/index.html +++ b/docs/docs/getting-started/v0.4.x/index.html @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -1018,8 +1029,6 @@ - -
    Diagnostics diff --git a/docs/docs/getting-started/v0.4.x/notifications/index.html b/docs/docs/getting-started/v0.4.x/notifications/index.html index 552c5746..48021d2c 100644 --- a/docs/docs/getting-started/v0.4.x/notifications/index.html +++ b/docs/docs/getting-started/v0.4.x/notifications/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/openshift/index.html b/docs/docs/getting-started/v0.4.x/openshift/index.html index 0d209bb2..1566fb92 100644 --- a/docs/docs/getting-started/v0.4.x/openshift/index.html +++ b/docs/docs/getting-started/v0.4.x/openshift/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.4.x/schema/index.html b/docs/docs/getting-started/v0.4.x/schema/index.html index 7ef0aa24..1763f6e3 100644 --- a/docs/docs/getting-started/v0.4.x/schema/index.html +++ b/docs/docs/getting-started/v0.4.x/schema/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/aks/index.html b/docs/docs/getting-started/v0.5.x/aks/index.html index 19cb8ae1..f537fa80 100644 --- a/docs/docs/getting-started/v0.5.x/aks/index.html +++ b/docs/docs/getting-started/v0.5.x/aks/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/configuration/index.html b/docs/docs/getting-started/v0.5.x/configuration/index.html index 9cd850fa..97d496cb 100644 --- a/docs/docs/getting-started/v0.5.x/configuration/index.html +++ b/docs/docs/getting-started/v0.5.x/configuration/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/configure-backup-and-restore/index.html b/docs/docs/getting-started/v0.5.x/configure-backup-and-restore/index.html index 272e21e2..3229a349 100644 --- a/docs/docs/getting-started/v0.5.x/configure-backup-and-restore/index.html +++ b/docs/docs/getting-started/v0.5.x/configure-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/custom-backup-and-restore/index.html b/docs/docs/getting-started/v0.5.x/custom-backup-and-restore/index.html index 43839d9e..43ea11dd 100644 --- a/docs/docs/getting-started/v0.5.x/custom-backup-and-restore/index.html +++ b/docs/docs/getting-started/v0.5.x/custom-backup-and-restore/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/customization/index.html b/docs/docs/getting-started/v0.5.x/customization/index.html index 8eed3bd0..7fa03222 100644 --- a/docs/docs/getting-started/v0.5.x/customization/index.html +++ b/docs/docs/getting-started/v0.5.x/customization/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/deploy-jenkins/index.html b/docs/docs/getting-started/v0.5.x/deploy-jenkins/index.html index a5cff0db..f06f2f64 100644 --- a/docs/docs/getting-started/v0.5.x/deploy-jenkins/index.html +++ b/docs/docs/getting-started/v0.5.x/deploy-jenkins/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/diagnostics/index.html b/docs/docs/getting-started/v0.5.x/diagnostics/index.html index 75d944a4..873d739b 100644 --- a/docs/docs/getting-started/v0.5.x/diagnostics/index.html +++ b/docs/docs/getting-started/v0.5.x/diagnostics/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/index.html b/docs/docs/getting-started/v0.5.x/index.html index 51be5650..c183f95d 100644 --- a/docs/docs/getting-started/v0.5.x/index.html +++ b/docs/docs/getting-started/v0.5.x/index.html @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -854,6 +865,8 @@ + +
    Configuration @@ -921,8 +934,6 @@ - - @@ -1014,8 +1025,6 @@ - -
    Diagnostics diff --git a/docs/docs/getting-started/v0.5.x/notifications/index.html b/docs/docs/getting-started/v0.5.x/notifications/index.html index ca81e65a..f92ab324 100644 --- a/docs/docs/getting-started/v0.5.x/notifications/index.html +++ b/docs/docs/getting-started/v0.5.x/notifications/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/openshift/index.html b/docs/docs/getting-started/v0.5.x/openshift/index.html index f7dc5aa9..3e0f52ca 100644 --- a/docs/docs/getting-started/v0.5.x/openshift/index.html +++ b/docs/docs/getting-started/v0.5.x/openshift/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/getting-started/v0.5.x/schema/index.html b/docs/docs/getting-started/v0.5.x/schema/index.html index fb73700b..44508b09 100644 --- a/docs/docs/getting-started/v0.5.x/schema/index.html +++ b/docs/docs/getting-started/v0.5.x/schema/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/how-it-works/architecture-and-design/index.html b/docs/docs/how-it-works/architecture-and-design/index.html index d1462fde..98f8b923 100644 --- a/docs/docs/how-it-works/architecture-and-design/index.html +++ b/docs/docs/how-it-works/architecture-and-design/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/how-it-works/index.html b/docs/docs/how-it-works/index.html index 751db213..94c0273e 100644 --- a/docs/docs/how-it-works/index.html +++ b/docs/docs/how-it-works/index.html @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -964,8 +975,6 @@ - - diff --git a/docs/docs/how-it-works/jenkins-docker-images/index.html b/docs/docs/how-it-works/jenkins-docker-images/index.html index 6d174250..e68adaee 100644 --- a/docs/docs/how-it-works/jenkins-docker-images/index.html +++ b/docs/docs/how-it-works/jenkins-docker-images/index.html @@ -219,24 +219,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -669,6 +663,29 @@ + + + + + + + + + + + + diff --git a/docs/docs/index.html b/docs/docs/index.html index 4b964874..dfe1c8e4 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -209,24 +209,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -659,6 +653,29 @@ + + + + + + + + + + + + @@ -845,13 +856,9 @@ - - - -
    - Troubleshooting + Security

    Jenkins security and hardening out of the box

    @@ -869,6 +876,24 @@ + + + + +
    +
    + Troubleshooting +
    +

    Troubleshooting Jenkins Operator +

    +
    + + + + + + +
    Developer Guide @@ -885,10 +910,6 @@ - - - -
    FAQ @@ -971,10 +992,6 @@ - - - - diff --git a/docs/docs/index.xml b/docs/docs/index.xml index 5772e28b..fd1ec3d2 100644 --- a/docs/docs/index.xml +++ b/docs/docs/index.xml @@ -1407,6 +1407,108 @@ kubectl get secret jenkins-operator-credentials-&lt;cr_name&gt; -o <s + + Docs: Deploying Jenkins + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/deploying-jenkins/ + Wed, 06 Oct 2021 00:00:00 +0000 + + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/deploying-jenkins/ + + + + + + + +<div class="pageinfo pageinfo-primary"> +<p>This document describes the procedure for deploying Jenkins.</p> + +</div> + + +<h2 id="prerequisites">Prerequisites</h2> + +<p>The Operator needs to have been deployed beforehand. The procedure for deploying Jenkins described here doesn&rsquo;t apply to +installation of Operator via Helm chart unless <code>jenkins.enabled</code> was set to false. +That’s because by default, installation via Helm chart also covers deploying Jenkins.</p> + +<h2 id="deploying-jenkins-instance">Deploying Jenkins instance</h2> + +<p>Once Jenkins Operator is up and running let&rsquo;s deploy actual Jenkins instance. +Create manifest e.g. <strong><code>jenkins_instance.yaml</code></strong> with following data and save it on drive.</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">apiVersion<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins.io/v1alpha2<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span>kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Jenkins<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span>metadata<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>example<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>namespace<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>default<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span>spec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configurationAsCode<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configurations<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>secret<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>groovyScripts<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configurations<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>secret<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkinsAPISettings<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>authorizationStrategy<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>createUser<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>disableCSRFProtection<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">false</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>containers<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-master<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>image<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins/jenkins<span style="color:#000;font-weight:bold">:</span><span style="color:#0000cf;font-weight:bold">2.277</span><span style="color:#0000cf;font-weight:bold">.4</span>-lts-alpine<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>imagePullPolicy<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Always<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>livenessProbe<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>failureThreshold<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">12</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>httpGet<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>path<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/login<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>port<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>http<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>scheme<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>HTTP<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>initialDelaySeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">100</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>periodSeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">10</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>successThreshold<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>timeoutSeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">5</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>readinessProbe<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>failureThreshold<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">10</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>httpGet<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>path<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/login<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>port<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>http<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>scheme<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>HTTP<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>initialDelaySeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">80</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>periodSeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">10</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>successThreshold<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>timeoutSeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>resources<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>limits<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>cpu<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>1500m<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>memory<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>3Gi<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>requests<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>cpu<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>memory<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>500Mi<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>seedJobs<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>id<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-operator<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>targets<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;cicd/jobs/*.jenkins&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>description<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Jenkins Operator repository&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>repositoryBranch<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>repositoryUrl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>https<span style="color:#000;font-weight:bold">:</span>//github.com/jenkinsci/kubernetes-operator.git</code></pre></div> +<p>Deploy a Jenkins to Kubernetes:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl create -f jenkins_instance.yaml</code></pre></div> +<p>Watch the Jenkins instance being created:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl get pods -w</code></pre></div> +<p>Get the Jenkins credentials:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl get secret jenkins-operator-credentials-&lt;cr_name&gt; -o <span style="color:#4e9a06">&#39;jsonpath={.data.user}&#39;</span> <span style="color:#000;font-weight:bold">|</span> base64 -d +kubectl get secret jenkins-operator-credentials-&lt;cr_name&gt; -o <span style="color:#4e9a06">&#39;jsonpath={.data.password}&#39;</span> <span style="color:#000;font-weight:bold">|</span> base64 -d</code></pre></div> +<p>Connect to the Jenkins instance (minikube):</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">minikube service jenkins-operator-http-&lt;cr_name&gt; --url</code></pre></div> +<p>Connect to the Jenkins instance (actual Kubernetes cluster):</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl port-forward jenkins-&lt;cr_name&gt; 8080:8080</code></pre></div> +<p>Then open browser with address <code>http://localhost:8080</code>.</p> + +<p><img src="https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/img/jenkins.png" alt="jenkins" /></p> + + + + Docs: Configuration https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.5.x/configuration/ @@ -1690,90 +1792,6 @@ $ ssh-keygen -p -f &lt;filename&gt; -m pem</code></pre></ - - Docs: Deploying Jenkins - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/deploying-jenkins/ - Thu, 19 Aug 2021 00:00:00 +0000 - - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/deploying-jenkins/ - - - - <p>Once Jenkins Operator is up and running let&rsquo;s deploy actual Jenkins instance. -Create manifest e.g. <strong><code>jenkins_instance.yaml</code></strong> with following data and save it on drive.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">apiVersion<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins.io/v1alpha2<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Jenkins<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>metadata<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>example<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>namespace<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>default<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>spec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configurationAsCode<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configurations<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>secret<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>groovyScripts<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configurations<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>secret<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkinsAPISettings<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>authorizationStrategy<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>createUser<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>disableCSRFProtection<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">false</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>containers<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-master<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>image<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins/jenkins<span style="color:#000;font-weight:bold">:</span><span style="color:#0000cf;font-weight:bold">2.277</span><span style="color:#0000cf;font-weight:bold">.4</span>-lts-alpine<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>imagePullPolicy<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Always<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>livenessProbe<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>failureThreshold<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">12</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>httpGet<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>path<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/login<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>port<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>http<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>scheme<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>HTTP<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>initialDelaySeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">100</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>periodSeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">10</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>successThreshold<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>timeoutSeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">5</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>readinessProbe<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>failureThreshold<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">10</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>httpGet<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>path<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/login<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>port<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>http<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>scheme<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>HTTP<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>initialDelaySeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">80</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>periodSeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">10</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>successThreshold<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>timeoutSeconds<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>resources<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>limits<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>cpu<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>1500m<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>memory<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>3Gi<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>requests<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>cpu<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>memory<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>500Mi<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>seedJobs<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>id<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-operator<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>targets<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;cicd/jobs/*.jenkins&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>description<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Jenkins Operator repository&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>repositoryBranch<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>repositoryUrl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>https<span style="color:#000;font-weight:bold">:</span>//github.com/jenkinsci/kubernetes-operator.git</code></pre></div> -<p>Deploy a Jenkins to Kubernetes:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl create -f jenkins_instance.yaml</code></pre></div> -<p>Watch the Jenkins instance being created:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl get pods -w</code></pre></div> -<p>Get the Jenkins credentials:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl get secret jenkins-operator-credentials-&lt;cr_name&gt; -o <span style="color:#4e9a06">&#39;jsonpath={.data.user}&#39;</span> <span style="color:#000;font-weight:bold">|</span> base64 -d -kubectl get secret jenkins-operator-credentials-&lt;cr_name&gt; -o <span style="color:#4e9a06">&#39;jsonpath={.data.password}&#39;</span> <span style="color:#000;font-weight:bold">|</span> base64 -d</code></pre></div> -<p>Connect to the Jenkins instance (minikube):</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">minikube service jenkins-operator-http-&lt;cr_name&gt; --url</code></pre></div> -<p>Connect to the Jenkins instance (actual Kubernetes cluster):</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl port-forward jenkins-&lt;cr_name&gt; 8080:8080</code></pre></div> -<p>Then open browser with address <code>http://localhost:8080</code>.</p> - -<p><img src="https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/img/jenkins.png" alt="jenkins" /></p> - - - - Docs: Configuration https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.4.x/configuration/ @@ -4188,360 +4206,23 @@ up. Therefore, the backup script makes a copy of jobs history only.</p> - Docs: Custom backup and restore providers - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/custom-backup-and-restore/ - Thu, 19 Aug 2021 00:00:00 +0000 + Docs: Separate namespaces for Jenkins and Operator + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/separate-namespaces/ + Wed, 06 Oct 2021 00:00:00 +0000 - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/custom-backup-and-restore/ + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/separate-namespaces/ -<p>With enough effort one can create a custom backup and restore provider -for the Jenkins Operator.</p> - -<h2 id="requirements">Requirements</h2> - -<p>Two commands (e.g. scripts) are required:</p> - -<ul> -<li>a backup command, e.g. <code>backup.sh</code> that takes one argument, a <strong>backup number</strong></li> -<li>a restore command, e.g. <code>backup.sh</code> that takes one argument, a <strong>backup number</strong></li> -</ul> - -<p>Both scripts need to return an exit code of <code>0</code> on success and <code>1</code> or greater for failure.</p> - -<p>One of those scripts (or the entry point of the container) needs to be responsible -for backup cleanup or rotation if required, or an external system.</p> - -<h2 id="how-it-works">How it works</h2> - -<p>The mechanism relies on basic Kubernetes and UNIX functionalities.</p> - -<p>The backup (and restore) container runs as a sidecar in the same -Kubernetes pod as the Jenkins master.</p> - -<p>Name of the backup and restore containers can be set as necessary using -<code>spec.backup.containerName</code> and <code>spec.restore.containerName</code>. -In most cases it will be the same container, but we allow for less common use cases.</p> - -<p>The operator will call a backup or restore commands inside a sidecar container when necessary:</p> - -<ul> -<li>backup command (defined in <code>spec.backup.action.exec.command</code>) -will be called every <code>N</code> seconds configurable in: <code>spec.backup.interval</code> -and on pod shutdown (if enabled in <code>spec.backup.makeBackupBeforePodDeletion</code>) -with an integer representing the current backup number as first and only argument</li> -<li>restore command (defined in <code>spec.restore.action.exec.command</code>) -will be called at Jenkins startup -with an integer representing the backup number to restore as first and only argument -(can be overridden using <code>spec.restore.recoveryOnce</code>)</li> -</ul> - -<h2 id="example-aws-s3-backup-using-the-cli">Example AWS S3 backup using the CLI</h2> - -<p>This example shows abbreviated version of a simple AWS S3 backup implementation -using: <code>aws-cli</code>, <code>bash</code> and <code>kube2iam</code>.</p> - -<p>In addition to your normal <code>Jenkins</code> <code>CustomResource</code> some additional settings -for backup and restore are required, e.g.:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Jenkins<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>apiVersion<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins.io/v1alpha1<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>metadata<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>example<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>namespace<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>spec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>masterAnnotations<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>iam.amazonaws.com/role<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;my-example-backup-role&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># tell kube2iam where the AWS IAM role is</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>containers<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-master<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>...<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># container responsible for backup and restore</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>image<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>quay.io/virtuslab/aws-cli<span style="color:#000;font-weight:bold">:</span><span style="color:#0000cf;font-weight:bold">1.16</span><span style="color:#0000cf;font-weight:bold">.263</span><span style="color:#0000cf;font-weight:bold">-2</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>workingDir<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>command<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># our container entry point</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>sleep<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>infinity<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>env<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BACKUP_BUCKET<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>value<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>my-example-bucket<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># the S3 bucket name to use</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BACKUP_PATH<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>value<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>my-backup-path<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># the S3 bucket path prefix to use</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>JENKINS_HOME<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>value<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/jenkins-home<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># the path to mount jenkins home dir in the backup container</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>volumeMounts<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>mountPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/jenkins-home<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># Jenkins home volume</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-home<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>mountPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/backup.sh<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup-scripts<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>subPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup.sh<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>readOnly<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>mountPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/restore.sh<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup-scripts<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>subPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>restore.sh<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>readOnly<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>volumes<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup-scripts<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configMap<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>defaultMode<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0754</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-operator-backup-s3<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>securityContext<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># make sure both containers use the same UID and GUID</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>runAsUser<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1000</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>fsGroup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1000</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>...<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>containerName<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># container name responsible for backup</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>interval<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">3600</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># how often make a backup in seconds</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>makeBackupBeforePodDeletion<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># trigger backup just before deleting the pod</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>action<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>command<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># this command is invoked on &#34;backup&#34; container to create a backup,</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># &lt;backup_number&gt; is passed by operator,</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># for example /home/user/bin/backup.sh &lt;backup_number&gt;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/backup.sh<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>restore<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>containerName<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># container name is responsible for restore backup</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>action<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>command<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># this command is invoked on &#34;backup&#34; container to restore a backup,</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># &lt;backup_number&gt; is passed by operator</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># for example /home/user/bin/restore.sh &lt;backup_number&gt;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/restore.sh<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#8f5902;font-style:italic"># recoveryOnce: &lt;backup_number&gt; # if want to restore specific backup configure this field and then Jenkins will be restarted and desired backup will be restored</span></code></pre></div> -<p>The actual backup and restore scripts will be provided in a <code>ConfigMap</code>:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ConfigMap<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>apiVersion<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>v1<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>metadata<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-operator-backup-s3<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>namespace<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>labels<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>app<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-operator<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>data<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup.sh<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>|<span style="color:#8f5902;font-style:italic">- -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">#!/bin/bash -xeu</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>!<span style="color:#f8f8f8;text-decoration:underline"> </span>$<span style="color:#8f5902;font-style:italic"># -eq 1 ]] &amp;&amp; echo &#34;Usage: $0 backup_number&#34; &amp;&amp; exit 1;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_BUCKET}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;BACKUP_BUCKET&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_PATH}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;BACKUP_PATH&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${JENKINS_HOME}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;JENKINS_HOME&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup_number=$<span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Running backup #${backup_number}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BACKUP_TMP_DIR=$(mktemp<span style="color:#f8f8f8;text-decoration:underline"> </span>-d)<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>tar<span style="color:#f8f8f8;text-decoration:underline"> </span>-C<span style="color:#f8f8f8;text-decoration:underline"> </span>${JENKINS_HOME}<span style="color:#f8f8f8;text-decoration:underline"> </span>-czf<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_TMP_DIR}/${backup_number}.tar.gz&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>--exclude<span style="color:#f8f8f8;text-decoration:underline"> </span>jobs/<span style="color:#8f5902;font-style:italic">*/workspace*</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-c<span style="color:#f8f8f8;text-decoration:underline"> </span>jobs<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>\<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>aws<span style="color:#f8f8f8;text-decoration:underline"> </span>s3<span style="color:#f8f8f8;text-decoration:underline"> </span>cp<span style="color:#f8f8f8;text-decoration:underline"> </span>${BACKUP_TMP_DIR}/${backup_number}.tar.gz<span style="color:#f8f8f8;text-decoration:underline"> </span>s3<span style="color:#000;font-weight:bold">:</span>//${BACKUP_BUCKET}/${BACKUP_PATH}/${backup_number}.tar.gz<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span>Done<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>restore.sh<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>|<span style="color:#8f5902;font-style:italic">- -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">#!/bin/bash -xeu</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>!<span style="color:#f8f8f8;text-decoration:underline"> </span>$<span style="color:#8f5902;font-style:italic"># -eq 1 ]] &amp;&amp; echo &#34;Usage: $0 backup_number&#34; &amp;&amp; exit 1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_BUCKET}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;BACKUP_BUCKET&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_PATH}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;BACKUP_PATH&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${JENKINS_HOME}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;JENKINS_HOME&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup_number=$<span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Running restore #${backup_number}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BACKUP_TMP_DIR=$(mktemp<span style="color:#f8f8f8;text-decoration:underline"> </span>-d)<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>aws<span style="color:#f8f8f8;text-decoration:underline"> </span>s3<span style="color:#f8f8f8;text-decoration:underline"> </span>cp<span style="color:#f8f8f8;text-decoration:underline"> </span>s3<span style="color:#000;font-weight:bold">:</span>//${BACKUP_BUCKET}/${BACKUP_PATH}/${backup_number}.tar.gz<span style="color:#f8f8f8;text-decoration:underline"> </span>${BACKUP_TMP_DIR}/${backup_number}.tar.gz<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>tar<span style="color:#f8f8f8;text-decoration:underline"> </span>-C<span style="color:#f8f8f8;text-decoration:underline"> </span>${JENKINS_HOME}<span style="color:#f8f8f8;text-decoration:underline"> </span>-zxf<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_TMP_DIR}/${backup_number}.tar.gz&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span>Done</code></pre></div> -<p>In our example we will use S3 bucket lifecycle policy to keep -the number of backups under control, e.g. Cloud Formation fragment:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#f8f8f8;text-decoration:underline"> </span>Type<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AWS<span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">:</span>S3<span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">:</span>Bucket<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Properties<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BucketName<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>my-example-bucket<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>...<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>LifecycleConfiguration<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Rules<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>Id<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BackupCleanup<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Status<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Enabled<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Prefix<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>my-backup-path<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ExpirationInDays<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">7</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>NoncurrentVersionExpirationInDays<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">14</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AbortIncompleteMultipartUpload<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DaysAfterInitiation<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">3</span></code></pre></div> - - - - - Docs: Notifications - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/notifications/ - Thu, 19 Aug 2021 00:00:00 +0000 - - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/notifications/ - - - - - -<h2 id="slack">Slack</h2> - -<p>Please follow <a href="https://api.slack.com/incoming-webhooks">this</a> instructions to get web hook URL.</p> - -<p>Create web hook secret with name <code>jenkins-operator-notification-data</code>. Contains key <code>url</code> with provided web hook URL.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">$ kubectl create secret generic jenkins-operator-notification-data --from-literal<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">url</span><span style="color:#ce5c00;font-weight:bold">=</span>&lt;webhook_url&gt;</code></pre></div> -<p>Example configuration for Slack:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Jenkins<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>spec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>notifications<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>level<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>info<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>verbose<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;name<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">slack:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>webHookURLSecretKeySelector<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>secret<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;secret_name<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">key: &lt;key&gt;</span></code></pre></div> -<h2 id="microsoft-teams">Microsoft Teams</h2> - -<p>Please follow <a href="https://docs.microsoft.com/en-gb/outlook/actionable-messages/send-via-connectors">this</a> instructions to get web hook URL.</p> - -<p>Example configuration for Microsoft Teams:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Jenkins<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>spec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>notifications<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>level<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>info<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>verbose<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;name<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">teams:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>webHookURLSecretKeySelector<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>secret<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;secret_name<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">key: &lt;key&gt;</span></code></pre></div> -<h2 id="mailgun">Mailgun</h2> - -<p>Example configuration for Mailgun:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Jenkins<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>spec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>notifications<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>level<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>info<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>verbose<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;name<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">mailgun:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>domain<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;domain<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">apiKeySecretKeySelector:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>secret<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;secret_name<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">key: &lt;key&gt;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>recipient<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;your_email<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">from: &lt;mailgun_email&gt;</span></code></pre></div> -<h2 id="debug-options">Debug options</h2> - -<p>As you see there is two debugging options:</p> - -<ul> -<li><p><code>level</code> (warning/info) - Set level of messages to send.</p></li> - -<li><p><code>verbose</code> - Print stacktrace and additional error messages</p></li> -</ul> - -<h2 id="multiple-providers">Multiple providers</h2> - -<p>You can use multiple providers to send notification to another communication channels at the same time. -For example you will send notifications to Slack and Teams.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Jenkins<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>spec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>notifications<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>level<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>info<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>verbose<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>nslack<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>slack<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>webHookURLSecretKeySelector<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>secret<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;secret_name<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">key: &lt;key&gt;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>level<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>info<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>verbose<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>nteams<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>teams<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>webHookURLSecretKeySelector<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>secret<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;secret_name<span style="color:#8f5902;font-style:italic">&gt; -</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">key: &lt;key&gt;</span></code></pre></div> - - - - - Docs: Security - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/security/ - Fri, 20 Aug 2021 00:00:00 +0000 - - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/security/ - - - - - -<p>By default <strong>Jenkins Operator</strong> performs an initial security hardening of Jenkins instance -via groovy scripts to prevent any security gaps.</p> - -<h2 id="jenkins-access-control">Jenkins Access Control</h2> - -<p>Currently <strong>Jenkins Operator</strong> generates a username and random password and stores them in a Kubernetes Secret. -However any other authorization mechanisms are possible and can be done via groovy scripts or configuration as code plugin. -For more information take a look at <a href="https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/docs/getting-started/latest/customizing-jenkins/">getting-started#jenkins-customization</a>.</p> - -<p>Any change to Security Realm or Authorization requires that user called <code>jenkins-operator</code> must have admin rights -because <strong>Jenkins Operator</strong> calls Jenkins API.</p> - -<h2 id="jenkins-hardening">Jenkins Hardening</h2> - -<p>The list below describes all the default security setting configured by the <strong>Jenkins Operator</strong>:</p> - -<ul> -<li>basic settings - use <code>Mode.EXCLUSIVE</code> - Jobs must specify that they want to run on master node</li> -<li>enable CSRF - Cross Site Request Forgery Protection is enabled</li> -<li>disable usage stats - Jenkins usage stats submitting is disabled</li> -<li>enable master access control - Slave to Master Access Control is enabled</li> -<li>disable old JNLP protocols - <code>JNLP3-connect</code>, <code>JNLP2-connect</code> and <code>JNLP-connect</code> are disabled</li> -<li>disable CLI - CLI access of <code>/cli</code> URL is disabled</li> -<li>configure kubernetes-plugin - secure configuration for Kubernetes plugin</li> -</ul> - -<p>If you would like to dig a little bit into the code, take a look <a href="https://github.com/jenkinsci/kubernetes-operator/blob/master/pkg/configuration/base/resources/base_configuration_configmap.go">here</a>.</p> - -<h2 id="jenkins-api">Jenkins API</h2> - -<p>The <strong>Jenkins Operator</strong> generates and configures Basic Authentication token for Jenkins Go client -and stores it in a Kubernetes Secret.</p> - -<h2 id="kubernetes">Kubernetes</h2> - -<p>Kubernetes API permissions are limited by the following roles:</p> - -<ul> -<li><a href="https://github.com/jenkinsci/kubernetes-operator/blob/v0.6.0/deploy/all-in-one-v1alpha2.yaml">jenkins-operator role</a><br /></li> -<li><a href="https://github.com/jenkinsci/kubernetes-operator/blob/v0.6.0/pkg/configuration/base/resources/rbac.go">Jenkins Master role</a></li> -</ul> - -<p>Since <strong>Jenkins Operator</strong> must be able to grant permission for its deployed Jenkins masters -to spawn pods (the <code>Jenkins Master role</code> above), -the operator itself requires permission to create RBAC resources (the <code>jenkins-operator role</code> above).</p> - -<p>Deployed this way, any subject which may create a Pod (including a Jenkins job) may -assume the <code>jenkins-operator</code> role by using its&rsquo; ServiceAccount, create RBAC rules, and thus escape its granted permissions. -Any namespace to which the <code>jenkins-operator</code> is deployed must be considered to implicitly grant all -possible permissions to any subject which can create a Pod in that namespace.</p> - -<p>To mitigate this issue <strong>Jenkins Operator</strong> should be deployed in one namespace, and the Jenkins CR should be created in a separate namespace. -Section below contains instructions on how to do it.</p> - -<h2 id="setup-jenkins-operator-and-jenkins-in-separate-namespaces">Setup Jenkins Operator and Jenkins in separate namespaces</h2> +<h2 id="create-namespaces">Create namespaces</h2> <p>You need to create two namespaces, for example we&rsquo;ll call them <strong>jenkins</strong> for Jenkins and <strong>jenkins-operator</strong> for Jenkins Operator.</p> <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">$ kubectl create ns jenkins-operator $ kubectl create ns jenkins</code></pre></div> +<h2 id="create-necessary-resources-in-jenkins-operator-namespace">Create necessary resources in Jenkins Operator namespace</h2> + <p>Next, you need to install resources necessary for the Operator to work in the <code>jenkins-operator</code> namespace. To do that, copy the manifest you see below to <code>jenkins-operator-rbac.yaml</code>file.</p> <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">---<span style="color:#f8f8f8;text-decoration:underline"> @@ -4769,7 +4450,7 @@ copy the manifest you see below to <code>jenkins-operator-rbac.yaml</co <p>Now install the required resources in <code>jenkins-operator</code> namespace with:</p> <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl apply -n jenkins-operator -f jenkins-operator-rbac.yaml</code></pre></div> <p>There&rsquo;s only one thing left to install in <code>jenkins-operator</code> namespace, and that is the Operator itself. The manifest -below contains the Operator as defined in all-in-one manifest found in <a href="https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/docs/getting-started/latest/installing-the-operator/">Installating the Operator</a> +below contains the Operator as defined in all-in-one manifest found in <a href="https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/docs/getting-started/latest/installing-the-operator/">Installing the Operator</a> page, the only difference is that the one here sets <code>WATCH_NAMESPACE</code> to the <code>jenkins</code> namespace we created.</p> <p>Copy its content to <code>jenkins-operator.yaml</code> file.</p> @@ -4831,7 +4512,9 @@ spec: there are two things left to do: creating necessary Role and RoleBinding for the Operator in <code>jenkins</code> namespace, and deploying actual Jenkins instance there.</p> -<p>Below you can find manifest with RBAC that need to be created in <code>jenkins</code> namespace. Copy its content to <code>jenkins-ns-rbac.yaml</code> file.</p> +<h2 id="create-necessary-resources-in-jenkins-namespace">Create necessary resources in Jenkins namespace</h2> + +<p>Below you can find manifest with RBAC that needs to be created in <code>jenkins</code> namespace. Copy its content to <code>jenkins-ns-rbac.yaml</code> file.</p> <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">apiVersion<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>rbac.authorization.k8s.io/v1<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"></span>kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Role<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"></span>metadata<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> @@ -5073,17 +4756,196 @@ Copy it to <code>jenkins-instance.yaml</code></p> <p>With this, you have just set up Jenkins Operator and Jenkins in separate namespaces. Now the Operator will run in its own namespace (<code>jenkins-operator</code>), watch for CRs in <code>jenkins</code> namespace, and deploy Jenkins there.</p> -<h2 id="report-a-security-vulnerability">Report a Security Vulnerability</h2> + + + + + Docs: Custom backup and restore providers + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/custom-backup-and-restore/ + Wed, 06 Oct 2021 00:00:00 +0000 + + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/custom-backup-and-restore/ + + + + -<p>If you find a vulnerability or any misconfiguration in Jenkins, please report it in the <a href="https://github.com/jenkinsci/kubernetes-operator/issues">issues</a>.</p> +<p>With enough effort one can create a custom backup and restore provider +for the Jenkins Operator.</p> +<h2 id="requirements">Requirements</h2> + +<p>Two commands (e.g. scripts) are required:</p> + +<ul> +<li>a backup command, e.g. <code>backup.sh</code> that takes one argument, a <strong>backup number</strong></li> +<li>a restore command, e.g. <code>backup.sh</code> that takes one argument, a <strong>backup number</strong></li> +</ul> + +<p>Both scripts need to return an exit code of <code>0</code> on success and <code>1</code> or greater for failure.</p> + +<p>One of those scripts (or the entry point of the container) needs to be responsible +for backup cleanup or rotation if required, or an external system.</p> + +<h2 id="how-it-works">How it works</h2> + +<p>The mechanism relies on basic Kubernetes and UNIX functionalities.</p> + +<p>The backup (and restore) container runs as a sidecar in the same +Kubernetes pod as the Jenkins master.</p> + +<p>Name of the backup and restore containers can be set as necessary using +<code>spec.backup.containerName</code> and <code>spec.restore.containerName</code>. +In most cases it will be the same container, but we allow for less common use cases.</p> + +<p>The operator will call a backup or restore commands inside a sidecar container when necessary:</p> + +<ul> +<li>backup command (defined in <code>spec.backup.action.exec.command</code>) +will be called every <code>N</code> seconds configurable in: <code>spec.backup.interval</code> +and on pod shutdown (if enabled in <code>spec.backup.makeBackupBeforePodDeletion</code>) +with an integer representing the current backup number as first and only argument</li> +<li>restore command (defined in <code>spec.restore.action.exec.command</code>) +will be called at Jenkins startup +with an integer representing the backup number to restore as first and only argument +(can be overridden using <code>spec.restore.recoveryOnce</code>)</li> +</ul> + +<h2 id="example-aws-s3-backup-using-the-cli">Example AWS S3 backup using the CLI</h2> + +<p>This example shows abbreviated version of a simple AWS S3 backup implementation +using: <code>aws-cli</code>, <code>bash</code> and <code>kube2iam</code>.</p> + +<p>In addition to your normal <code>Jenkins</code> <code>CustomResource</code> some additional settings +for backup and restore are required, e.g.:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Jenkins<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span>apiVersion<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins.io/v1alpha1<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span>metadata<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>example<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>namespace<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span>spec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>master<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>masterAnnotations<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>iam.amazonaws.com/role<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;my-example-backup-role&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># tell kube2iam where the AWS IAM role is</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>containers<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-master<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>...<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># container responsible for backup and restore</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>image<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>quay.io/virtuslab/aws-cli<span style="color:#000;font-weight:bold">:</span><span style="color:#0000cf;font-weight:bold">1.16</span><span style="color:#0000cf;font-weight:bold">.263</span><span style="color:#0000cf;font-weight:bold">-2</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>workingDir<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>command<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># our container entry point</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>sleep<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>infinity<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>env<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BACKUP_BUCKET<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>value<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>my-example-bucket<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># the S3 bucket name to use</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BACKUP_PATH<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>value<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>my-backup-path<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># the S3 bucket path prefix to use</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>JENKINS_HOME<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>value<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/jenkins-home<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># the path to mount jenkins home dir in the backup container</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>volumeMounts<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>mountPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/jenkins-home<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># Jenkins home volume</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-home<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>mountPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/backup.sh<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup-scripts<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>subPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup.sh<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>readOnly<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>mountPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/restore.sh<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup-scripts<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>subPath<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>restore.sh<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>readOnly<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>volumes<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup-scripts<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configMap<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>defaultMode<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0754</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-operator-backup-s3<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>securityContext<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># make sure both containers use the same UID and GUID</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>runAsUser<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1000</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>fsGroup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1000</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>...<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>containerName<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># container name responsible for backup</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>interval<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">3600</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># how often make a backup in seconds</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>makeBackupBeforePodDeletion<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># trigger backup just before deleting the pod</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>action<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>command<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># this command is invoked on &#34;backup&#34; container to create a backup,</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># &lt;backup_number&gt; is passed by operator,</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># for example /home/user/bin/backup.sh &lt;backup_number&gt;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/backup.sh<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>restore<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>containerName<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># container name is responsible for restore backup</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>action<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>command<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># this command is invoked on &#34;backup&#34; container to restore a backup,</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># &lt;backup_number&gt; is passed by operator</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># for example /home/user/bin/restore.sh &lt;backup_number&gt;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/restore.sh<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#8f5902;font-style:italic"># recoveryOnce: &lt;backup_number&gt; # if want to restore specific backup configure this field and then Jenkins will be restarted and desired backup will be restored</span></code></pre></div> +<p>The actual backup and restore scripts will be provided in a <code>ConfigMap</code>:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">kind<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ConfigMap<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span>apiVersion<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>v1<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span>metadata<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-operator-backup-s3<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>namespace<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>labels<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>app<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>jenkins-operator<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span>data<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup.sh<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>|<span style="color:#8f5902;font-style:italic">- +</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">#!/bin/bash -xeu</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>!<span style="color:#f8f8f8;text-decoration:underline"> </span>$<span style="color:#8f5902;font-style:italic"># -eq 1 ]] &amp;&amp; echo &#34;Usage: $0 backup_number&#34; &amp;&amp; exit 1;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_BUCKET}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;BACKUP_BUCKET&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_PATH}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;BACKUP_PATH&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${JENKINS_HOME}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;JENKINS_HOME&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup_number=$<span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Running backup #${backup_number}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BACKUP_TMP_DIR=$(mktemp<span style="color:#f8f8f8;text-decoration:underline"> </span>-d)<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>tar<span style="color:#f8f8f8;text-decoration:underline"> </span>-C<span style="color:#f8f8f8;text-decoration:underline"> </span>${JENKINS_HOME}<span style="color:#f8f8f8;text-decoration:underline"> </span>-czf<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_TMP_DIR}/${backup_number}.tar.gz&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>--exclude<span style="color:#f8f8f8;text-decoration:underline"> </span>jobs/<span style="color:#8f5902;font-style:italic">*/workspace*</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-c<span style="color:#f8f8f8;text-decoration:underline"> </span>jobs<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>\<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>aws<span style="color:#f8f8f8;text-decoration:underline"> </span>s3<span style="color:#f8f8f8;text-decoration:underline"> </span>cp<span style="color:#f8f8f8;text-decoration:underline"> </span>${BACKUP_TMP_DIR}/${backup_number}.tar.gz<span style="color:#f8f8f8;text-decoration:underline"> </span>s3<span style="color:#000;font-weight:bold">:</span>//${BACKUP_BUCKET}/${BACKUP_PATH}/${backup_number}.tar.gz<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span>Done<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>restore.sh<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>|<span style="color:#8f5902;font-style:italic">- +</span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic"> </span><span style="color:#8f5902;font-style:italic">#!/bin/bash -xeu</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>!<span style="color:#f8f8f8;text-decoration:underline"> </span>$<span style="color:#8f5902;font-style:italic"># -eq 1 ]] &amp;&amp; echo &#34;Usage: $0 backup_number&#34; &amp;&amp; exit 1</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_BUCKET}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;BACKUP_BUCKET&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_PATH}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;BACKUP_PATH&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-z<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${JENKINS_HOME}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">]</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Required &#39;JENKINS_HOME&#39; env not set&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">&amp;&amp;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>exit<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span>;<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>backup_number=$<span style="color:#0000cf;font-weight:bold">1</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;Running restore #${backup_number}&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BACKUP_TMP_DIR=$(mktemp<span style="color:#f8f8f8;text-decoration:underline"> </span>-d)<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>aws<span style="color:#f8f8f8;text-decoration:underline"> </span>s3<span style="color:#f8f8f8;text-decoration:underline"> </span>cp<span style="color:#f8f8f8;text-decoration:underline"> </span>s3<span style="color:#000;font-weight:bold">:</span>//${BACKUP_BUCKET}/${BACKUP_PATH}/${backup_number}.tar.gz<span style="color:#f8f8f8;text-decoration:underline"> </span>${BACKUP_TMP_DIR}/${backup_number}.tar.gz<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>tar<span style="color:#f8f8f8;text-decoration:underline"> </span>-C<span style="color:#f8f8f8;text-decoration:underline"> </span>${JENKINS_HOME}<span style="color:#f8f8f8;text-decoration:underline"> </span>-zxf<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;${BACKUP_TMP_DIR}/${backup_number}.tar.gz&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>echo<span style="color:#f8f8f8;text-decoration:underline"> </span>Done</code></pre></div> +<p>In our example we will use S3 bucket lifecycle policy to keep +the number of backups under control, e.g. Cloud Formation fragment:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#f8f8f8;text-decoration:underline"> </span>Type<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AWS<span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">:</span>S3<span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">:</span>Bucket<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Properties<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BucketName<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>my-example-bucket<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>...<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>LifecycleConfiguration<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Rules<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>Id<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>BackupCleanup<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Status<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Enabled<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Prefix<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>my-backup-path<span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ExpirationInDays<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">7</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>NoncurrentVersionExpirationInDays<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">14</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AbortIncompleteMultipartUpload<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DaysAfterInitiation<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">3</span></code></pre></div> Docs: AKS https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/aks/ - Thu, 19 Aug 2021 00:00:00 +0000 + Wed, 06 Oct 2021 00:00:00 +0000 https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/aks/ @@ -9669,50 +9531,2679 @@ OpenShift oauth authentication. By default, the jenkins http service is named - Docs: Tools - https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/tools/ - Mon, 05 Aug 2019 00:00:00 +0000 + Docs: Diagnostics + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.5.x/diagnostics/ + Mon, 18 Jan 2021 00:00:00 +0000 - https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/tools/ + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.5.x/diagnostics/ +<p>Turn on debug in <strong>Jenkins Operator</strong> deployment:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">sed -i <span style="color:#4e9a06">&#39;s|\(args:\).*|\1\ [&#34;--debug&#34;\]|&#39;</span> deploy/operator.yaml +kubectl apply -f deploy/operator.yaml</code></pre></div> +<p>Watch Kubernetes events:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl get events --sort-by<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&#39;{.lastTimestamp}&#39;</span></code></pre></div> +<p>Verify Jenkins master logs:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl logs -f jenkins-&lt;cr_name&gt;</code></pre></div> +<p>Verify the <code>jenkins-operator</code> logs:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl logs deployment/jenkins-operator</code></pre></div> +<h2 id="troubleshooting">Troubleshooting</h2> +<p>Delete the Jenkins master pod and wait for the new one to come up:</p> +<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">kubectl delete pod jenkins-&lt;cr_name&gt;</code></pre></div> + + + + + Docs: Schema + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.5.x/schema/ + Mon, 18 Jan 2021 00:00:00 +0000 + + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.5.x/schema/ + + + + <div class="pageinfo pageinfo-primary"> -<p>This document explains how to install the Go tools used by the development process.</p> +<p>This document contains API scheme for <code>jenkins-operator</code> Custom Resource Definition manifest</p> </div> -<h2 id="configure-environment-variables">Configure environment variables</h2> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#204a87">export</span> <span style="color:#000">GOPATH</span><span style="color:#ce5c00;font-weight:bold">=</span>/home/go <span style="color:#8f5902;font-style:italic"># example value</span> -<span style="color:#204a87">export</span> <span style="color:#000">GOROOT</span><span style="color:#ce5c00;font-weight:bold">=</span>/usr/lib/go-1.12 <span style="color:#8f5902;font-style:italic"># example value</span> -<span style="color:#204a87">export</span> <span style="color:#000">PATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$GOPATH</span>/bin:<span style="color:#000">$PATH</span></code></pre></div> -<h2 id="goimports">goimports</h2> -<pre><code>go get golang.org/x/tools/cmd/goimports -cd $GOPATH/src/golang.org/x/tools/cmd/goimports -go build -go install</code></pre> -<h2 id="golint">golint</h2> -<pre><code>go get -u golang.org/x/lint/golint -cd $GOPATH/src/golang.org/x/lint/golint -go build -go install</code></pre> -<h2 id="checkmake">checkmake</h2> -<pre><code>go get github.com/mrtazz/checkmake -cd $GOPATH/src/github.com/mrtazz/checkmake -go build -go install</code></pre> -<h2 id="staticcheck">staticcheck</h2> -<pre><code>mkdir -p $GOPATH/src/github.com/dominikh/ -cd $GOPATH/src/github.com/dominikh/ -git clone https://github.com/dominikh/go-tools.git -cd $GOPATH/src/github.com/dominikh/go-tools/staticcheck -go build -go install</code></pre> +<p>Packages:</p> +<ul> +<li> +<a href="#jenkins.io">jenkins.io</a> +</li> +</ul> +<h2 id="jenkins.io">jenkins.io</h2> +<p> +<p>Package v1alpha2 contains API Schema definitions for the jenkins.io v1alpha2 API group</p> +</p> +Resource Types: +<ul><li> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Jenkins">Jenkins</a> +</li></ul> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Jenkins">Jenkins +</h3> +<p> +<p>Jenkins is the Schema for the jenkins API</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>apiVersion</code></br> +string</td> +<td> +<code> +jenkins.io/v1alpha2 +</code> +</td> +</tr> +<tr> +<td> +<code>kind</code></br> +string +</td> +<td><code>Jenkins</code></td> +</tr> +<tr> +<td> +<code>metadata</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#objectmeta-v1-meta"> +Kubernetes meta/v1.ObjectMeta +</a> +</em> +</td> +<td> +Refer to the Kubernetes API documentation for the fields of the +<code>metadata</code> field. +</td> +</tr> +<tr> +<td> +<code>spec</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsSpec"> +JenkinsSpec +</a> +</em> +</td> +<td> +<p>Spec defines the desired state of the Jenkins</p> +<br/> +<br/> +<table> +<tr> +<td> +<code>master</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsMaster"> +JenkinsMaster +</a> +</em> +</td> +<td> +<p>Master represents Jenkins master pod properties and Jenkins plugins. +Every single change here requires a pod restart.</p> +</td> +</tr> +<tr> +<td> +<code>seedJobs</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>SeedJobs defines list of Jenkins Seed Job configurations +More info: <a href="https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration#configure-seed-jobs-and-pipelines">https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration#configure-seed-jobs-and-pipelines</a></p> +</td> +</tr> +<tr> +<td> +<code>notifications</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Notification"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Notification +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Notifications defines list of a services which are used to inform about Jenkins status +Can be used to integrate chat services like Slack, Microsoft Teams or Mailgun</p> +</td> +</tr> +<tr> +<td> +<code>service</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service"> +Service +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Service is Kubernetes service of Jenkins master HTTP pod +Defaults to : +port: 8080 +type: ClusterIP</p> +</td> +</tr> +<tr> +<td> +<code>slaveService</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service"> +Service +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Service is Kubernetes service of Jenkins slave pods +Defaults to : +port: 50000 +type: ClusterIP</p> +</td> +</tr> +<tr> +<td> +<code>backup</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Backup"> +Backup +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Backup defines configuration of Jenkins backup +More info: <a href="https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/">https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/</a></p> +</td> +</tr> +<tr> +<td> +<code>restore</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Restore"> +Restore +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Backup defines configuration of Jenkins backup restore +More info: <a href="https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/">https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/</a></p> +</td> +</tr> +<tr> +<td> +<code>groovyScripts</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.GroovyScripts"> +GroovyScripts +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>GroovyScripts defines configuration of Jenkins customization via groovy scripts</p> +</td> +</tr> +<tr> +<td> +<code>configurationAsCode</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ConfigurationAsCode"> +ConfigurationAsCode +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>ConfigurationAsCode defines configuration of Jenkins customization via Configuration as Code Jenkins plugin</p> +</td> +</tr> +<tr> +<td> +<code>roles</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#roleref-v1-rbac"> +[]Kubernetes rbac/v1.RoleRef +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Roles defines list of extra RBAC roles for the Jenkins Master pod service account</p> +</td> +</tr> +<tr> +<td> +<code>serviceAccount</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ServiceAccount"> +ServiceAccount +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>ServiceAccount defines Jenkins master service account attributes</p> +</td> +</tr> +<tr> +<td> +<code>jenkinsAPISettings</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsAPISettings"> +JenkinsAPISettings +</a> +</em> +</td> +<td> +<p>JenkinsAPISettings defines configuration used by the operator to gain admin access to the Jenkins API</p> +</td> +</tr> +</table> +</td> +</tr> +<tr> +<td> +<code>status</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsStatus"> +JenkinsStatus +</a> +</em> +</td> +<td> +<p>Status defines the observed state of Jenkins</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.AppliedGroovyScript">AppliedGroovyScript +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsStatus">JenkinsStatus</a>) +</p> +<p> +<p>AppliedGroovyScript is the applied groovy script in Jenkins by the operator.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>configurationType</code></br> +<em> +string +</em> +</td> +<td> +<p>ConfigurationType is the name of the configuration type(base-groovy, user-groovy, user-casc)</p> +</td> +</tr> +<tr> +<td> +<code>source</code></br> +<em> +string +</em> +</td> +<td> +<p>Source is the name of source where is located groovy script</p> +</td> +</tr> +<tr> +<td> +<code>name</code></br> +<em> +string +</em> +</td> +<td> +<p>Name is the name of the groovy script</p> +</td> +</tr> +<tr> +<td> +<code>hash</code></br> +<em> +string +</em> +</td> +<td> +<p>Hash is the hash of the groovy script and secrets which it uses</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.AuthorizationStrategy">AuthorizationStrategy +(<code>string</code> alias)</p></h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsAPISettings">JenkinsAPISettings</a>) +</p> +<p> +<p>AuthorizationStrategy defines authorization strategy of the operator for the Jenkins API</p> +</p> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Backup">Backup +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>Backup defines configuration of Jenkins backup.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>containerName</code></br> +<em> +string +</em> +</td> +<td> +<p>ContainerName is the container name responsible for backup operation</p> +</td> +</tr> +<tr> +<td> +<code>action</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Handler"> +Handler +</a> +</em> +</td> +<td> +<p>Action defines action which performs backup in backup container sidecar</p> +</td> +</tr> +<tr> +<td> +<code>interval</code></br> +<em> +uint64 +</em> +</td> +<td> +<p>Interval tells how often make backup in seconds +Defaults to 30.</p> +</td> +</tr> +<tr> +<td> +<code>makeBackupBeforePodDeletion</code></br> +<em> +bool +</em> +</td> +<td> +<p>MakeBackupBeforePodDeletion tells operator to make backup before Jenkins master pod deletion</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ConfigMapRef">ConfigMapRef +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Customization">Customization</a>) +</p> +<p> +<p>ConfigMapRef is reference to Kubernetes ConfigMap.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>name</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ConfigurationAsCode">ConfigurationAsCode +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>ConfigurationAsCode defines configuration of Jenkins customization via Configuration as Code Jenkins plugin.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>Customization</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Customization"> +Customization +</a> +</em> +</td> +<td> +<p> +(Members of <code>Customization</code> are embedded into this type.) +</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Container">Container +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsMaster">JenkinsMaster</a>) +</p> +<p> +<p>Container defines Kubernetes container attributes.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>name</code></br> +<em> +string +</em> +</td> +<td> +<p>Name of the container specified as a DNS_LABEL. +Each container in a pod must have a unique name (DNS_LABEL).</p> +</td> +</tr> +<tr> +<td> +<code>image</code></br> +<em> +string +</em> +</td> +<td> +<p>Docker image name. +More info: <a href="https://kubernetes.io/docs/concepts/containers/images">https://kubernetes.io/docs/concepts/containers/images</a></p> +</td> +</tr> +<tr> +<td> +<code>imagePullPolicy</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#pullpolicy-v1-core"> +Kubernetes core/v1.PullPolicy +</a> +</em> +</td> +<td> +<p>Image pull policy. +One of Always, Never, IfNotPresent. +Defaults to Always.</p> +</td> +</tr> +<tr> +<td> +<code>resources</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#resourcerequirements-v1-core"> +Kubernetes core/v1.ResourceRequirements +</a> +</em> +</td> +<td> +<p>Compute Resources required by this container. +More info: <a href="https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/">https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/</a></p> +</td> +</tr> +<tr> +<td> +<code>command</code></br> +<em> +[]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>Entrypoint array. Not executed within a shell. +The docker image&rsquo;s ENTRYPOINT is used if this is not provided. +Variable references $(VAR_NAME) are expanded using the container&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: <a href="https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell">https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell</a></p> +</td> +</tr> +<tr> +<td> +<code>args</code></br> +<em> +[]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>Arguments to the entrypoint. +The docker image&rsquo;s CMD is used if this is not provided. +Variable references $(VAR_NAME) are expanded using the container&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: <a href="https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell">https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell</a></p> +</td> +</tr> +<tr> +<td> +<code>workingDir</code></br> +<em> +string +</em> +</td> +<td> +<em>(Optional)</em> +<p>Container&rsquo;s working directory. +If not specified, the container runtime&rsquo;s default will be used, which +might be configured in the container image.</p> +</td> +</tr> +<tr> +<td> +<code>ports</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#containerport-v1-core"> +[]Kubernetes core/v1.ContainerPort +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>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 &ldquo;0.0.0.0&rdquo; address inside a container will be +accessible from the network.</p> +</td> +</tr> +<tr> +<td> +<code>envFrom</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envfromsource-v1-core"> +[]Kubernetes core/v1.EnvFromSource +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>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.</p> +</td> +</tr> +<tr> +<td> +<code>env</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envvar-v1-core"> +[]Kubernetes core/v1.EnvVar +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>List of environment variables to set in the container.</p> +</td> +</tr> +<tr> +<td> +<code>volumeMounts</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volumemount-v1-core"> +[]Kubernetes core/v1.VolumeMount +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Pod volumes to mount into the container&rsquo;s filesystem.</p> +</td> +</tr> +<tr> +<td> +<code>livenessProbe</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#probe-v1-core"> +Kubernetes core/v1.Probe +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Periodic probe of container liveness. +Container will be restarted if the probe fails.</p> +</td> +</tr> +<tr> +<td> +<code>readinessProbe</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#probe-v1-core"> +Kubernetes core/v1.Probe +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Periodic probe of container service readiness. +Container will be removed from service endpoints if the probe fails.</p> +</td> +</tr> +<tr> +<td> +<code>lifecycle</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#lifecycle-v1-core"> +Kubernetes core/v1.Lifecycle +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Actions that the management system should take in response to container lifecycle events.</p> +</td> +</tr> +<tr> +<td> +<code>securityContext</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#securitycontext-v1-core"> +Kubernetes core/v1.SecurityContext +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Security options the pod should run with. +More info: <a href="https://kubernetes.io/docs/concepts/policy/security-context/">https://kubernetes.io/docs/concepts/policy/security-context/</a> +More info: <a href="https://kubernetes.io/docs/tasks/configure-pod-container/security-context/">https://kubernetes.io/docs/tasks/configure-pod-container/security-context/</a></p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Customization">Customization +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.ConfigurationAsCode">ConfigurationAsCode</a>, +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.GroovyScripts">GroovyScripts</a>) +</p> +<p> +<p>Customization defines configuration of Jenkins customization.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>secret</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SecretRef"> +SecretRef +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>configurations</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ConfigMapRef"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ConfigMapRef +</a> +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.GroovyScripts">GroovyScripts +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>GroovyScripts defines configuration of Jenkins customization via groovy scripts.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>Customization</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Customization"> +Customization +</a> +</em> +</td> +<td> +<p> +(Members of <code>Customization</code> are embedded into this type.) +</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Handler">Handler +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Backup">Backup</a>, +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Restore">Restore</a>) +</p> +<p> +<p>Handler defines a specific action that should be taken.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>exec</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#execaction-v1-core"> +Kubernetes core/v1.ExecAction +</a> +</em> +</td> +<td> +<p>Exec specifies the action to take.</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Image">Image +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsImageSpec">JenkinsImageSpec</a>) +</p> +<p> +<p>Defines Jenkins Plugin structure</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>name</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>version</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsAPISettings">JenkinsAPISettings +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>JenkinsAPISettings defines configuration used by the operator to gain admin access to the Jenkins API</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>authorizationStrategy</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.AuthorizationStrategy"> +AuthorizationStrategy +</a> +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsCredentialType">JenkinsCredentialType +(<code>string</code> alias)</p></h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.SeedJob">SeedJob</a>) +</p> +<p> +<p>JenkinsCredentialType defines type of Jenkins credential used to seed job mechanism.</p> +</p> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsImage">JenkinsImage +</h3> +<p> +<p>JenkinsImage is the Schema for the jenkinsimages API</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>metadata</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#objectmeta-v1-meta"> +Kubernetes meta/v1.ObjectMeta +</a> +</em> +</td> +<td> +Refer to the Kubernetes API documentation for the fields of the +<code>metadata</code> field. +</td> +</tr> +<tr> +<td> +<code>spec</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsImageSpec"> +JenkinsImageSpec +</a> +</em> +</td> +<td> +<br/> +<br/> +<table> +<tr> +<td> +<code>image</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Image"> +Image +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>plugins</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsPlugin"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsPlugin +</a> +</em> +</td> +<td> +</td> +</tr> +</table> +</td> +</tr> +<tr> +<td> +<code>status</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsImageStatus"> +JenkinsImageStatus +</a> +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsImageSpec">JenkinsImageSpec +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsImage">JenkinsImage</a>) +</p> +<p> +<p>JenkinsImageSpec defines the desired state of JenkinsImage</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>image</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Image"> +Image +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>plugins</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsPlugin"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsPlugin +</a> +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsImageStatus">JenkinsImageStatus +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsImage">JenkinsImage</a>) +</p> +<p> +<p>JenkinsImageStatus defines the observed state of JenkinsImage</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>image</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>md5sum</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>installedPlugins</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsPlugin"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsPlugin +</a> +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsMaster">JenkinsMaster +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>JenkinsMaster defines the Jenkins master pod attributes and plugins, +every single change requires a Jenkins master pod restart.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>annotations</code></br> +<em> +map[string]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>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: <a href="http://kubernetes.io/docs/user-guide/annotations">http://kubernetes.io/docs/user-guide/annotations</a></p> +</td> +</tr> +<tr> +<td> +<code>masterAnnotations</code></br> +<em> +map[string]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>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: <a href="http://kubernetes.io/docs/user-guide/annotations">http://kubernetes.io/docs/user-guide/annotations</a> +Deprecated: will be removed in the future, please use Annotations(annotations)</p> +</td> +</tr> +<tr> +<td> +<code>labels</code></br> +<em> +map[string]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>Map of string keys and values that can be used to organize and categorize +(scope and select) objects. May match selectors of replication controllers +and services. +More info: <a href="http://kubernetes.io/docs/user-guide/labels">http://kubernetes.io/docs/user-guide/labels</a></p> +</td> +</tr> +<tr> +<td> +<code>nodeSelector</code></br> +<em> +map[string]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>NodeSelector is a selector which must be true for the pod to fit on a node. +Selector which must match a node&rsquo;s labels for the pod to be scheduled on that node. +More info: <a href="https://kubernetes.io/docs/concepts/configuration/assign-pod-node/">https://kubernetes.io/docs/concepts/configuration/assign-pod-node/</a></p> +</td> +</tr> +<tr> +<td> +<code>securityContext</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#podsecuritycontext-v1-core"> +Kubernetes core/v1.PodSecurityContext +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>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</p> +</td> +</tr> +<tr> +<td> +<code>containers</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Container"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Container +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>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: &ldquo;1&rdquo; +memory: 600Mi</p> +</td> +</tr> +<tr> +<td> +<code>imagePullSecrets</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#localobjectreference-v1-core"> +[]Kubernetes core/v1.LocalObjectReference +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. +If specified, these secrets will be passed to individual puller implementations for them to use. For example, +in the case of docker, only DockerConfig type secrets are honored. +More info: <a href="https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod">https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod</a></p> +</td> +</tr> +<tr> +<td> +<code>volumes</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volume-v1-core"> +[]Kubernetes core/v1.Volume +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>List of volumes that can be mounted by containers belonging to the pod. +More info: <a href="https://kubernetes.io/docs/concepts/storage/volumes">https://kubernetes.io/docs/concepts/storage/volumes</a></p> +</td> +</tr> +<tr> +<td> +<code>tolerations</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#toleration-v1-core"> +[]Kubernetes core/v1.Toleration +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>If specified, the pod&rsquo;s tolerations.</p> +</td> +</tr> +<tr> +<td> +<code>basePlugins</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>BasePlugins contains plugins required by operator +Defaults to : +- name: kubernetes +version: &ldquo;1.28.6&rdquo; +- name: workflow-job +version: &ldquo;2.40&rdquo; +- name: workflow-aggregator +version: &ldquo;2.6&rdquo; +- name: git +version: &ldquo;4.5.0&rdquo; +- name: job-dsl +version: &ldquo;1.77&rdquo; +- name: configuration-as-code +version: &ldquo;1.46&rdquo; +- name: kubernetes-credentials-provider +version: &ldquo;0.15&rdquo;</p> +</td> +</tr> +<tr> +<td> +<code>plugins</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Plugins contains plugins required by user</p> +</td> +</tr> +<tr> +<td> +<code>disableCSRFProtection</code></br> +<em> +bool +</em> +</td> +<td> +<p>DisableCSRFProtection allows you to toggle CSRF Protection on Jenkins</p> +</td> +</tr> +<tr> +<td> +<code>priorityClassName</code></br> +<em> +string +</em> +</td> +<td> +<em>(Optional)</em> +<p>PriorityClassName for Jenkins master pod</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsPlugin">JenkinsPlugin +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsImageSpec">JenkinsImageSpec</a>, +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsImageStatus">JenkinsImageStatus</a>) +</p> +<p> +<p>Defines Jenkins Plugin structure</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>name</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>version</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsSpec">JenkinsSpec +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Jenkins">Jenkins</a>) +</p> +<p> +<p>JenkinsSpec defines the desired state of the Jenkins.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>master</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsMaster"> +JenkinsMaster +</a> +</em> +</td> +<td> +<p>Master represents Jenkins master pod properties and Jenkins plugins. +Every single change here requires a pod restart.</p> +</td> +</tr> +<tr> +<td> +<code>seedJobs</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>SeedJobs defines list of Jenkins Seed Job configurations +More info: <a href="https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration#configure-seed-jobs-and-pipelines">https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration#configure-seed-jobs-and-pipelines</a></p> +</td> +</tr> +<tr> +<td> +<code>notifications</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Notification"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Notification +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Notifications defines list of a services which are used to inform about Jenkins status +Can be used to integrate chat services like Slack, Microsoft Teams or Mailgun</p> +</td> +</tr> +<tr> +<td> +<code>service</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service"> +Service +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Service is Kubernetes service of Jenkins master HTTP pod +Defaults to : +port: 8080 +type: ClusterIP</p> +</td> +</tr> +<tr> +<td> +<code>slaveService</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service"> +Service +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Service is Kubernetes service of Jenkins slave pods +Defaults to : +port: 50000 +type: ClusterIP</p> +</td> +</tr> +<tr> +<td> +<code>backup</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Backup"> +Backup +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Backup defines configuration of Jenkins backup +More info: <a href="https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/">https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/</a></p> +</td> +</tr> +<tr> +<td> +<code>restore</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Restore"> +Restore +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Backup defines configuration of Jenkins backup restore +More info: <a href="https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/">https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/</a></p> +</td> +</tr> +<tr> +<td> +<code>groovyScripts</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.GroovyScripts"> +GroovyScripts +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>GroovyScripts defines configuration of Jenkins customization via groovy scripts</p> +</td> +</tr> +<tr> +<td> +<code>configurationAsCode</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ConfigurationAsCode"> +ConfigurationAsCode +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>ConfigurationAsCode defines configuration of Jenkins customization via Configuration as Code Jenkins plugin</p> +</td> +</tr> +<tr> +<td> +<code>roles</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#roleref-v1-rbac"> +[]Kubernetes rbac/v1.RoleRef +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Roles defines list of extra RBAC roles for the Jenkins Master pod service account</p> +</td> +</tr> +<tr> +<td> +<code>serviceAccount</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ServiceAccount"> +ServiceAccount +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>ServiceAccount defines Jenkins master service account attributes</p> +</td> +</tr> +<tr> +<td> +<code>jenkinsAPISettings</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsAPISettings"> +JenkinsAPISettings +</a> +</em> +</td> +<td> +<p>JenkinsAPISettings defines configuration used by the operator to gain admin access to the Jenkins API</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsStatus">JenkinsStatus +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Jenkins">Jenkins</a>) +</p> +<p> +<p>JenkinsStatus defines the observed state of Jenkins</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>operatorVersion</code></br> +<em> +string +</em> +</td> +<td> +<em>(Optional)</em> +<p>OperatorVersion is the operator version which manages this CR</p> +</td> +</tr> +<tr> +<td> +<code>provisionStartTime</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#time-v1-meta"> +Kubernetes meta/v1.Time +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>ProvisionStartTime is a time when Jenkins master pod has been created</p> +</td> +</tr> +<tr> +<td> +<code>baseConfigurationCompletedTime</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#time-v1-meta"> +Kubernetes meta/v1.Time +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>BaseConfigurationCompletedTime is a time when Jenkins base configuration phase has been completed</p> +</td> +</tr> +<tr> +<td> +<code>userConfigurationCompletedTime</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#time-v1-meta"> +Kubernetes meta/v1.Time +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>UserConfigurationCompletedTime is a time when Jenkins user configuration phase has been completed</p> +</td> +</tr> +<tr> +<td> +<code>restoredBackup</code></br> +<em> +uint64 +</em> +</td> +<td> +<em>(Optional)</em> +<p>RestoredBackup is the restored backup number after Jenkins master pod restart</p> +</td> +</tr> +<tr> +<td> +<code>lastBackup</code></br> +<em> +uint64 +</em> +</td> +<td> +<em>(Optional)</em> +<p>LastBackup is the latest backup number</p> +</td> +</tr> +<tr> +<td> +<code>pendingBackup</code></br> +<em> +uint64 +</em> +</td> +<td> +<em>(Optional)</em> +<p>PendingBackup is the pending backup number</p> +</td> +</tr> +<tr> +<td> +<code>backupDoneBeforePodDeletion</code></br> +<em> +bool +</em> +</td> +<td> +<em>(Optional)</em> +<p>BackupDoneBeforePodDeletion tells if backup before pod deletion has been made</p> +</td> +</tr> +<tr> +<td> +<code>userAndPasswordHash</code></br> +<em> +string +</em> +</td> +<td> +<em>(Optional)</em> +<p>UserAndPasswordHash is a SHA256 hash made from user and password</p> +</td> +</tr> +<tr> +<td> +<code>createdSeedJobs</code></br> +<em> +[]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>CreatedSeedJobs contains list of seed job id already created in Jenkins</p> +</td> +</tr> +<tr> +<td> +<code>appliedGroovyScripts</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.AppliedGroovyScript"> +[][]github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.AppliedGroovyScript +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>AppliedGroovyScripts is a list with all applied groovy scripts in Jenkins by the operator</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Mailgun">Mailgun +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Notification">Notification</a>) +</p> +<p> +<p>Mailgun is handler for Mailgun email service notification channel.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>domain</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>apiKeySecretKeySelector</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SecretKeySelector"> +SecretKeySelector +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>recipient</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>from</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.MicrosoftTeams">MicrosoftTeams +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Notification">Notification</a>) +</p> +<p> +<p>MicrosoftTeams is handler for Microsoft MicrosoftTeams notification channel.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>webHookURLSecretKeySelector</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SecretKeySelector"> +SecretKeySelector +</a> +</em> +</td> +<td> +<p>The web hook URL to MicrosoftTeams App</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Notification">Notification +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>Notification is a service configuration used to send notifications about Jenkins status.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>level</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.NotificationLevel"> +NotificationLevel +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>verbose</code></br> +<em> +bool +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>name</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>slack</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Slack"> +github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Slack +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>teams</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.MicrosoftTeams"> +github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.MicrosoftTeams +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>mailgun</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Mailgun"> +github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Mailgun +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>smtp</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SMTP"> +github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SMTP +</a> +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.NotificationLevel">NotificationLevel +(<code>string</code> alias)</p></h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Notification">Notification</a>) +</p> +<p> +<p>NotificationLevel defines the level of a Notification.</p> +</p> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Plugin">Plugin +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsMaster">JenkinsMaster</a>) +</p> +<p> +<p>Plugin defines Jenkins plugin.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>name</code></br> +<em> +string +</em> +</td> +<td> +<p>Name is the name of Jenkins plugin</p> +</td> +</tr> +<tr> +<td> +<code>version</code></br> +<em> +string +</em> +</td> +<td> +<p>Version is the version of Jenkins plugin</p> +</td> +</tr> +<tr> +<td> +<code>downloadURL</code></br> +<em> +string +</em> +</td> +<td> +<p>DownloadURL is the custom url from where plugin has to be downloaded.</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Restore">Restore +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>Restore defines configuration of Jenkins backup restore operation.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>containerName</code></br> +<em> +string +</em> +</td> +<td> +<p>ContainerName is the container name responsible for restore backup operation</p> +</td> +</tr> +<tr> +<td> +<code>action</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Handler"> +Handler +</a> +</em> +</td> +<td> +<p>Action defines action which performs restore backup in restore container sidecar</p> +</td> +</tr> +<tr> +<td> +<code>getLatestAction</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Handler"> +Handler +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>GetLatestAction defines action which returns the latest backup number. If there is no backup &ldquo;-1&rdquo; should be +returned.</p> +</td> +</tr> +<tr> +<td> +<code>recoveryOnce</code></br> +<em> +uint64 +</em> +</td> +<td> +<em>(Optional)</em> +<p>RecoveryOnce if want to restore specific backup set this field and then Jenkins will be restarted and desired backup will be restored</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SMTP">SMTP +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Notification">Notification</a>) +</p> +<p> +<p>SMTP is handler for sending emails via this protocol.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>usernameSecretKeySelector</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SecretKeySelector"> +SecretKeySelector +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>passwordSecretKeySelector</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SecretKeySelector"> +SecretKeySelector +</a> +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>port</code></br> +<em> +int +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>server</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>tlsInsecureSkipVerify</code></br> +<em> +bool +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>from</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +<tr> +<td> +<code>to</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SecretKeySelector">SecretKeySelector +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Mailgun">Mailgun</a>, +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.MicrosoftTeams">MicrosoftTeams</a>, +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.SMTP">SMTP</a>, +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Slack">Slack</a>) +</p> +<p> +<p>SecretKeySelector selects a key of a Secret.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>secret</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#localobjectreference-v1-core"> +Kubernetes core/v1.LocalObjectReference +</a> +</em> +</td> +<td> +<p>The name of the secret in the pod&rsquo;s namespace to select from.</p> +</td> +</tr> +<tr> +<td> +<code>key</code></br> +<em> +string +</em> +</td> +<td> +<p>The key of the secret to select from. Must be a valid secret key.</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SecretRef">SecretRef +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Customization">Customization</a>) +</p> +<p> +<p>SecretRef is reference to Kubernetes secret.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>name</code></br> +<em> +string +</em> +</td> +<td> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SeedJob">SeedJob +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>SeedJob defines configuration for seed job +More info: <a href="https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration/#configure-seed-jobs-and-pipelines">https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration/#configure-seed-jobs-and-pipelines</a>.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>id</code></br> +<em> +string +</em> +</td> +<td> +<p>ID is the unique seed job name</p> +</td> +</tr> +<tr> +<td> +<code>credentialID</code></br> +<em> +string +</em> +</td> +<td> +<p>CredentialID is the Kubernetes secret name which stores repository access credentials</p> +</td> +</tr> +<tr> +<td> +<code>description</code></br> +<em> +string +</em> +</td> +<td> +<em>(Optional)</em> +<p>Description is the description of the seed job</p> +</td> +</tr> +<tr> +<td> +<code>targets</code></br> +<em> +string +</em> +</td> +<td> +<p>Targets is the repository path where are seed job definitions</p> +</td> +</tr> +<tr> +<td> +<code>repositoryBranch</code></br> +<em> +string +</em> +</td> +<td> +<p>RepositoryBranch is the repository branch where are seed job definitions</p> +</td> +</tr> +<tr> +<td> +<code>repositoryUrl</code></br> +<em> +string +</em> +</td> +<td> +<p>RepositoryURL is the repository access URL. Can be SSH or HTTPS.</p> +</td> +</tr> +<tr> +<td> +<code>credentialType</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.JenkinsCredentialType"> +JenkinsCredentialType +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>JenkinsCredentialType is the <a href="https://jenkinsci.github.io/kubernetes-credentials-provider-plugin/">https://jenkinsci.github.io/kubernetes-credentials-provider-plugin/</a> credential type</p> +</td> +</tr> +<tr> +<td> +<code>bitbucketPushTrigger</code></br> +<em> +bool +</em> +</td> +<td> +<em>(Optional)</em> +<p>BitbucketPushTrigger is used for Bitbucket web hooks</p> +</td> +</tr> +<tr> +<td> +<code>githubPushTrigger</code></br> +<em> +bool +</em> +</td> +<td> +<em>(Optional)</em> +<p>GitHubPushTrigger is used for GitHub web hooks</p> +</td> +</tr> +<tr> +<td> +<code>buildPeriodically</code></br> +<em> +string +</em> +</td> +<td> +<em>(Optional)</em> +<p>BuildPeriodically is setting for scheduled trigger</p> +</td> +</tr> +<tr> +<td> +<code>pollSCM</code></br> +<em> +string +</em> +</td> +<td> +<em>(Optional)</em> +<p>PollSCM is setting for polling changes in SCM</p> +</td> +</tr> +<tr> +<td> +<code>ignoreMissingFiles</code></br> +<em> +bool +</em> +</td> +<td> +<em>(Optional)</em> +<p>IgnoreMissingFiles is setting for Job DSL API plugin to ignore files that miss</p> +</td> +</tr> +<tr> +<td> +<code>additionalClasspath</code></br> +<em> +string +</em> +</td> +<td> +<em>(Optional)</em> +<p>AdditionalClasspath is setting for Job DSL API plugin to set Additional Classpath</p> +</td> +</tr> +<tr> +<td> +<code>failOnMissingPlugin</code></br> +<em> +bool +</em> +</td> +<td> +<em>(Optional)</em> +<p>FailOnMissingPlugin is setting for Job DSL API plugin that fails job if required plugin is missing</p> +</td> +</tr> +<tr> +<td> +<code>unstableOnDeprecation</code></br> +<em> +bool +</em> +</td> +<td> +<em>(Optional)</em> +<p>UnstableOnDeprecation is setting for Job DSL API plugin that sets build status as unstable if build using deprecated features</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Service">Service +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>Service defines Kubernetes service attributes</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>annotations</code></br> +<em> +map[string]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>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: <a href="http://kubernetes.io/docs/user-guide/annotations">http://kubernetes.io/docs/user-guide/annotations</a></p> +</td> +</tr> +<tr> +<td> +<code>labels</code></br> +<em> +map[string]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>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: <a href="https://kubernetes.io/docs/concepts/services-networking/service/">https://kubernetes.io/docs/concepts/services-networking/service/</a></p> +</td> +</tr> +<tr> +<td> +<code>type</code></br> +<em> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#servicetype-v1-core"> +Kubernetes core/v1.ServiceType +</a> +</em> +</td> +<td> +<em>(Optional)</em> +<p>Type determines how the Service is exposed. Defaults to ClusterIP. Valid +options are ExternalName, ClusterIP, NodePort, and LoadBalancer. +&ldquo;ExternalName&rdquo; maps to the specified externalName. +&ldquo;ClusterIP&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 +&ldquo;None&rdquo;, no virtual IP is allocated and the endpoints are published as a +set of endpoints rather than a stable IP. +&ldquo;NodePort&rdquo; builds on ClusterIP and allocates a port on every node which +routes to the clusterIP. +&ldquo;LoadBalancer&rdquo; builds on NodePort and creates an +external load-balancer (if supported in the current cloud) which routes +to the clusterIP. +More info: <a href="https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types">https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services&mdash;service-types</a></p> +</td> +</tr> +<tr> +<td> +<code>port</code></br> +<em> +int32 +</em> +</td> +<td> +<p>The port that are exposed by this service. +More info: <a href="https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies">https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies</a></p> +</td> +</tr> +<tr> +<td> +<code>nodePort</code></br> +<em> +int32 +</em> +</td> +<td> +<em>(Optional)</em> +<p>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: <a href="https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport">https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport</a></p> +</td> +</tr> +<tr> +<td> +<code>loadBalancerSourceRanges</code></br> +<em> +[]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>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.&rdquo; +More info: <a href="https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/#restricting-cloud-metadata-api-access">https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/#restricting-cloud-metadata-api-access</a></p> +</td> +</tr> +<tr> +<td> +<code>loadBalancerIP</code></br> +<em> +string +</em> +</td> +<td> +<em>(Optional)</em> +<p>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.</p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ServiceAccount">ServiceAccount +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.JenkinsSpec">JenkinsSpec</a>) +</p> +<p> +<p>ServiceAccount defines Kubernetes service account attributes</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>annotations</code></br> +<em> +map[string]string +</em> +</td> +<td> +<em>(Optional)</em> +<p>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: <a href="http://kubernetes.io/docs/user-guide/annotations">http://kubernetes.io/docs/user-guide/annotations</a></p> +</td> +</tr> +</tbody> +</table> +<h3 id="github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.Slack">Slack +</h3> +<p> +(<em>Appears on:</em> +<a href="#github.com%2fjenkinsci%2fkubernetes-operator%2fpkg%2fapis%2fjenkins%2fv1alpha2.Notification">Notification</a>) +</p> +<p> +<p>Slack is handler for Slack notification channel.</p> +</p> +<table> +<thead> +<tr> +<th>Field</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<code>webHookURLSecretKeySelector</code></br> +<em> +<a href="#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.SecretKeySelector"> +SecretKeySelector +</a> +</em> +</td> +<td> +<p>The web hook URL to Slack App</p> +</td> +</tr> +</tbody> +</table> +<hr/> +<p><em> +Generated with <code>gen-crd-api-reference-docs</code> +on git commit <code>fe81e5a</code>. +</em></p> + diff --git a/docs/docs/developer-guide/tools/index.html b/docs/docs/security/index.html similarity index 76% rename from docs/docs/developer-guide/tools/index.html rename to docs/docs/security/index.html index ddcd4c68..d178f9ba 100644 --- a/docs/docs/developer-guide/tools/index.html +++ b/docs/docs/security/index.html @@ -7,6 +7,7 @@ + @@ -20,25 +21,17 @@ -Tools | Jenkins Operator - + - - - - - - - - - - - - - - - + + + + + + @@ -54,9 +47,9 @@ crossorigin="anonymous"> - Tools | Jenkins Operator + Security | Jenkins Operator - +
    @@ -796,9 +800,6 @@ - - - @@ -806,15 +807,8 @@ - - - - - @@ -822,51 +816,230 @@
    -

    Tools

    -
    Required tools for building and running Jenkins Operator
    +

    Security

    +
    Jenkins security and hardening out of the box
    +

    By default Jenkins Operator performs an initial security hardening of Jenkins instance +via groovy scripts to prevent any security gaps.

    +

    Jenkins Access Control

    -
    -

    This document explains how to install the Go tools used by the development process.

    +

    Currently Jenkins Operator generates a username and random password and stores them in a Kubernetes Secret. +However any other authorization mechanisms are possible and can be done via groovy scripts or configuration as code plugin. +For more information take a look at the section on customizing Jenkins.

    +

    Any change to Security Realm or Authorization requires that user called jenkins-operator must have admin rights +because Jenkins Operator calls Jenkins API.

    + +

    Jenkins Hardening

    + +

    The list below describes all the default security setting configured by the Jenkins Operator:

    + +
      +
    • basic settings - use Mode.EXCLUSIVE - Jobs must specify that they want to run on master node
    • +
    • enable CSRF - Cross Site Request Forgery Protection is enabled
    • +
    • disable usage stats - Jenkins usage stats submitting is disabled
    • +
    • enable master access control - Slave to Master Access Control is enabled
    • +
    • disable old JNLP protocols - JNLP3-connect, JNLP2-connect and JNLP-connect are disabled
    • +
    • disable CLI - CLI access of /cli URL is disabled
    • +
    • configure kubernetes-plugin - secure configuration for Kubernetes plugin
    • +
    + +

    If you would like to dig a little bit into the code, take a look here.

    + +

    Jenkins API

    + +

    The Jenkins Operator generates and configures Basic Authentication token for Jenkins Go client +and stores it in a Kubernetes Secret.

    + +

    Kubernetes

    + +

    Kubernetes API permissions are limited by the following roles:

    + + + +

    Since Jenkins Operator must be able to grant permission for its deployed Jenkins masters +to spawn pods (the Jenkins Master role above), +the operator itself requires permission to create RBAC resources (the jenkins-operator role above).

    + +

    Deployed this way, any subject which may create a Pod (including a Jenkins job) may +assume the jenkins-operator role by using its’ ServiceAccount, create RBAC rules, and thus escape its granted permissions. +Any namespace to which the jenkins-operator is deployed must be considered to implicitly grant all +possible permissions to any subject which can create a Pod in that namespace.

    + +

    To mitigate this issue, Jenkins Operator should be deployed in one namespace, and the Jenkins CR should be created in +a separate namespace. For instructions on how to deploy Jenkins Operator and Jenkins in separate namespaces, head over +to the Separate namespaces section of Getting Started +guide.

    + +

    Report a Security Vulnerability

    + +

    If you find a vulnerability or any misconfiguration in Jenkins, please report it in the issues.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    - -

    Configure environment variables

    -
    export GOPATH=/home/go # example value
    -export GOROOT=/usr/lib/go-1.12 # example value
    -export PATH=$GOPATH/bin:$PATH
    -

    goimports

    -
    go get golang.org/x/tools/cmd/goimports
    -cd $GOPATH/src/golang.org/x/tools/cmd/goimports
    -go build
    -go install
    -

    golint

    -
    go get -u golang.org/x/lint/golint
    -cd  $GOPATH/src/golang.org/x/lint/golint
    -go build
    -go install
    -

    checkmake

    -
    go get github.com/mrtazz/checkmake
    -cd $GOPATH/src/github.com/mrtazz/checkmake
    -go build
    -go install
    -

    staticcheck

    -
    mkdir -p $GOPATH/src/github.com/dominikh/
    -cd $GOPATH/src/github.com/dominikh/
    -git clone https://github.com/dominikh/go-tools.git
    -cd  $GOPATH/src/github.com/dominikh/go-tools/staticcheck
    -go build
    -go install
    -
    Last modified August 5, 2019 +
    Last modified October 6, 2021
    -
    diff --git a/docs/docs/security/index.xml b/docs/docs/security/index.xml new file mode 100644 index 00000000..10fcf5b5 --- /dev/null +++ b/docs/docs/security/index.xml @@ -0,0 +1,23 @@ + + + Jenkins Operator – Security + https://jenkinsci.github.io/kubernetes-operator/docs/security/ + Recent Hugo news from gohugo.io + Hugo -- gohugo.io + Wed, 06 Oct 2021 00:00:00 +0000 + + https://jenkinsci.github.io/kubernetes-operator/img/hugo.png + GoHugo.io + https://jenkinsci.github.io/kubernetes-operator/docs/security/ + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/troubleshooting/index.html b/docs/docs/troubleshooting/index.html index 3ced57bd..339c2d06 100644 --- a/docs/docs/troubleshooting/index.html +++ b/docs/docs/troubleshooting/index.html @@ -22,16 +22,16 @@ Troubleshooting | Jenkins Operator - - + - - @@ -212,24 +212,18 @@ + Separate namespaces for Jenkins and Operator + + + + + Custom backup and restore providers - Notifications - - - - - - Security - - - - - AKS @@ -662,6 +656,29 @@ + + + + + + + + + + + + @@ -806,7 +817,7 @@

    Troubleshooting

    -
    Jenkins security and hardening out of the box
    +
    Troubleshooting Jenkins Operator

    This document helps you to state the reason for an error in the Jenkins Operator, which is the first step in solving it.

    @@ -815,7 +826,7 @@

    Jenkins Operator can provide some useful logs. To get them, run:

    $ kubectl logs <controller-manager-pod-name> -f 
    -

    In the logs look for WARNING, ERROR and SEVERE keywords.

    +

    In the logs look for WARNING, ERROR and SEVERE keywords.

    Jenkins logs

    @@ -840,7 +851,7 @@ and the rest will be discarded. Chances are the buggy part will be gone.

    $ kubectl delete pod <jenkins-pod>

    Operator debug mode

    -

    If you need to access additional logs from the Operator, you can run it in debug mode. To do that, add "--debug"" +

    If you need to access additional logs from the Operator, you can run it in debug mode. To do that, add "--debug" argument to jenkins-operator container args in your Operator deployment.

    @@ -991,8 +1002,6 @@ argument to jenkins-operator container args in your Operator deployment.

    - - @@ -1001,7 +1010,7 @@ argument to jenkins-operator container args in your Operator deployment.

    -
    Last modified August 19, 2021 +
    Last modified October 6, 2021
    diff --git a/docs/docs/troubleshooting/index.xml b/docs/docs/troubleshooting/index.xml index 1c47c314..50c731d3 100644 --- a/docs/docs/troubleshooting/index.xml +++ b/docs/docs/troubleshooting/index.xml @@ -4,7 +4,7 @@ https://jenkinsci.github.io/kubernetes-operator/docs/troubleshooting/ Recent Hugo news from gohugo.io Hugo -- gohugo.io - Thu, 19 Aug 2021 00:00:00 +0000 + Wed, 06 Oct 2021 00:00:00 +0000 https://jenkinsci.github.io/kubernetes-operator/img/hugo.png GoHugo.io diff --git a/docs/index.html b/docs/index.html index b3e52d78..d9cd9ff7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -25,7 +25,7 @@ - + diff --git a/docs/index.xml b/docs/index.xml index e8ec76e6..2f2c250d 100644 --- a/docs/index.xml +++ b/docs/index.xml @@ -4,7 +4,7 @@ https://jenkinsci.github.io/kubernetes-operator/ Recent Hugo news from gohugo.io Hugo -- gohugo.io - Fri, 01 Oct 2021 00:00:00 +0000 + Wed, 06 Oct 2021 00:00:00 +0000 https://jenkinsci.github.io/kubernetes-operator/img/hugo.png GoHugo.io diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 2c1c1499..d659728c 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -48,13 +48,13 @@ - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.5.x/configuration/ - 2021-10-01T00:00:00+00:00 + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/deploying-jenkins/ + 2021-10-06T00:00:00+00:00 - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/deploying-jenkins/ - 2021-08-19T00:00:00+00:00 + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.5.x/configuration/ + 2021-10-01T00:00:00+00:00 @@ -87,6 +87,11 @@ 2019-08-05T00:00:00+00:00 + + https://jenkinsci.github.io/kubernetes-operator/docs/security/ + 2021-10-06T00:00:00+00:00 + + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.5.x/customization/ 2021-10-01T00:00:00+00:00 @@ -97,11 +102,6 @@ 2021-08-20T00:00:00+00:00 - - https://jenkinsci.github.io/kubernetes-operator/docs/troubleshooting/ - 2021-08-19T00:00:00+00:00 - - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.4.x/ 2021-08-19T00:00:00+00:00 @@ -128,8 +128,8 @@ - https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/ - 2021-10-01T00:00:00+00:00 + https://jenkinsci.github.io/kubernetes-operator/docs/troubleshooting/ + 2021-10-06T00:00:00+00:00 @@ -142,6 +142,11 @@ 2021-08-19T00:00:00+00:00 + + https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/ + 2021-10-06T00:00:00+00:00 + + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuring-backup-and-restore/ 2021-08-19T00:00:00+00:00 @@ -153,8 +158,8 @@ - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/custom-backup-and-restore/ - 2021-08-19T00:00:00+00:00 + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/separate-namespaces/ + 2021-10-06T00:00:00+00:00 @@ -168,18 +173,13 @@ - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/notifications/ - 2021-08-19T00:00:00+00:00 - - - - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/security/ - 2021-08-20T00:00:00+00:00 + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/custom-backup-and-restore/ + 2021-10-06T00:00:00+00:00 https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/aks/ - 2021-08-19T00:00:00+00:00 + 2021-10-06T00:00:00+00:00 @@ -317,11 +317,6 @@ 2018-01-04T00:00:00+00:00 - - https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/tools/ - 2019-08-05T00:00:00+00:00 - - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.5.x/diagnostics/ 2021-01-18T00:00:00+00:00 @@ -379,7 +374,7 @@ https://jenkinsci.github.io/kubernetes-operator/ - 2021-10-01T00:00:00+00:00 + 2021-10-06T00:00:00+00:00 diff --git a/website/content/en/docs/Developer Guide/_index.md b/website/content/en/docs/Developer Guide/_index.md index 4157a8c8..57801ec5 100644 --- a/website/content/en/docs/Developer Guide/_index.md +++ b/website/content/en/docs/Developer Guide/_index.md @@ -2,7 +2,7 @@ title: "Developer Guide" linkTitle: "Developer Guide" weight: 5 -date: 2021-10-01 +date: 2021-10-06 description: > Jenkins Operator for developers --- diff --git a/website/content/en/docs/Getting Started/latest/aks.md b/website/content/en/docs/Getting Started/latest/aks.md index 8c190b9d..9ea287bc 100644 --- a/website/content/en/docs/Getting Started/latest/aks.md +++ b/website/content/en/docs/Getting Started/latest/aks.md @@ -2,7 +2,7 @@ title: "AKS" linkTitle: "AKS" weight: 8 -date: 2021-08-19 +date: 2021-10-06 description: > Additional configuration for Azure Kubernetes Service --- diff --git a/website/content/en/docs/Getting Started/latest/custom-backup-and-restore.md b/website/content/en/docs/Getting Started/latest/custom-backup-and-restore.md index da4258d3..c1cc883c 100644 --- a/website/content/en/docs/Getting Started/latest/custom-backup-and-restore.md +++ b/website/content/en/docs/Getting Started/latest/custom-backup-and-restore.md @@ -2,7 +2,7 @@ title: "Custom backup and restore providers" linkTitle: "Custom backup and restore providers" weight: 7 -date: 2021-08-19 +date: 2021-10-06 description: > Custom backup and restore provider --- diff --git a/website/content/en/docs/Getting Started/latest/deploying-jenkins.md b/website/content/en/docs/Getting Started/latest/deploying-jenkins.md index a178012c..fc51ff39 100644 --- a/website/content/en/docs/Getting Started/latest/deploying-jenkins.md +++ b/website/content/en/docs/Getting Started/latest/deploying-jenkins.md @@ -2,7 +2,7 @@ title: "Deploying Jenkins" linkTitle: "Deploying Jenkins" weight: 2 -date: 2021-08-19 +date: 2021-10-06 description: > Deploy production ready Jenkins manifest --- diff --git a/website/content/en/docs/Getting Started/latest/separate-namespaces.md b/website/content/en/docs/Getting Started/latest/separate-namespaces.md index 03001f82..f52bdaf6 100644 --- a/website/content/en/docs/Getting Started/latest/separate-namespaces.md +++ b/website/content/en/docs/Getting Started/latest/separate-namespaces.md @@ -2,7 +2,7 @@ title: "Separate namespaces for Jenkins and Operator" linkTitle: "Separate namespaces for Jenkins and Operator" weight: 6 -date: 2021-08-20 +date: 2021-10-06 description: > How to install Jenkins and Jenkins Operator in separate namespaces --- diff --git a/website/content/en/docs/Security/_index.md b/website/content/en/docs/Security/_index.md index 187c7a9a..13dbe4f6 100644 --- a/website/content/en/docs/Security/_index.md +++ b/website/content/en/docs/Security/_index.md @@ -2,7 +2,7 @@ title: "Security" linkTitle: "Security" weight: 3 -date: 2019-08-05 +date: 2021-10-06 description: > Jenkins security and hardening out of the box --- diff --git a/website/content/en/docs/Troubleshooting/_index.md b/website/content/en/docs/Troubleshooting/_index.md index 989999a6..ee97095e 100644 --- a/website/content/en/docs/Troubleshooting/_index.md +++ b/website/content/en/docs/Troubleshooting/_index.md @@ -2,7 +2,7 @@ title: "Troubleshooting" linkTitle: "Troubleshooting" weight: 4 -date: 2021-08-19 +date: 2021-10-06 description: > Troubleshooting Jenkins Operator --- diff --git a/website/package-lock.json b/website/package-lock.json index 766009d9..aae84b44 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -129,27 +129,27 @@ "dev": true }, "autoprefixer": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.7.tgz", - "integrity": "sha512-7Hg99B1eTH5+LgmUBUSmov1Z3bsggQJS7v3IMGo6wcScnbRuvtMc871J9J+4bSbIqa9LSX/zypFXJ8sXHpMJeQ==", + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", "dev": true, "requires": { "browserslist": "^4.12.0", "caniuse-lite": "^1.0.30001109", - "nanocolors": "^0.2.8", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", "postcss": "^7.0.32", "postcss-value-parser": "^4.1.0" }, "dependencies": { "postcss": { - "version": "7.0.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.38.tgz", - "integrity": "sha512-wNrSHWjHDQJR/IZL5IKGxRtFgrYNaAA/UrkW2WqbtZO6uxSLMxMN+s2iqUMwnAWm3fMROlDYZB41dr0Mt7vBwQ==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "nanocolors": "^0.2.2", + "picocolors": "^0.2.1", "source-map": "^0.6.1" } }, @@ -278,16 +278,16 @@ } }, "browserslist": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.2.tgz", - "integrity": "sha512-jSDZyqJmkKMEMi7SZAgX5UltFdR5NAO43vY0AwTpu4X3sGH7GLLQ83KiUomgrnvZRCeW0yPPnKqnxPqQOER9zQ==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.3.tgz", + "integrity": "sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001261", - "electron-to-chromium": "^1.3.854", + "caniuse-lite": "^1.0.30001264", + "electron-to-chromium": "^1.3.857", "escalade": "^3.1.1", - "nanocolors": "^0.2.12", - "node-releases": "^1.1.76" + "node-releases": "^1.1.77", + "picocolors": "^0.2.1" } }, "cache-base": { @@ -320,9 +320,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001263", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001263.tgz", - "integrity": "sha512-doiV5dft6yzWO1WwU19kt8Qz8R0/8DgEziz6/9n2FxUasteZNwNNYSmJO3GLBH8lCVE73AB1RPDPAeYbcO5Cvw==", + "version": "1.0.30001265", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz", + "integrity": "sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==", "dev": true }, "chalk": { @@ -552,9 +552,9 @@ } }, "electron-to-chromium": { - "version": "1.3.856", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.856.tgz", - "integrity": "sha512-lSezYIe1/p5qkEswAfaQUseOBiwGwuCvRl/MKzOEVe++DcmQ92+43dznDl4rFJ4Zpu+kevhwyIf7KjJevyDA/A==", + "version": "1.3.860", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.860.tgz", + "integrity": "sha512-gWwGZ+Wv4Mou2SJRH6JQzhTPjL5f95SX7n6VkLTQ/Q/INsZLZNQ1vH2GlZjozKyvT0kkFuCmWTwIoCj+/hUDPw==", "dev": true }, "end-of-stream": { @@ -1328,12 +1328,6 @@ "dev": true, "optional": true }, - "nanocolors": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.12.tgz", - "integrity": "sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug==", - "dev": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -1360,9 +1354,9 @@ "dev": true }, "node-releases": { - "version": "1.1.76", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz", - "integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==", + "version": "1.1.77", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", + "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==", "dev": true }, "normalize-path": { @@ -1569,6 +1563,12 @@ "pify": "^3.0.0" } }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", diff --git a/website/package.json b/website/package.json index 047d5a40..86108202 100644 --- a/website/package.json +++ b/website/package.json @@ -17,7 +17,7 @@ }, "homepage": "https://github.com/bep/tech-doc-hugo#readme", "devDependencies": { - "autoprefixer": "^9.8.7", + "autoprefixer": "^9.8.8", "postcss-cli": "^5.0.1" } }