From b407e51bba9b46863273737bb8d35ab8abfe4c1a Mon Sep 17 00:00:00 2001 From: Szymon Fugas Date: Wed, 7 Jul 2021 13:18:18 +0200 Subject: [PATCH 01/16] Fix workflow for autogenerating docs (#592) * Use grep -c flag in check for changes step to fix case when more than 1 website file was modified --- .github/workflows/auto-gen-docs.yaml | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/.github/workflows/auto-gen-docs.yaml b/.github/workflows/auto-gen-docs.yaml index fbfd60f2..5d7462d8 100644 --- a/.github/workflows/auto-gen-docs.yaml +++ b/.github/workflows/auto-gen-docs.yaml @@ -23,18 +23,15 @@ jobs: submodules: recursive # Fetch the Docsy theme fetch-depth: 0 - # Checks out a copy of your repository on the ubuntu-latest machine + # Checks if the previous commit introduced any changes to website files - name: Check for changes run: | - if git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -E "^website*"; then - git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -E "^website*" - echo "IS_CHANGED=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -E "^website*")" >> $GITHUB_ENV - else - echo "IS_CHANGED=empty" >> $GITHUB_ENV - fi + IS_CHANGED=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -Ec "^website*" || :) + [[ $IS_CHANGED -gt 0 ]] && echo "IS_CHANGED=true" >> $GITHUB_ENV || echo "IS_CHANGED=false" >> $GITHUB_ENV + # Sets up the appropriate version of Hugo - name: Setup Hugo - if: env.IS_CHANGED != 'empty' + if: env.IS_CHANGED == 'true' uses: peaceiris/actions-hugo@v2 with: hugo-version: '0.62.2' @@ -42,14 +39,14 @@ jobs: # Sets up node - required by Hugo - name: Setup Node - if: env.IS_CHANGED != 'empty' + if: env.IS_CHANGED == 'true' uses: actions/setup-node@v1 with: node-version: '12.x' # Installs dependencies required by docsy theme - name: Install docsy dependencies - if: env.IS_CHANGED != 'empty' + if: env.IS_CHANGED == 'true' run: | cd website npm install @@ -57,17 +54,18 @@ jobs: sudo npm install -D --save autoprefixer sudo npm install -D --save postcss-cli cd ../ + # Runs makefile goal - checks changes to /website folder and generates docs - name: Run Makefile goal - if: env.IS_CHANGED != 'empty' + if: env.IS_CHANGED == 'true' env: DEFAULT_BRANCH: master GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: make generate-docs - # Create push request with generated docs + # Creates pull request with generated docs - name: Create Pull Request - if: env.IS_CHANGED != 'empty' + if: env.IS_CHANGED == 'true' uses: peter-evans/create-pull-request@v3 with: commit-message: Auto-updated docs From db0978c4d481f0d737e996e5a9b1a29b8b2e6e6b Mon Sep 17 00:00:00 2001 From: Szymon Fugas Date: Fri, 16 Jul 2021 11:45:43 +0200 Subject: [PATCH 02/16] Configure bot for labelling new issues as needing triage (#597) --- .devbots/needs-triage.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .devbots/needs-triage.yml diff --git a/.devbots/needs-triage.yml b/.devbots/needs-triage.yml new file mode 100644 index 00000000..d71c6782 --- /dev/null +++ b/.devbots/needs-triage.yml @@ -0,0 +1,4 @@ +# Configuration for devbots-needs-triage - https://devbots.xyz/documentation/needs-triage/ + +enabled: true +label: "needs triage" \ No newline at end of file From 800c1a7d5de1b45df68886e2d3588e41dd6c6d8e Mon Sep 17 00:00:00 2001 From: Szymon Fugas Date: Mon, 19 Jul 2021 16:04:45 +0200 Subject: [PATCH 03/16] Configure bot for managing stale issues (#598) --- .github/stale.yml | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000..ea6a07f2 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,47 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 30 + +# Number of days of inactivity before a stale Issue or Pull Request is closed. +# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. +daysUntilClose: 60 + +# Issues with these labels will never be considered stale +exemptLabels: + - frozen + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: true + +# Label to use when marking an issue as stale +staleLabel: stale + +issues: + # Comment to post when marking an issue as stale. Set to `false` to disable + markComment: > + This issue has been automatically marked as stale because it has not had recent activity. + It will be closed if no further activity occurs. + If this issue is still affecting you, just comment with any updates and we'll keep it open. + Thank you for your contributions. + + # Comment to post when closing a stale issue. Set to `false` to disable + closeComment: > + Closing this issue after a prolonged period of inactivity. + If this issue is still present in the latest release, please create a new issue with up-to-date information. Thank you! + +pulls: + # Comment to post when marking a pull request as stale. + markComment: > + This pull request has been automatically marked as stale because it has not had recent activity. + It will be closed if no further activity occurs. + If this pull request is still relevant, just comment with any updates and we'll keep it open. + Thank you for your contributions. + + # Comment to post when closing a stale pull request. Set to `false` to disable + closeComment: > + Closing this pull request after a prolonged period of inactivity. + If this issue is still present in the latest release, please ask for this pull request to be reopened. Thank you! + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 From 35dfd47ec77df2b2f6b7034a89a14351494dc800 Mon Sep 17 00:00:00 2001 From: Piotr Ryba <55996264+prryb@users.noreply.github.com> Date: Tue, 20 Jul 2021 12:06:25 +0200 Subject: [PATCH 04/16] Docs: explanation what is backed up and why (#599) * Explanation what's backed up and why --- .../Getting Started/latest/configure-backup-and-restore.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/website/content/en/docs/Getting Started/latest/configure-backup-and-restore.md b/website/content/en/docs/Getting Started/latest/configure-backup-and-restore.md index d4df095c..01d1ef72 100644 --- a/website/content/en/docs/Getting Started/latest/configure-backup-and-restore.md +++ b/website/content/en/docs/Getting Started/latest/configure-backup-and-restore.md @@ -7,6 +7,10 @@ description: > Prevent loss of job history --- +> Because of Jenkins Operator's architecture, the configuration of Jenkins should be done using ConfigurationAsCode +> or GroovyScripts and jobs should be defined as SeedJobs. It means that there is no point in backing up any job configuration +> up. Therefore, the backup script makes a copy of jobs history only. + Backup and restore is done by a container sidecar. ### PVC From 7ce9d1f0775d851136d5427929ba68073be4228d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 20 Jul 2021 14:56:36 +0200 Subject: [PATCH 05/16] Auto-updated docs (#600) Co-authored-by: prryb --- .../latest/configure-backup-and-restore/index.html | 8 +++++++- docs/docs/getting-started/latest/index.xml | 6 ++++++ docs/docs/index.xml | 6 ++++++ website/package-lock.json | 12 ++++++------ 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/docs/docs/getting-started/latest/configure-backup-and-restore/index.html b/docs/docs/getting-started/latest/configure-backup-and-restore/index.html index 5896f09f..cccbc348 100644 --- a/docs/docs/getting-started/latest/configure-backup-and-restore/index.html +++ b/docs/docs/getting-started/latest/configure-backup-and-restore/index.html @@ -32,7 +32,7 @@ "> - + @@ -833,6 +833,12 @@
Prevent loss of job history
+
+

Because of Jenkins Operator’s architecture, the configuration of Jenkins should be done using ConfigurationAsCode +or GroovyScripts and jobs should be defined as SeedJobs. It means that there is no point in backing up any job configuration +up. Therefore, the backup script makes a copy of jobs history only.

+
+

Backup and restore is done by a container sidecar.

PVC

diff --git a/docs/docs/getting-started/latest/index.xml b/docs/docs/getting-started/latest/index.xml index df8de64a..1bac8f38 100644 --- a/docs/docs/getting-started/latest/index.xml +++ b/docs/docs/getting-started/latest/index.xml @@ -576,6 +576,12 @@ The secrets are loaded to <code>secrets</code> map.</p> +<blockquote> +<p>Because of Jenkins Operator&rsquo;s architecture, the configuration of Jenkins should be done using ConfigurationAsCode +or GroovyScripts and jobs should be defined as SeedJobs. It means that there is no point in backing up any job configuration +up. Therefore, the backup script makes a copy of jobs history only.</p> +</blockquote> + <p>Backup and restore is done by a container sidecar.</p> <h3 id="pvc">PVC</h3> diff --git a/docs/docs/index.xml b/docs/docs/index.xml index 6074c840..cebbb46c 100644 --- a/docs/docs/index.xml +++ b/docs/docs/index.xml @@ -3123,6 +3123,12 @@ spec: +<blockquote> +<p>Because of Jenkins Operator&rsquo;s architecture, the configuration of Jenkins should be done using ConfigurationAsCode +or GroovyScripts and jobs should be defined as SeedJobs. It means that there is no point in backing up any job configuration +up. Therefore, the backup script makes a copy of jobs history only.</p> +</blockquote> + <p>Backup and restore is done by a container sidecar.</p> <h3 id="pvc">PVC</h3> diff --git a/website/package-lock.json b/website/package-lock.json index 67bfa179..57c68fa4 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -330,9 +330,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001237", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", - "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", + "version": "1.0.30001245", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz", + "integrity": "sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==", "dev": true }, "chalk": { @@ -568,9 +568,9 @@ } }, "electron-to-chromium": { - "version": "1.3.752", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", - "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", + "version": "1.3.780", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.780.tgz", + "integrity": "sha512-2KQ9OYm9WMUNpAPA/4aerURl3hwRc9tNlpsiEj3Y8Gf7LVf26NzyLIX2v0hSagQwrS9+cWab+28A2GPKDoVNRA==", "dev": true }, "end-of-stream": { From 463cad3b078c05b6c1ad76e693bd66947296bd81 Mon Sep 17 00:00:00 2001 From: Szymon Fugas Date: Tue, 20 Jul 2021 14:58:04 +0200 Subject: [PATCH 06/16] Docs: clarification of description of get latest command in backup (#601) --- .../docs/Getting Started/latest/configure-backup-and-restore.md | 2 +- .../docs/Getting Started/v0.5.x/configure-backup-and-restore.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/content/en/docs/Getting Started/latest/configure-backup-and-restore.md b/website/content/en/docs/Getting Started/latest/configure-backup-and-restore.md index 01d1ef72..fbc5bccc 100644 --- a/website/content/en/docs/Getting Started/latest/configure-backup-and-restore.md +++ b/website/content/en/docs/Getting Started/latest/configure-backup-and-restore.md @@ -81,7 +81,7 @@ spec: getLatestAction: exec: command: - - /home/user/bin/get-latest.sh # this command is invoked on "backup" container to get last backup number before pod deletion. If you don't omit it in CR, you can lose data + - /home/user/bin/get-latest.sh # this command is invoked on "backup" container to get last backup number before pod deletion; not having it in the CR may cause loss of data interval: 30 # how often make backup in seconds makeBackupBeforePodDeletion: true # make a backup before pod deletion restore: diff --git a/website/content/en/docs/Getting Started/v0.5.x/configure-backup-and-restore.md b/website/content/en/docs/Getting Started/v0.5.x/configure-backup-and-restore.md index 08033892..0a079cba 100644 --- a/website/content/en/docs/Getting Started/v0.5.x/configure-backup-and-restore.md +++ b/website/content/en/docs/Getting Started/v0.5.x/configure-backup-and-restore.md @@ -85,6 +85,6 @@ spec: getLatestAction: exec: command: - - /home/user/bin/get-latest.sh # this command is invoked on "backup" container to get last backup number before pod deletion. If you don't omit it in CR, you can lose data + - /home/user/bin/get-latest.sh # this command is invoked on "backup" container to get last backup number before pod deletion; not having it in the CR may cause loss of data #recoveryOnce: # if want to restore specific backup configure this field and then Jenkins will be restarted and desired backup will be restored ``` From bd32624fe1553ba4f5c5f6f27685d4e0ea3722dc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Jul 2021 09:54:59 +0200 Subject: [PATCH 07/16] Auto-updated docs (#602) Co-authored-by: Sig00rd --- .../latest/configure-backup-and-restore/index.html | 2 +- docs/docs/getting-started/latest/index.xml | 2 +- .../v0.5.x/configure-backup-and-restore/index.html | 2 +- docs/docs/getting-started/v0.5.x/index.xml | 2 +- docs/docs/index.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/docs/getting-started/latest/configure-backup-and-restore/index.html b/docs/docs/getting-started/latest/configure-backup-and-restore/index.html index cccbc348..533f99dc 100644 --- a/docs/docs/getting-started/latest/configure-backup-and-restore/index.html +++ b/docs/docs/getting-started/latest/configure-backup-and-restore/index.html @@ -901,7 +901,7 @@ up. Therefore, the backup script makes a copy of jobs history only.

getLatestAction: exec: command: - - /home/user/bin/get-latest.sh # this command is invoked on "backup" container to get last backup number before pod deletion. If you don't omit it in CR, you can lose data + - /home/user/bin/get-latest.sh # this command is invoked on "backup" container to get last backup number before pod deletion; not having it in the CR may cause loss of data interval: 30 # how often make backup in seconds makeBackupBeforePodDeletion: true # make a backup before pod deletion restore: diff --git a/docs/docs/getting-started/latest/index.xml b/docs/docs/getting-started/latest/index.xml index 1bac8f38..5d3564a0 100644 --- a/docs/docs/getting-started/latest/index.xml +++ b/docs/docs/getting-started/latest/index.xml @@ -644,7 +644,7 @@ up. Therefore, the backup script makes a copy of jobs history only.</p> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>getLatestAction<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:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/get-latest.sh<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 get last backup number before pod deletion. If you don&#39;t omit it in CR, you can lose data</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/get-latest.sh<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 get last backup number before pod deletion; not having it in the CR may cause loss of data</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">30</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># how often make 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"># make a backup before pod deletion</span><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"> 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 887b5332..e502cde5 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 @@ -903,7 +903,7 @@ getLatestAction: exec: command: - - /home/user/bin/get-latest.sh # this command is invoked on "backup" container to get last backup number before pod deletion. If you don't omit it in CR, you can lose data + - /home/user/bin/get-latest.sh # this command is invoked on "backup" container to get last backup number before pod deletion; not having it in the CR may cause loss of data #recoveryOnce: <backup_number> # if want to restore specific backup configure this field and then Jenkins will be restarted and desired backup will be restored diff --git a/docs/docs/getting-started/v0.5.x/index.xml b/docs/docs/getting-started/v0.5.x/index.xml index 1ede18bb..93894a88 100644 --- a/docs/docs/getting-started/v0.5.x/index.xml +++ b/docs/docs/getting-started/v0.5.x/index.xml @@ -634,7 +634,7 @@ The secrets are loaded to <code>secrets</code> map.</p> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>getLatestAction<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:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/get-latest.sh<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 get last backup number before pod deletion. If you don&#39;t omit it in CR, you can lose data</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/get-latest.sh<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 get last backup number before pod deletion; not having it in the CR may cause loss of data</span><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> diff --git a/docs/docs/index.xml b/docs/docs/index.xml index cebbb46c..6024f26d 100644 --- a/docs/docs/index.xml +++ b/docs/docs/index.xml @@ -3191,7 +3191,7 @@ up. Therefore, the backup script makes a copy of jobs history only.</p> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>getLatestAction<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:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/get-latest.sh<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 get last backup number before pod deletion. If you don&#39;t omit it in CR, you can lose data</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/get-latest.sh<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 get last backup number before pod deletion; not having it in the CR may cause loss of data</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">30</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># how often make 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"># make a backup before pod deletion</span><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"> @@ -3285,7 +3285,7 @@ up. Therefore, the backup script makes a copy of jobs history only.</p> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>getLatestAction<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:#f8f8f8;text-decoration:underline"> </span>/home/user/bin/get-latest.sh<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 get last backup number before pod deletion. If you don&#39;t omit it in CR, you can lose data</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/get-latest.sh<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 get last backup number before pod deletion; not having it in the CR may cause loss of data</span><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> From 9d5c525ace0b68efeaf402e8d6e589b0cf72c0b8 Mon Sep 17 00:00:00 2001 From: Szymon Fugas Date: Fri, 23 Jul 2021 10:29:04 +0200 Subject: [PATCH 08/16] Bump seedjobs agent image version to 4.9-1 (#604) --- pkg/configuration/user/seedjobs/seedjobs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/configuration/user/seedjobs/seedjobs.go b/pkg/configuration/user/seedjobs/seedjobs.go index cb9b3725..3b4ac37f 100644 --- a/pkg/configuration/user/seedjobs/seedjobs.go +++ b/pkg/configuration/user/seedjobs/seedjobs.go @@ -438,7 +438,7 @@ func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName stri Containers: []corev1.Container{ { Name: "jnlp", - Image: "jenkins/inbound-agent:alpine", + Image: "jenkins/inbound-agent:4.9-1", Env: []corev1.EnvVar{ { Name: "JENKINS_TUNNEL", From 935b60b6d8ffa0b1dffcb5c3d0a36c0b329d5a62 Mon Sep 17 00:00:00 2001 From: Cosnita Radu Viorel Date: Thu, 29 Jul 2021 12:44:51 +0300 Subject: [PATCH 09/16] Add GitLFS pull after checkout behaviour to SeedJob GroovyScript Template (#483) Add GitLFS pull after checkout behaviour to support also repositories which are relying on Git LFS Close #482 --- pkg/configuration/user/seedjobs/seedjobs.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/configuration/user/seedjobs/seedjobs.go b/pkg/configuration/user/seedjobs/seedjobs.go index 3b4ac37f..96d1df75 100644 --- a/pkg/configuration/user/seedjobs/seedjobs.go +++ b/pkg/configuration/user/seedjobs/seedjobs.go @@ -80,6 +80,7 @@ import hudson.plugins.git.BranchSpec; import hudson.plugins.git.GitSCM; import hudson.plugins.git.SubmoduleConfig; import hudson.plugins.git.extensions.impl.CloneOption; +import hudson.plugins.git.extensions.impl.GitLFSPull; import javaposse.jobdsl.plugin.ExecuteDslScripts; import javaposse.jobdsl.plugin.LookupStrategy; import javaposse.jobdsl.plugin.RemovedJobAction; @@ -93,7 +94,10 @@ def jobDslSeedName = "{{ .ID }}-{{ .SeedJobSuffix }}"; def jobRef = jenkins.getItem(jobDslSeedName) def repoList = GitSCM.createRepoList("{{ .RepositoryURL }}", "{{ .CredentialID }}") -def gitExtensions = [new CloneOption(true, true, ";", 10)] +def gitExtensions = [ + new CloneOption(true, true, ";", 10), + new GitLFSPull() +] def scm = new GitSCM( repoList, newArrayList(new BranchSpec("{{ .RepositoryBranch }}")), From dfd25e822c7cddf3f59c9eb790bf24dd1900643e Mon Sep 17 00:00:00 2001 From: Szymon Fugas Date: Mon, 2 Aug 2021 15:52:10 +0200 Subject: [PATCH 10/16] Docs: minor fixes (#608) * Link to project's DockerHub in README's section on nightly builds, add paragraph about nightly builds in installation docs * Fix repositoryURL in sample seedJob configuration with SSH auth * Slightly expand on #348 * Fix formatting in docs on Jenkins' customization, update plugin versions * Add notes on Jenkins home Volume in Helm chart values.yaml and docs (#589) --- README.md | 5 +++- chart/jenkins-operator/values.yaml | 2 ++ .../content/en/docs/Developer Guide/_index.md | 30 ++++++++++++++----- .../Getting Started/latest/configuration.md | 2 +- .../Getting Started/latest/customization.md | 19 ++++++------ .../content/en/docs/Installation/_index.md | 16 ++++++++-- 6 files changed, 53 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 5f9f3247..45d5b74f 100644 --- a/README.md +++ b/README.md @@ -64,12 +64,15 @@ Selected content: ## Community We have a dedicated channel called `#jenkins-operator` on [virtuslab-oss.slack.com](https://virtuslab-oss.slack.com) -Fill out ([Invite form](https://forms.gle/X3X8qA1XMirdBuEH7)) and come say hi ! +Fill out ([Invite form](https://forms.gle/X3X8qA1XMirdBuEH7)) and come say hi! ## Snapshots between releases We are trying our best to resolve issues quickly, but they have to wait to be released. If you can't wait for an official docker image release and acknowledge the risk, you can use our unofficial images, which are built nightly. + +You can find the project's Docker Hub repository [here](https://hub.docker.com/r/virtuslab/jenkins-operator). + Look for the images with tag "{git-hash}", where {git-hash} is the hash of the master commit that interests you. ## Contribution diff --git a/chart/jenkins-operator/values.yaml b/chart/jenkins-operator/values.yaml index 2d091244..1c92fb90 100644 --- a/chart/jenkins-operator/values.yaml +++ b/chart/jenkins-operator/values.yaml @@ -120,6 +120,8 @@ jenkins: claimName: jenkins-backup # volumeMounts are mounts for Jenkins pod + # Note that attempting to overwrite default mount settings for Jenkins home directory will result in Operator error + # See https://jenkinsci.github.io/kubernetes-operator/docs/installation/#note-on-jenkins-home-volume volumeMounts: [] # defines authorization strategy of the operator for the Jenkins API diff --git a/website/content/en/docs/Developer Guide/_index.md b/website/content/en/docs/Developer Guide/_index.md index b5c82a7c..2753f3fb 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: 60 -date: 2021-06-10 +date: 2021-07-30 description: > Jenkins Operator for developers --- @@ -211,6 +211,16 @@ seed-job-agent-jenkins-example-758cc7cc5c-82hbl 1/1 Running 0 make run OPERATOR_EXTRA_ARGS="--debug" ``` +### Stop or delete minikube cluster +To stop Kubernetes cluster running locally on minikube: +```bash +minikube stop +``` +To delete the cluster altogether: +```bash +minikube delete +``` + ## Build and run with a remote Kubernetes cluster You can also run the controller locally and make it listen to a remote Kubernetes server. @@ -282,6 +292,18 @@ kubectl get secret jenkins-operator-credentials- -o 'jsonpath={.data.us kubectl get secret jenkins-operator-credentials- -o 'jsonpath={.data.password}' | base64 -d ``` + + + +## Self-learning + +* [Tutorial: Deep Dive into the Operator Framework for... Melvin Hillsman, Michael Hrivnak, & Matt Dorn +](https://www.youtube.com/watch?v=8_DaCcRMp5I) + +* [Operator Framework Training By OpenShift](https://www.katacoda.com/openshift/courses/operatorframework) + +* [Operator SDK Tutorial for Go](https://sdk.operatorframework.io/docs/building-operators/golang/tutorial/) + [dep_tool]:https://golang.github.io/dep/docs/installation.html [git_tool]:https://git-scm.com/downloads [go_tool]:https://golang.org/dl/ @@ -293,9 +315,3 @@ kubectl get secret jenkins-operator-credentials- -o 'jsonpath={.data.pa [virtualbox]:https://www.virtualbox.org/wiki/Downloads [install_dev_tools]:https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/tools/ -## Self-learning - -* [Tutorial: Deep Dive into the Operator Framework for... Melvin Hillsman, Michael Hrivnak, & Matt Dorn -](https://www.youtube.com/watch?v=8_DaCcRMp5I) - -* [Operator Framework Training By OpenShift](https://www.katacoda.com/openshift/courses/operatorframework) diff --git a/website/content/en/docs/Getting Started/latest/configuration.md b/website/content/en/docs/Getting Started/latest/configuration.md index f3c4b8a7..e543e544 100644 --- a/website/content/en/docs/Getting Started/latest/configuration.md +++ b/website/content/en/docs/Getting Started/latest/configuration.md @@ -163,7 +163,7 @@ spec: targets: "cicd/jobs/*.jenkins" description: "Jenkins Operator repository" repositoryBranch: master - repositoryUrl: ssh://git@github.com:jenkinsci/kubernetes-operator.git + repositoryUrl: git@github.com:jenkinsci/kubernetes-operator.git ``` and create a Kubernetes Secret (name of secret should be the same from `credentialID` field): diff --git a/website/content/en/docs/Getting Started/latest/customization.md b/website/content/en/docs/Getting Started/latest/customization.md index 76b12e10..167c556f 100644 --- a/website/content/en/docs/Getting Started/latest/customization.md +++ b/website/content/en/docs/Getting Started/latest/customization.md @@ -13,13 +13,14 @@ Plugin's configuration is applied as groovy scripts or the [configuration as cod Any plugin working for Jenkins can be installed by the Jenkins Operator. Pre-installed plugins: -* configuration-as-code v1.47 -* git v4.5.0 + +* configuration-as-code v1.51 +* git v4.7.2 * job-dsl v1.77 -* kubernetes-credentials-provider v0.15 -* kubernetes v1.29.0 +* kubernetes-credentials-provider v0.18-1 +* kubernetes v1.30.0 * workflow-aggregator v2.6 -* workflow-job v2.40 +* workflow-job v2.41 Rest of the plugins can be found in [plugins repository](https://plugins.jenkins.io/). @@ -51,19 +52,19 @@ spec: master: basePlugins: - name: kubernetes - version: "1.28.6" + version: "1.30.0" - name: workflow-job version: "2.40" - name: workflow-aggregator version: "2.6" - name: git - version: "4.5.0" + version: "4.7.2" - name: job-dsl version: "1.77" - name: configuration-as-code - version: "1.46" + version: "1.51" - name: kubernetes-credentials-provider - version: "0.15" + version: "0.18-1" ``` You can change their versions. diff --git a/website/content/en/docs/Installation/_index.md b/website/content/en/docs/Installation/_index.md index 6d4d8d27..fcd6ba28 100644 --- a/website/content/en/docs/Installation/_index.md +++ b/website/content/en/docs/Installation/_index.md @@ -2,24 +2,25 @@ title: "Installation" linkTitle: "Installation" weight: 1 -date: 2020-10-05 +date: 2021-07-30 description: > How to install Jenkins Operator --- {{% pageinfo %}} This document describes installation procedure for **Jenkins Operator**. -All container images can be found at [virtuslab/jenkins-operator](https://hub.docker.com/r/virtuslab/jenkins-operator) +All container images can be found at [virtuslab/jenkins-operator](https://hub.docker.com/r/virtuslab/jenkins-operator) Docker Hub repository. {{% /pageinfo %}} ## Requirements To run **Jenkins Operator**, you will need: + - access to a Kubernetes cluster version `1.17+` - `kubectl` version `1.17+` -Listed below are the two ways to deploy Jenkins Operator. For details on how to customize your Jenkins instance, refer to [Getting Started](/kubernetes-operator/docs/installation/) +Listed below are the two ways to deploy Jenkins Operator. For details on how to customize your Jenkins instance, refer to [Getting Started](/kubernetes-operator/docs/installation/). ## Deploy Jenkins Operator using YAML's @@ -877,3 +878,12 @@ Example:
+## Note on Operator's nightly built images +If you wish to use the newest, not yet released version of the Operator, you can use one of nightly built snapshot images, however the maintainers of this project cannot guarantee their stability. + +You can find nightly built images by heading to [virtuslab/jenkins-operator](https://hub.docker.com/r/virtuslab/jenkins-operator) Docker Hub repository and looking for images with tag in the form of "{git-hash}", {git-hash} being the hash of master branch commit that you want to use snapshot of. + +## Note on Jenkins home Volume +Current design of the Operator puts an emphasis on creating a full GitOps flow of work for Jenkins users. One of the key points of this design is maintaining an immutable state of Jenkins. + +One of the prerequisites of this is an ephemeral Jenkins home directory. To achieve that, Operator mounts emptyDir Volume as Jenkins home directory. It is not possible to overwrite volumeMount and specify any other Volume for Jenkins home directory, as attempting to do so will result in Operator error. \ No newline at end of file From 17dba087b8f0434faeff108d4b3b44e6dd5e53ae Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 2 Aug 2021 16:22:29 +0200 Subject: [PATCH 11/16] Auto-updated docs (#610) Co-authored-by: Sig00rd --- docs/docs/developer-guide/index.html | 13 ++++++-- docs/docs/developer-guide/index.xml | 2 +- .../latest/configuration/index.html | 2 +- .../latest/customization/index.html | 29 +++++++++-------- docs/docs/getting-started/latest/index.html | 4 +-- docs/docs/getting-started/latest/index.xml | 29 +++++++++-------- docs/docs/getting-started/v0.5.x/index.html | 4 +-- docs/docs/index.html | 8 ++--- docs/docs/index.xml | 29 +++++++++-------- docs/docs/installation/index.html | 31 ++++++++++++++----- docs/docs/installation/index.xml | 2 +- docs/sitemap.xml | 12 +++---- website/package-lock.json | 12 +++---- 13 files changed, 106 insertions(+), 71 deletions(-) diff --git a/docs/docs/developer-guide/index.html b/docs/docs/developer-guide/index.html index e0da64c1..36bfcc7d 100644 --- a/docs/docs/developer-guide/index.html +++ b/docs/docs/developer-guide/index.html @@ -26,7 +26,7 @@ " /> - + @@ -765,6 +765,7 @@
  • Build and run with a minikube
  • Build and run with a remote Kubernetes cluster
  • Testing @@ -996,6 +997,12 @@ jenkins-jenkins-example 1/1 Running 0 21m

    Debug Jenkins Operator

    make run OPERATOR_EXTRA_ARGS="--debug"
    +

    Stop or delete minikube cluster

    + +

    To stop Kubernetes cluster running locally on minikube:

    +
    minikube stop
    +

    To delete the cluster altogether:

    +
    minikube delete

    Build and run with a remote Kubernetes cluster

    You can also run the controller locally and make it listen to a remote Kubernetes server.

    @@ -1038,6 +1045,8 @@ kubectl get secret jenkins-operator-credentials-<cr_name> -o Operator Framework Training By OpenShift

  • + +
  • Operator SDK Tutorial for Go

  • @@ -1204,7 +1213,7 @@ kubectl get secret jenkins-operator-credentials-<cr_name> -o Last modified June 10, 2021 +
    Last modified July 30, 2021
    diff --git a/docs/docs/developer-guide/index.xml b/docs/docs/developer-guide/index.xml index b74e891c..e3f7f7e4 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 - Thu, 10 Jun 2021 00:00:00 +0000 + Fri, 30 Jul 2021 00:00:00 +0000 https://jenkinsci.github.io/kubernetes-operator/img/hugo.png GoHugo.io diff --git a/docs/docs/getting-started/latest/configuration/index.html b/docs/docs/getting-started/latest/configuration/index.html index 76ca0185..7c32819e 100644 --- a/docs/docs/getting-started/latest/configuration/index.html +++ b/docs/docs/getting-started/latest/configuration/index.html @@ -969,7 +969,7 @@ spec: targets: "cicd/jobs/*.jenkins" description: "Jenkins Operator repository" repositoryBranch: master - repositoryUrl: ssh://git@github.com:jenkinsci/kubernetes-operator.git + repositoryUrl: git@github.com:jenkinsci/kubernetes-operator.git

    and create a Kubernetes Secret (name of secret should be the same from credentialID field):

    apiVersion: v1
     kind: Secret
    diff --git a/docs/docs/getting-started/latest/customization/index.html b/docs/docs/getting-started/latest/customization/index.html
    index fe753ac7..0c25e573 100644
    --- a/docs/docs/getting-started/latest/customization/index.html
    +++ b/docs/docs/getting-started/latest/customization/index.html
    @@ -32,7 +32,7 @@
     ">
     
     
    -
    +
     
     
     
    @@ -840,14 +840,17 @@
     Plugin’s configuration is applied as groovy scripts or the configuration as code plugin.
     Any plugin working for Jenkins can be installed by the Jenkins Operator.

    -

    Pre-installed plugins: -* configuration-as-code v1.47 -* git v4.5.0 -* job-dsl v1.77 -* kubernetes-credentials-provider v0.15 -* kubernetes v1.29.0 -* workflow-aggregator v2.6 -* workflow-job v2.40

    +

    Pre-installed plugins:

    + +
      +
    • configuration-as-code v1.51
    • +
    • git v4.7.2
    • +
    • job-dsl v1.77
    • +
    • kubernetes-credentials-provider v0.18-1
    • +
    • kubernetes v1.30.0
    • +
    • workflow-aggregator v2.6
    • +
    • workflow-job v2.41
    • +

    Rest of the plugins can be found in plugins repository.

    @@ -872,19 +875,19 @@ Any plugin working for Jenkins can be installed by the Jenkins Operator.

    master: basePlugins: - name: kubernetes - version: "1.28.6" + version: "1.30.0" - name: workflow-job version: "2.40" - name: workflow-aggregator version: "2.6" - name: git - version: "4.5.0" + version: "4.7.2" - name: job-dsl version: "1.77" - name: configuration-as-code - version: "1.46" + version: "1.51" - name: kubernetes-credentials-provider - version: "0.15"
    + version: "0.18-1"

    You can change their versions.

    The Jenkins Operator will then automatically install plugins after the Jenkins master pod restart.

    diff --git a/docs/docs/getting-started/latest/index.html b/docs/docs/getting-started/latest/index.html index 1313be6d..f4c052fe 100644 --- a/docs/docs/getting-started/latest/index.html +++ b/docs/docs/getting-started/latest/index.html @@ -822,6 +822,8 @@
    + +
    Deploy Jenkins @@ -844,8 +846,6 @@ - -
    Configuration diff --git a/docs/docs/getting-started/latest/index.xml b/docs/docs/getting-started/latest/index.xml index 5d3564a0..d6501db1 100644 --- a/docs/docs/getting-started/latest/index.xml +++ b/docs/docs/getting-started/latest/index.xml @@ -240,7 +240,7 @@ spec: targets: "cicd/jobs/*.jenkins" description: "Jenkins Operator repository" repositoryBranch: master - repositoryUrl: ssh://git@github.com:jenkinsci/kubernetes-operator.git</code></pre> + repositoryUrl: git@github.com:jenkinsci/kubernetes-operator.git</code></pre> <p>and create a Kubernetes Secret (name of secret should be the same from <code>credentialID</code> field):</p> <pre><code>apiVersion: v1 kind: Secret @@ -403,14 +403,17 @@ stringData: Plugin&rsquo;s configuration is applied as groovy scripts or the <a href="https://github.com/jenkinsci/configuration-as-code-plugin">configuration as code plugin</a>. Any plugin working for Jenkins can be installed by the Jenkins Operator.</p> -<p>Pre-installed plugins: -* configuration-as-code v1.47 -* git v4.5.0 -* job-dsl v1.77 -* kubernetes-credentials-provider v0.15 -* kubernetes v1.29.0 -* workflow-aggregator v2.6 -* workflow-job v2.40</p> +<p>Pre-installed plugins:</p> + +<ul> +<li>configuration-as-code v1.51</li> +<li>git v4.7.2</li> +<li>job-dsl v1.77</li> +<li>kubernetes-credentials-provider v0.18-1</li> +<li>kubernetes v1.30.0</li> +<li>workflow-aggregator v2.6</li> +<li>workflow-job v2.41</li> +</ul> <p>Rest of the plugins can be found in <a href="https://plugins.jenkins.io/">plugins repository</a>.</p> @@ -435,19 +438,19 @@ Any plugin working for Jenkins can be installed by the Jenkins Operator.</p&g </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>basePlugins<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>kubernetes<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.28.6&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.30.0&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>workflow-job<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;2.40&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>workflow-aggregator<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;2.6&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>git<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;4.5.0&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;4.7.2&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>job-dsl<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.77&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configuration-as-code<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.46&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.51&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>kubernetes-credentials-provider<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;0.15&#34;</span></code></pre></div> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;0.18-1&#34;</span></code></pre></div> <p>You can change their versions.</p> <p>The <strong>Jenkins Operator</strong> will then automatically install plugins after the Jenkins master pod restart.</p> diff --git a/docs/docs/getting-started/v0.5.x/index.html b/docs/docs/getting-started/v0.5.x/index.html index 1d17315c..bed9ab63 100644 --- a/docs/docs/getting-started/v0.5.x/index.html +++ b/docs/docs/getting-started/v0.5.x/index.html @@ -824,6 +824,8 @@ + +
    Deploy Jenkins @@ -846,8 +848,6 @@ - -
    Configuration diff --git a/docs/docs/index.html b/docs/docs/index.html index 001c8b57..c8d69c8e 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -789,10 +789,6 @@
    - - - -
    Installation @@ -832,6 +828,10 @@ + + + + diff --git a/docs/docs/index.xml b/docs/docs/index.xml index 6024f26d..77dc0733 100644 --- a/docs/docs/index.xml +++ b/docs/docs/index.xml @@ -651,7 +651,7 @@ spec: targets: "cicd/jobs/*.jenkins" description: "Jenkins Operator repository" repositoryBranch: master - repositoryUrl: ssh://git@github.com:jenkinsci/kubernetes-operator.git</code></pre> + repositoryUrl: git@github.com:jenkinsci/kubernetes-operator.git</code></pre> <p>and create a Kubernetes Secret (name of secret should be the same from <code>credentialID</code> field):</p> <pre><code>apiVersion: v1 kind: Secret @@ -2167,14 +2167,17 @@ stringData: Plugin&rsquo;s configuration is applied as groovy scripts or the <a href="https://github.com/jenkinsci/configuration-as-code-plugin">configuration as code plugin</a>. Any plugin working for Jenkins can be installed by the Jenkins Operator.</p> -<p>Pre-installed plugins: -* configuration-as-code v1.47 -* git v4.5.0 -* job-dsl v1.77 -* kubernetes-credentials-provider v0.15 -* kubernetes v1.29.0 -* workflow-aggregator v2.6 -* workflow-job v2.40</p> +<p>Pre-installed plugins:</p> + +<ul> +<li>configuration-as-code v1.51</li> +<li>git v4.7.2</li> +<li>job-dsl v1.77</li> +<li>kubernetes-credentials-provider v0.18-1</li> +<li>kubernetes v1.30.0</li> +<li>workflow-aggregator v2.6</li> +<li>workflow-job v2.41</li> +</ul> <p>Rest of the plugins can be found in <a href="https://plugins.jenkins.io/">plugins repository</a>.</p> @@ -2199,19 +2202,19 @@ Any plugin working for Jenkins can be installed by the Jenkins Operator.</p&g </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>basePlugins<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>kubernetes<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.28.6&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.30.0&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>workflow-job<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;2.40&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>workflow-aggregator<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;2.6&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>git<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;4.5.0&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;4.7.2&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>job-dsl<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.77&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>configuration-as-code<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.46&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1.51&#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>name<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>kubernetes-credentials-provider<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;0.15&#34;</span></code></pre></div> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>version<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;0.18-1&#34;</span></code></pre></div> <p>You can change their versions.</p> <p>The <strong>Jenkins Operator</strong> will then automatically install plugins after the Jenkins master pod restart.</p> diff --git a/docs/docs/installation/index.html b/docs/docs/installation/index.html index eb637236..4aa60183 100644 --- a/docs/docs/installation/index.html +++ b/docs/docs/installation/index.html @@ -26,7 +26,7 @@ " /> - + @@ -766,6 +766,8 @@ +
  • Note on Operator’s nightly built images
  • +
  • Note on Jenkins home Volume
  • @@ -808,18 +810,21 @@

    This document describes installation procedure for Jenkins Operator. -All container images can be found at virtuslab/jenkins-operator

    +All container images can be found at virtuslab/jenkins-operator Docker Hub repository.

    Requirements

    -

    To run Jenkins Operator, you will need: -- access to a Kubernetes cluster version 1.17+ -- kubectl version 1.17+

    +

    To run Jenkins Operator, you will need:

    -

    Listed below are the two ways to deploy Jenkins Operator. For details on how to customize your Jenkins instance, refer to Getting Started

    +
      +
    • access to a Kubernetes cluster version 1.17+
    • +
    • kubectl version 1.17+
    • +
    + +

    Listed below are the two ways to deploy Jenkins Operator. For details on how to customize your Jenkins instance, refer to Getting Started.

    Deploy Jenkins Operator using YAML’s

    @@ -1649,6 +1654,18 @@ Example:

    +

    Note on Operator’s nightly built images

    + +

    If you wish to use the newest, not yet released version of the Operator, you can use one of nightly built snapshot images, however the maintainers of this project cannot guarantee their stability.

    + +

    You can find nightly built images by heading to virtuslab/jenkins-operator Docker Hub repository and looking for images with tag in the form of “{git-hash}”, {git-hash} being the hash of master branch commit that you want to use snapshot of.

    + +

    Note on Jenkins home Volume

    + +

    Current design of the Operator puts an emphasis on creating a full GitOps flow of work for Jenkins users. One of the key points of this design is maintaining an immutable state of Jenkins.

    + +

    One of the prerequisites of this is an ephemeral Jenkins home directory. To achieve that, Operator mounts emptyDir Volume as Jenkins home directory. It is not possible to overwrite volumeMount and specify any other Volume for Jenkins home directory, as attempting to do so will result in Operator error.

    +
    @@ -1805,7 +1822,7 @@ Example:
    -
    Last modified October 5, 2020 +
    Last modified July 30, 2021
    diff --git a/docs/docs/installation/index.xml b/docs/docs/installation/index.xml index 9bc06edf..37e38d05 100644 --- a/docs/docs/installation/index.xml +++ b/docs/docs/installation/index.xml @@ -4,7 +4,7 @@ https://jenkinsci.github.io/kubernetes-operator/docs/installation/ Recent Hugo news from gohugo.io Hugo -- gohugo.io - Mon, 05 Oct 2020 00:00:00 +0000 + Fri, 30 Jul 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 efa05ade..b751f91f 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -2,6 +2,11 @@ + + https://jenkinsci.github.io/kubernetes-operator/docs/installation/ + 2021-07-30T00:00:00+00:00 + + https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/deploy-jenkins/ 2021-01-25T00:00:00+00:00 @@ -12,11 +17,6 @@ 2021-01-25T00:00:00+00:00 - - https://jenkinsci.github.io/kubernetes-operator/docs/installation/ - 2020-10-05T00:00:00+00:00 - - https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.4.x/deploy-jenkins/ 2020-04-13T00:00:00+00:00 @@ -369,7 +369,7 @@ https://jenkinsci.github.io/kubernetes-operator/docs/developer-guide/ - 2021-06-10T00:00:00+00:00 + 2021-07-30T00:00:00+00:00 diff --git a/website/package-lock.json b/website/package-lock.json index 57c68fa4..fabb2bfa 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -330,9 +330,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001245", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz", - "integrity": "sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==", + "version": "1.0.30001248", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", + "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", "dev": true }, "chalk": { @@ -568,9 +568,9 @@ } }, "electron-to-chromium": { - "version": "1.3.780", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.780.tgz", - "integrity": "sha512-2KQ9OYm9WMUNpAPA/4aerURl3hwRc9tNlpsiEj3Y8Gf7LVf26NzyLIX2v0hSagQwrS9+cWab+28A2GPKDoVNRA==", + "version": "1.3.792", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.792.tgz", + "integrity": "sha512-RM2O2xrNarM7Cs+XF/OE2qX/aBROyOZqqgP+8FXMXSuWuUqCfUUzg7NytQrzZU3aSqk1Qq6zqnVkJsbfMkIatg==", "dev": true }, "end-of-stream": { From 8453b3e9fecfa8ad7fe06732923476c424f7e8c4 Mon Sep 17 00:00:00 2001 From: Szymon Fugas Date: Thu, 5 Aug 2021 17:27:19 +0200 Subject: [PATCH 12/16] Add an issue template for documentation (#613) --- .github/ISSUE_TEMPLATE/documentation.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/documentation.md diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md new file mode 100644 index 00000000..a0ed0b42 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -0,0 +1,14 @@ +--- +name: "📚 Documentation issue" +about: Suggest changes to project's documentation +title: '' +labels: 'documentation' +projects: '' +assignees: '' +--- + +**Relevant links* +Link(s) to the section(s) of documentation that are outdated or otherwise wrong + +**Description** +Description of the changes you would like to see \ No newline at end of file From 858f0f4c7289bd518ac419d57116907940109429 Mon Sep 17 00:00:00 2001 From: Szymon Fugas Date: Thu, 5 Aug 2021 17:28:01 +0200 Subject: [PATCH 13/16] Docs: add info on restricted volumeMounts other than jenkins-home(#612) * Update note in installation docs * Update Helm chart default values.yaml * Update schema --- chart/jenkins-operator/values.yaml | 5 +++-- .../en/docs/Getting Started/latest/schema.md | 7 ++++++- website/content/en/docs/Installation/_index.md | 18 +++++++++++++++--- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/chart/jenkins-operator/values.yaml b/chart/jenkins-operator/values.yaml index 1c92fb90..60c992cd 100644 --- a/chart/jenkins-operator/values.yaml +++ b/chart/jenkins-operator/values.yaml @@ -120,8 +120,9 @@ jenkins: claimName: jenkins-backup # volumeMounts are mounts for Jenkins pod - # Note that attempting to overwrite default mount settings for Jenkins home directory will result in Operator error - # See https://jenkinsci.github.io/kubernetes-operator/docs/installation/#note-on-jenkins-home-volume + # Note that attempting to overwrite default mount settings for restricted, + # non-configurable volumeMounts will result in Operator error + # See https://jenkinsci.github.io/kubernetes-operator/docs/installation/#note-on-restricted-jenkins-controller-pod-volumemounts for details volumeMounts: [] # defines authorization strategy of the operator for the Jenkins API diff --git a/website/content/en/docs/Getting Started/latest/schema.md b/website/content/en/docs/Getting Started/latest/schema.md index 2a1444c7..58638cbd 100644 --- a/website/content/en/docs/Getting Started/latest/schema.md +++ b/website/content/en/docs/Getting Started/latest/schema.md @@ -661,7 +661,12 @@ Values defined by an Env with a duplicate key will take precedence.

    (Optional) -

    Pod volumes to mount into the container’s filesystem.

    +

    +Pod volumes to mount into the container’s filesystem. More info: + +https://jenkinsci.github.io/kubernetes-operator/docs/installation/#note-on-restricted-jenkins-controller-pod-volumemounts + +

    diff --git a/website/content/en/docs/Installation/_index.md b/website/content/en/docs/Installation/_index.md index fcd6ba28..17b8df64 100644 --- a/website/content/en/docs/Installation/_index.md +++ b/website/content/en/docs/Installation/_index.md @@ -883,7 +883,19 @@ If you wish to use the newest, not yet released version of the Operator, you can You can find nightly built images by heading to [virtuslab/jenkins-operator](https://hub.docker.com/r/virtuslab/jenkins-operator) Docker Hub repository and looking for images with tag in the form of "{git-hash}", {git-hash} being the hash of master branch commit that you want to use snapshot of. -## Note on Jenkins home Volume -Current design of the Operator puts an emphasis on creating a full GitOps flow of work for Jenkins users. One of the key points of this design is maintaining an immutable state of Jenkins. +## Note on restricted Jenkins controller pod volumeMounts +Current design of the Operator puts an emphasis on creating a full GitOps flow of work for Jenkins users. +One of the key points of this design is maintaining an immutable state of Jenkins. -One of the prerequisites of this is an ephemeral Jenkins home directory. To achieve that, Operator mounts emptyDir Volume as Jenkins home directory. It is not possible to overwrite volumeMount and specify any other Volume for Jenkins home directory, as attempting to do so will result in Operator error. \ No newline at end of file +One of the prerequisites of this is an ephemeral Jenkins home directory. To achieve that, Operator mounts emptyDir Volume +(jenkins-home) as Jenkins home directory. +It is not possible to overwrite volumeMount and specify any other Volume for Jenkins home directory, +as attempting to do so will result in Operator error. + +jenkins-home is not the only Jenkins controller pod volumeMount that is non-configurable and managed by Operator, +below is the full list of those volumeMounts: + +* jenkins-home +* scripts +* init-configuration +* operator-credentials \ No newline at end of file From b82fc7c7640a28a6b4912b533b9534d7e81288bb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Aug 2021 10:03:57 +0200 Subject: [PATCH 14/16] Auto-updated docs (#616) Co-authored-by: Sig00rd --- docs/docs/getting-started/latest/index.xml | 7 ++++- .../getting-started/latest/schema/index.html | 9 ++++-- docs/docs/index.xml | 7 ++++- docs/docs/installation/index.html | 22 +++++++++++--- website/package-lock.json | 30 +++++++++---------- 5 files changed, 52 insertions(+), 23 deletions(-) diff --git a/docs/docs/getting-started/latest/index.xml b/docs/docs/getting-started/latest/index.xml index d6501db1..0b4fccb1 100644 --- a/docs/docs/getting-started/latest/index.xml +++ b/docs/docs/getting-started/latest/index.xml @@ -1679,7 +1679,12 @@ Values defined by an Env with a duplicate key will take precedence.</p> </td> <td> <em>(Optional)</em> -<p>Pod volumes to mount into the container&rsquo;s filesystem.</p> +<p> +Pod volumes to mount into the container&rsquo;s filesystem. More info: +<a href="https://jenkinsci.github.io/kubernetes-operator/docs/installation/#note-on-restricted-jenkins-controller-pod-volumemounts"> +https://jenkinsci.github.io/kubernetes-operator/docs/installation/#note-on-restricted-jenkins-controller-pod-volumemounts +</a> +</p> </td> </tr> <tr> diff --git a/docs/docs/getting-started/latest/schema/index.html b/docs/docs/getting-started/latest/schema/index.html index 59ee07c2..f31e941d 100644 --- a/docs/docs/getting-started/latest/schema/index.html +++ b/docs/docs/getting-started/latest/schema/index.html @@ -32,7 +32,7 @@ "> - + @@ -1471,7 +1471,12 @@ Values defined by an Env with a duplicate key will take precedence.

    (Optional) -

    Pod volumes to mount into the container’s filesystem.

    +

    +Pod volumes to mount into the container’s filesystem. More info: + +https://jenkinsci.github.io/kubernetes-operator/docs/installation/#note-on-restricted-jenkins-controller-pod-volumemounts + +

    diff --git a/docs/docs/index.xml b/docs/docs/index.xml index 77dc0733..5f1c71cc 100644 --- a/docs/docs/index.xml +++ b/docs/docs/index.xml @@ -6194,7 +6194,12 @@ Values defined by an Env with a duplicate key will take precedence.</p> </td> <td> <em>(Optional)</em> -<p>Pod volumes to mount into the container&rsquo;s filesystem.</p> +<p> +Pod volumes to mount into the container&rsquo;s filesystem. More info: +<a href="https://jenkinsci.github.io/kubernetes-operator/docs/installation/#note-on-restricted-jenkins-controller-pod-volumemounts"> +https://jenkinsci.github.io/kubernetes-operator/docs/installation/#note-on-restricted-jenkins-controller-pod-volumemounts +</a> +</p> </td> </tr> <tr> diff --git a/docs/docs/installation/index.html b/docs/docs/installation/index.html index 4aa60183..728a3edb 100644 --- a/docs/docs/installation/index.html +++ b/docs/docs/installation/index.html @@ -767,7 +767,7 @@
  • Configuring operator deployment
  • Note on Operator’s nightly built images
  • -
  • Note on Jenkins home Volume
  • +
  • Note on restricted Jenkins controller pod volumeMounts
  • @@ -1660,11 +1660,25 @@ Example:

    You can find nightly built images by heading to virtuslab/jenkins-operator Docker Hub repository and looking for images with tag in the form of “{git-hash}”, {git-hash} being the hash of master branch commit that you want to use snapshot of.

    -

    Note on Jenkins home Volume

    +

    Note on restricted Jenkins controller pod volumeMounts

    -

    Current design of the Operator puts an emphasis on creating a full GitOps flow of work for Jenkins users. One of the key points of this design is maintaining an immutable state of Jenkins.

    +

    Current design of the Operator puts an emphasis on creating a full GitOps flow of work for Jenkins users. +One of the key points of this design is maintaining an immutable state of Jenkins.

    -

    One of the prerequisites of this is an ephemeral Jenkins home directory. To achieve that, Operator mounts emptyDir Volume as Jenkins home directory. It is not possible to overwrite volumeMount and specify any other Volume for Jenkins home directory, as attempting to do so will result in Operator error.

    +

    One of the prerequisites of this is an ephemeral Jenkins home directory. To achieve that, Operator mounts emptyDir Volume +(jenkins-home) as Jenkins home directory. +It is not possible to overwrite volumeMount and specify any other Volume for Jenkins home directory, +as attempting to do so will result in Operator error.

    + +

    jenkins-home is not the only Jenkins controller pod volumeMount that is non-configurable and managed by Operator, +below is the full list of those volumeMounts:

    + +
      +
    • jenkins-home
    • +
    • scripts
    • +
    • init-configuration
    • +
    • operator-credentials
    • +
    diff --git a/website/package-lock.json b/website/package-lock.json index fabb2bfa..196e451f 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -288,16 +288,16 @@ } }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.16.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", + "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001219", + "caniuse-lite": "^1.0.30001248", "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "electron-to-chromium": "^1.3.793", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^1.1.73" } }, "cache-base": { @@ -330,9 +330,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001248", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", - "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", + "version": "1.0.30001249", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz", + "integrity": "sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw==", "dev": true }, "chalk": { @@ -568,9 +568,9 @@ } }, "electron-to-chromium": { - "version": "1.3.792", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.792.tgz", - "integrity": "sha512-RM2O2xrNarM7Cs+XF/OE2qX/aBROyOZqqgP+8FXMXSuWuUqCfUUzg7NytQrzZU3aSqk1Qq6zqnVkJsbfMkIatg==", + "version": "1.3.796", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.796.tgz", + "integrity": "sha512-agwJFgM0FUC1UPPbQ4aII3HamaaJ09fqWGAWYHmzxDWqdmTleCHyyA0kt3fJlTd5M440IaeuBfzXzXzCotnZcQ==", "dev": true }, "end-of-stream": { @@ -1338,9 +1338,9 @@ "dev": true }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "dev": true, "optional": true }, From b400a420e55209fcb9ee14f7cc85121737cd10d3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Aug 2021 13:06:12 +0200 Subject: [PATCH 15/16] Auto-updated docs (#617) Co-authored-by: Sig00rd --- website/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index 196e451f..334ea961 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -568,9 +568,9 @@ } }, "electron-to-chromium": { - "version": "1.3.796", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.796.tgz", - "integrity": "sha512-agwJFgM0FUC1UPPbQ4aII3HamaaJ09fqWGAWYHmzxDWqdmTleCHyyA0kt3fJlTd5M440IaeuBfzXzXzCotnZcQ==", + "version": "1.3.798", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.798.tgz", + "integrity": "sha512-fwsr6oXAORoV9a6Ak2vMCdXfmHIpAGgpOGesulS1cbGgJmrMl3H+GicUyRG3t+z9uHTMrIuMTleFDW+EUFYT3g==", "dev": true }, "end-of-stream": { @@ -925,9 +925,9 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "has-flag": { From 853f4857466922de550f934d459951b4a1e02341 Mon Sep 17 00:00:00 2001 From: Morten Birkelund Date: Mon, 9 Aug 2021 14:57:00 +0200 Subject: [PATCH 16/16] Helm Chart: Remove empty priorityClassName from Jenkins template (#618) Also bump Helm Chart version to v0.5.2 --- chart/index.yaml | 10 ++++++++++ chart/jenkins-operator/Chart.yaml | 2 +- .../jenkins-operator/jenkins-operator-0.5.2.tgz | Bin 0 -> 34161 bytes chart/jenkins-operator/templates/jenkins.yaml | 2 -- 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 chart/jenkins-operator/jenkins-operator-0.5.2.tgz diff --git a/chart/index.yaml b/chart/index.yaml index b7e1f554..0044cbeb 100644 --- a/chart/index.yaml +++ b/chart/index.yaml @@ -1,6 +1,16 @@ apiVersion: v1 entries: jenkins-operator: + - apiVersion: v2 + appVersion: 0.6.0 + created: "2021-06-11T13:50:32.677639006+02:00" + description: Kubernetes native operator which fully manages Jenkins on Kubernetes + digest: 48fbf15c3ffff7003623edcde0bec39dc37d0a62303f08066960d5fac799af90 + icon: https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/assets/jenkins-operator-icon.png + name: jenkins-operator + urls: + - https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/jenkins-operator/jenkins-operator-0.5.2.tgz + version: 0.5.2 - apiVersion: v2 appVersion: 0.6.0 created: "2021-06-11T13:50:32.677639006+02:00" diff --git a/chart/jenkins-operator/Chart.yaml b/chart/jenkins-operator/Chart.yaml index 9d8c137d..d90d312a 100644 --- a/chart/jenkins-operator/Chart.yaml +++ b/chart/jenkins-operator/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 appVersion: "0.6.0" description: Kubernetes native operator which fully manages Jenkins on Kubernetes name: jenkins-operator -version: 0.5.1 +version: 0.5.2 icon: https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/assets/jenkins-operator-icon.png diff --git a/chart/jenkins-operator/jenkins-operator-0.5.2.tgz b/chart/jenkins-operator/jenkins-operator-0.5.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c2f1afe9e0063a9c2e03b84b419cade3074dd85f GIT binary patch literal 34161 zcmV)IK)k;niwFP!000001MEHfZyPt#`B{Gj&ne*K;9W^}Z1;r2eQ@lgb(1)Todzfl zhaRP+B-Z=7eaKP1$KQT4!^b|fyIQ4odv{+5)LHG4!{KmdI5QlwzliWohN%<9BH>w- z44*uF89_NcJ;r~>r^lo6zotAHzZj2>jz)*ahvO%s@$u+n{Dd7p0xlaRPcxn{_GBuP zJK^V{*HUlW_kYv!OMU*&mpsYbH4pp;>jNkFYyPuS?e zFz6`%&*z`V@}o#n8HE$JIvnsgwm~vO3WGGZ`@Ul!=f}ec`bg5A`zxc%Dq@FXhWGsu=ocpO@a?aLK z&X#;tbOj*KZy5Iz!M!!(p*IAuSnHmL)YKEPAK{lm8%3eN2Iv~43CogP45+(82M*kOoj^wIW!aAa5Zwr?x$fO7mE1KBA1?UbZ=uPi_G)k zkj;SxL6it)t23$&D3x`71J;U4sH2e}iAbY7(KCgVh$ByZyqCVuro!s+KjYiKuxFKz zpmiBfS(?x1^3!twQqlcIS82>=!pukU;(jR-#W@C#)Ph!%Ea7ywOGCzNtE1FH0{fF}c3gUd8!&yaO9zIbj} zy-^-7)Trz%8Lpl9Sy~XgfzWS1+_Gl?9&87wy7$}&7BnJUHX$Cmho`6R3kRw@z2ddkp~Gmgd(5>p0olqe+$ZEEyFVcrx<07a3+ABH;`2ssuZiKx~H zQXg(16rd*L9C?=12T)-SS}-Ra%QN+Ljg(0kpGJ8xcPQ=QO!{gi0qnCpeH2Pm5FBod ztn#@S)|970v6oVvv3@4KMp_&-Un2gIOSC4YYZ6%NdC)+XQSN);erEKH1)>xOwL;2J z?Vo^YPtsuX@P3GHuPjHs$^8QmUopFTR80w~|?snShbCoG=yJ+5G-v;!k!q zFI=T)>`*P&-DuB)`7)5%5akr;OT^P?Z_HnRYfc5qKnVqLPOG~1avW>ysx`0>Hd_TJ zgDIr+Gh?$j2St568U^}AAV5~Zjy?KL4iu3H`&xrqWoZ9Ss===!KL>Y58B3s<$|HWc zHV)7MyBDO)(CgOr-;~ep@)#;=5UNL`2Gmyoa{cjK*U-+M`ck-gpo|i7^036HBT@|g zeWW&E>B_*21xABEuPV_+jYerO@1i`+l`JGU96&j!5n3YMBnW|TV0`J=N(P#3MMpCXoA4N?65K*lEm01U#c6l^42;4 zj3?m$Dg}CuArrD&5`m?ZIOt#~{7U30_^*t5Atc7R;(4|N-TK+siGYh(tc|;AJqrX` z_CL?AFVTxFH@?+vCrWRNA8|d@+Gv)On}b2%Pf8NiwAH>S#z^w;EXCHq=%dky-p$kR zk|>Y$8-j}TwfI2om7G1!`kKO`6Y$~F{(jHhV#s4@y=EJ!ac>oxwHbP~IFrdPDobN@p4e0_`FlLzARtzthQfQ&r* zcC6l}`3%&0T1JQ7XEG4ri`nYOdRgM0>@n`7Qm<{`M~^%1qlXyx*!X(1bVy`o6~@4^ z8}*86+A!FDYAS0lx3+B6z9L8y!bW!yY&WL}K@U^_wA3w`vfz#C@K0r7*Y?d6K;f!3 zc@)!5=+%v^NmS~vQVy-%Te0JTm@yg0kKih_V4>bBUMltmERBaI+?3wS3^xuj;8dTj z+I%6IHz$kgZ3Oy@2&l1Lwn0~R3(Pvjy-am9P!t>h@lhsOp1$Q%#p)`kxuTaopKfk1 zYRbf`*@U9^BZHYW?^GPoGHMayL_3KpSE?Gz$&L^fx?}~$yIFvj(LJoTU?G8Zd?&21 zgvhlhMp{NyD-ui%39G-P+Ajsng}9D9kYPd01D086XOPU5GVm$Yr;Pzmw;-4u5UbOq z;G9Q6fMVA~jG6jI^((cFs&d$H83kg9Uh{A&!=b9>rc2X_=FH7r^oL3x)yl1%=xVkX z5Rh4v8gH?D(+{lXuc!S=sj3zTLsJ|D=av zVo_`fJnO4fDHTNvql#aioxl0<`sa(w8{kY_8}bIQ;uaZI7@2UqXj$0dZgw0=cXfQwgW>3QS{+GJI8M?_Lp z-to8^e3HwZ5f5SlScjB5i}H->02wdBCOn~(zpR{D&eBOhBQVu!tP8;_wjgC1rd+IlDM z=mEE(FXvZLb`7f&4z3FJL3T7dHVlC_?^hy8V9qG`g%65sJdTZ(TCP=WI%6(iNBd&F z448TY1FBe-m5hWSg12Bw&XCyZRTlXoDQycf#^)4nUsHwOJJ0H0wQS`7xl7>(auI@E z^-z6m%l|z-JlV+q8-LCJ`%MZMkQm=iK+l1)Q1hOSa)@C)NA=+jO#CB{F$@F` zz$-pm_|X)6J@77|_Cb;HLKb219$hO?C%Em4S{xUlx%@=_B-H!EbCzFP4iT{xLt(RX8jF zl?~p(AKmmmhQCvO2Y<5wp8pT3egqpD7EE?|@d`SGB@8pO1}>;5K2-JK)xce)xSKru zH_|p6@;^(w^nnk7>~Q`=%m2w}eDwAF$8S-Z=il0|iT41R;GO#aTqm<5eqj?D1|~Zd4eoL>s*Pak z&BcWXUG&#zbrA^xx93kr?hAK3sO1Qo%mJu6NMk|4u7%pXD}B*vxvD>fYq3?0VVpF3 zQ-1qarYeLG`{3C5MMg6DA+TWOK2OSTL9@qz)Rjs8#Wk2DlS=F{1rzXszHcm}}RS4ublOipHtz>*x-q*U^N4#_{ym3=X z`SGw;tHCG_Nn#)}Rz3;0LEoZa4s6JxDK3>R!(BT712zMu*&$27PnE8{2<2xBo9qzm zR5|N4m=w6iTosD6kWm39#u~t2FDwsB@bpO*_RgdaR&qiNYh%kuS8E_ zXYLj%R73~9Qc@pg%!*oMp$4c;c(IiC(z+N&ZMRqqs^K^2-6$1p^WvN|z^u;FqwiSO z=W81=u<*(TOD9p(UQCgpVgitOS`qpHjT)q-eX>fFc(W8y`4p`G8BbbjZW{m=@oAHt zT8HrpDiZ@1JI;D2s4)2*cuDP$`e36*SK09Dg;;4vO>Kj#pXj(DYBgn13aQ`{Za;2O7RC#~vG!ubKr<}^0 zfn9}m$$}UhR~+ZQcYtRiq&|w2hkDeg$kA6mU@0D#;3nmAD|qE$V>CR;XDVm^+5Z3R zA25;4o&#YpT^-2-NUI|_rlYNpF-8~)b#_O5!U(C%FdodIKTQ0mRhVZAoD1A1>&rj` zwsb52^~{L4LB*Ew{1+zQ43~oY*-}M?F(dA?NTNOj&O_a@i^HidOy3p;$I`kUv{mIv z!q*)&Ti1&ns#JIR`{=dvdI~{>r&UlJRBQ}PBXI|K9<}Kzv%ct1`lcyY9YqJ_Y+^y5 z0bH8gg-qZU!M4l=b1to2)PZM@Mr}-jdY)$!MDgTB=lF0C3(-uhuAGKGV}93>WueGm zw=?j}AJpD9XFB`Btn7i!{i-Hov<-F|MZVxob*@ z(=IA2cx@!^L*Q-X?Lpk_r0pc^7P4;BIaL;Ksif$%tB$Dd#c$IN-<4}`_qQrKpb>4< z3kn6Mx@j8SR}H|vYJjgA;E^_?%Md^yo2W9MioM6oG3}6`GDfaDT0(=tcLTA93%;o44Ht zV+Ey)qLq!Ak#WxQ#8!LxASyuC4Ke zosn8K?;&^K)qc_1Lu2;<20vCPZmjCUY@GUImppEIwdJwH}+x7#oe*i*3-!tY5zOfN+3a0B7F=w<` z@q#P2th`Zow_N{)6*jY-Te?zLak2VIUi#K_l9xW16RjEsooH==ug zN-vtuxwb(5cBEj|ProX_o2OsteeLvX3+Q83OP6u9fw^(;x0y~YV2@gf*N;psU^|J& zj&>qbOBapAqqn6baxD5}mu`j!wAvuzX)pa;x=w?B+ml`;Ft8r)RjaoEKEZ1?9%7lb zf^S#aQp})`PM)d63QXl~gWGTE(|+=Ac!S+d9ja)Y$Kg6CvSX(npBRb6zZG{OFU z_h#<-yNmK+2g+X2JFezziAxE)WO&<9N;lANo_##K`T6SX-K*zhy^BvVr>hOsq2TIv z@qSu9lGnZ7U*b)G<_MnAz*BXfr4Rb{K;Ld@0zPVQx)Y=f<2*B&LFPa7P4Y0rEEjHTNwCWu+AD7pXgzm*wy1k=Q1{!O?v>P071&o+J{5Eq z@53>v9Ev|^tykFroq!v}o4vaFaP!mk`^&2jEt1>`u~W)hCAkx14=Hby`Tu`1a44!?N97Zy2CCpQ{X_&2a&v=dF%c zwV`#m&t510+sm^s62Z)Yu0um{9~*XzlE z6sqOn+FX_OrGT3kjEzO12gqK_Mrmp20kZ$%VHb!VPO(Fhs??T~a-ex{ z&+S(2s_ZU0uahX)S$uBQu7%kmYf=(hoTUm5l`MU2blLxb0lueG`+fLl7u|@(-evGc ztZ&4;U!#p3ay;;j8(g>nL^rJW$U69Scw>Ry`d6;ujB-<7Bl z-Tm^Cq~*0@Z|wlM&n-WAAHYhA`=L(pc2MIudb?{#C%T4D>7N}s{_y_d{e+!)p1yD& zIDMY`>VK60TDdq2wLM9?D0r~sfaTKruRiL*lrNgWC{|mmUp$MqbVy)b(T-M9b^yvy zL*hXn^XjL+?C<~W?|nJGfKl2(t^lHwC@$W^fhwaf zTxz84sy~yBR9L_9QesS=M;lS#k)~*VV6HY)rp;=+_vp*d+@Sx(q`}69E=peP;>ot| z$JR!Gq}3;;JWMPy+k1~phA+`x^Bw1XXB}p?KVCnOF0(l`dakSk)fX^bjrPy>-nA`q zBTEqO&-E+x(7g-TWCG<|PrW_k2LrYl*M$Xa@4U9hEiwhD$&|7sB^2E?|9#_}6A_9~ zN{SOgNtNA--Dww@siU}@IQL6gmyi50x=#ltmTu99rLu4~ zl7$6#^ht_hOHQCj7Y%`&Pm9q57N{%4(xOLJnR=QE$u+ibrN;i5@hWE538?6pm z*KSA4KB)3QHAJE2G=?tKjZQ>s8sEiv%0^rmVe;^XeT8U@80kf>XFV5ID;TQm(R5jW z8G-Vm#4YwFtwJkLb5!i*9j@>j?4ZIOvgXf=;J>$i{`lQ!`^&AZpY}%o_RGgxKacSr zA8miR{Z9Sy@%Fa({<~M-T$~>N5^ulzDOt{M>92QNKSjsCFoA4ufB7emNxmH!!ByfM zM`<>qBatOkxq#G`b-#IMipLnijfzjM`NDKzZ&t}#?yNkx8%2EgYh6&~4LMfuatHww zS`iw(23b$NC&PpiKxwHOgS=<~1kH^DG**)#`YxQsQw3AJWiWaSMi0kWi_wE}Y634& zBp56nUO(s0+Zlc7^=7tH)NOdLb&M*t1WKr;izU=CX{p2AJgV-cu_C>t=cuNW404>QPd8V5hZ_rxj5m*U=p zxeyEE1r(xJvLZQc!21y9c{+(h69yHTv} zIJtAcR4%V2MG6p;tbIfO-fqBD>G3g~-pHP{rX4!38946654FM9bv8bd$Hd46^>$`m zm}Y3hr~~4|8eC33GQnEpf%hT{@Z|vF?o6;gGJrS#_vQV3X9tIrmcyIZ`|^1&E==`t zy>Hn;QW{ZWO#TsPk7=dQiZX&4=kB6AFrsjBgVaxQu+rCRNcw9HInhPsJCU06ib^xk znSsvqOlKsDNkxHgZv0S)OwYnLCHe40?ad=2EEw+*H?-4irYcjOcB#ifJMu75hMAC5 zv!oMT3ie!}{ti&p94|R#FYN@cA?j(zYUto1oMwCyf$1g1a28)hlZVO7=g1CZ5jxDH z#uhc$zZNwjDxaqcycTVxt7r(uBI}c(?XuK0^vp;daV(cluor1woP!eMrT{jgo~j2y z4Vq9x`FK8$rl7RUglchBFbw*ktxn0-D;OsTTS;A;GR)D+d9i^OJn;I)302%nbOiwT zYcff*DP;>fK~iB?e6&Piqos^ik|agQHY zCA1v==4fW+&~kXx5cM#<+0{l{s)_p88QbcP+I2;JjD)-jq@2>GI2rQTH0Qf z)B|iw{nCc|q#nTADw$R)mHM0-qo%1>&C+r(tCt#c>0)T-iE`E7vn|J!4#MrjA_0&a zES{_oFH9|#Ar@SLIaOty*G20fOsylK`xcr2Vuc2hcoNV|i?sBd`<%bd{SQt~$H9Mz z8za_o8D0tspxS?dHE;u7>f?(Sf*I`lw^2BSY6Ec5#XtF&+yOC-_jP3)PTERg zQW)gph{Rm=5LhzyIiPDVp|9~$uiOdR72Qu7Jk(UM#LKBg6PLA0DE2?0B?8KLxf;8; zs$uv#X<@8bb>uoIFp%L-s*a9fG#>d+=4hWjf_$3!`+FB*usn9vM|@Z19qLg&#OGq| zl|NR;YDB8IIkFgEN+bm@57z5)W)fEC?R9)uVuSqx@3^$?QE44x(rQv5vmjZ{g|b&h z#%D#j;T}^;SDdY{39$0zD|P^havpH^VK$$C_Sq+&jcLldI!+Rt9K1gG_56oJOn2jB zLQkP&?e$hxhi%iuhhc3Xddt45AdxU_1?3=>KCdLx!4+BK-S8!9BSfrqNWH~maSpc3 zE^_bY#o;MEY>2*LqSW>{xl3nv+${+M0S%Wq#($yR0~NprfUiP}$$Za(2nr<`eIVpJ zghpEN1Yws}I(Q4uYX79N_U0R9@UIoS`G}d?fvtwn&5w&3D1U|WONyWAdUXTk_n`bA z3hndw@gj@Pi?p_hl|3r9cY3VB@-DkyxWi(aOy$!h(gbmwkRK%VL_o{Z-0g%-K~wp1 za--}*Pjp)k-X;`ZC+79dkYcZ$8F)S81I8g z7Unk*=EFyCAzKE43u2#Bw{+ud`6BpNhf- zm@){ZHpRhXJz07F@FImMz>PTDkn4Iz}| z;1K#(bOmiM%gn|0E65Xqn_#SD8z%k}9MZrS$FemZie8BCpGW z+`IMIkHULdjXf;J$_~uD9ZqYpZ3E^SqS`FQRr@a!X0w&J*7nPU+F&7e+kKhvOY1Pp z=F2zqm6le zOV#&K=KAD0bLV;T8QbvgX>|88r~46qzG&}fLg%Zl9_DktbFZ`M-18QDo6Of{E`PkK z+>6@rP2_SC9-7|c%;Q~5E_3!e3>rNfGkP#&_?WMKOxGSITpwe$_QDn)BE&S;cn}hg z{>9~}6fn|Qof7~lOZ(M^fFA0~sv^TVm4QYwTda^y^DQ|2tvriKfbI#c+w)x^`r-eS zk%LCaAkD>X;9Z|cZ+Axa6ztP`aZu18VoMMTd0yLwFkk9Y98{Or1D@aCQ{X-{6^Pq2 zx*SgJQ-bV6{gj}fY?h^hl3MDkf9{uM+4ga6`VN70LWZL217g7ZFpki}k+vQunwJBu zbdE9LKF)deB$~CuVFpSz6X+wHW&hIhV}DMue+BvR{Yq3tJde_4(X%jhe-lq`JU9)^ zA_u#-EyM0hu&X@U331=MJlAhTqGFz{+aS}}*0=OImVKx~Fh?D|KL7RQ!B@vGT{q(x z%CH*AYfyI^$S2-3Au)irWSPW&Us46dU`s>Z?xji~cBku5KOLWw9+?z0vMilf2#{;# z@E{08ArZVAAvFcpLaLE9v8mi(IMv=Lz)wIFcUD<=iGCpgMIbOBt5y~vb-}FDCzQ#2 zC%9ZPd}oU+o`+dHdoU*w&IDyll@Rh!UCz;)<8uet*KaPc*)c@ipc@OH#_ha}0G@2a zGY$@t2l^68hD-eeAC}lb=y0xhgJjde#@-nJ-v;b%1~R1b13G|K65oIkAd8Bj0kXyb zx#xXXP}jcvQ`iHuZMZ&V+#QD9J`4cyW**4uSw+2^sCRASl20fxK;AHUh}eII#coed z)%k+!SRll_(!m8^K&GpmV2=g!FTq>!e;^Wk&f)ofl-*BtAgTA{)O&}2gj)vB!VZDj z7DLr+YceP}aHOW8%`b?{;>NPz$_DpXZ9Su0!pnz1cBEw;sMlQ;T%kxO zDXZeRWWF!J8sK}Rr}90xD`cxs#-Q(yPImw#?-q*3&krw7ZPj5zJkIJI>#;XJZG$X+ z>C(aaEoq)b;WX|${7|A>3EZ`}hbv-L7R}Q;2w?%4O2Lbg=^~9m;-TO~x5zStF1C&# zbWx8XbWx2Vba4n>tRF+@V%vL$(8anr521_I_Y9$nL+IiVy4XC1(8c;Ogf7-UHH0p5 zzzv~`L+IiVx;TU`ekdx?5V|;oE)JoKFow{@n(iLSPXyoQ zVLD$x$>cNjutrXBmSeyGGcL-%tLs&Kz05FjZkOtrk0vymkzUG3zkIiS|M`4o7SCf> zlp~BX*znYghk20eF2vfKR4>8;BAH$U|Go9|$L~hlUv6#vv^V;CQ?$#Q;6f4$rKDLVdz31oZw%RezD_h?dTWAjTqTf?AQ zVB6}qNJzptG!zh&%L!DXVR@s-NUTcPzdtO8;X&!8Ieb9&-zBo2$hkEg5l@}%`P-!65_&=uH{9=*p-mw@Haf>Mnqc*-7xOsT=jL) ziVa@4k$9zey?eSSWBjHrH}i*J5Xj=<0iuecw+@BFMz3@EXpk-_R9Ok;wyI_ zG{C`2mZh^?NZ=9N28K#6W{<8Ch>*M%>ksCzg9`;5jvDS#0quP7&3)^yX5qCCgab!!RXr?U-Lyf@cVNVfP%*;UefWUeSbayF zzXt&3ljR6Fbns z0(CH*iaB~N?J?m4hw4=iW%f&O`sV!P|N74Y2H>2R7kEuUTVk0Rr*9no(%g_U86`WM zLCXWZ2hM4p;p?nS0K21?x%iEe4M0()CJ(pm;@xg4S4!MVEU#liYt2s zDsnE^rre8D^=<}mG800kWj#4BwFG!SM9o96I8XDtAt%yY2zro&0v||;MCvoS>>Vhl zd%?SJS5a69fstepa*stxcsb*^c)hYD!s#2a)-!=}U+ZXTPc-kgSL;#V_yT>i_<^Izsb_2Z_7}?$Zt-L@UAZDo{GzzJz#RgN@g|(kCZ(5J>X~s zD?x@`CPI)Ax?=bsB*q-jfdN&68pe_@}*&C+t&p++e(~6k#I!)l3c;d=QGL0u8(Z;Z-&>wUOk%Z6L zatx%$OCo4lhISHAB52dU6WZrY94RU;m?IgoQaa$-cphF0U8K;c2iXEizQo3-U@8$5 zK8#?>3?fIPWob798$XZO3gO4b(Jn;dmp!`GCAm)j=uULl*96V8tjKrm5@!vhKzi&?B&MElqh z6mc;VnCnDFCUF5v9FTvIgv7z7^OXsM$QfBRSOgNiVri{BbTpBT0hEc3C9-kQyN&w=QvP7DDBvrzC^VvB@jTwPmQrq~rfOp zXz#REFuNHRkl~&Q4C`E~AOy=$8WcK_;4`-26g{z2(+purt6GwZ&5|xfnZw3S-@Bk- zGlZrh`ha&S7vI!;2me-4j`u5FiDhc9 zQ+*UhtLl0Tu&e5VzAl6wzenq%AEUgU=iy-nu)#@mzTlL#fnj07H?PhQY#=~_@3HVB z>;!zzr0L;w9_Kk)&7w=lvIw?RSj%->+$=B0f=~?9*;EZmK~L1 z?t1i3WfttXel!ot$KmEGLRXp#nd@&cDz2Ig{j?vKaj|MT^5BBoNzw?Ms$wk*VO!@JoE-oHBS59QRY;vP5| ztigLF{-R$w_f^(e4EZXs5BtL@oiYnAtd?Ccia?fkIxNa;AQqm{c^T3s&I+UxQgFc6 zCBX-qFE)EG-AJ1tb}hVS#%5Obq6$EKTSVC$nd?n@Pv7%Mn>17)BvtfJMW4u=MzzgU zsg?y5Xaux33HHbP zd%Yi5r%I@0(POF+3wx@nx2wC@`%G0#hxcq>(FG_&Hc+ug2Qz+jFNnLx$zz247P@D_ zPit_*?M@L*e*Q_waKG$@#z;bem%@+4n1sKX+#GpU;@a20K}U5@s-l8W7#1{-^cosW zz;A-`M~&+d&;MtX2wZGhvYYwp6A+4E7BwqSc8<|WjSII-$qEyVkxZUaZMy{YPTRL&f;>8R|?%nd8DV%5+4E{ zqcG1YJOz9bcky%yO&`Rh@M4+igu0l{++nu)8sbRahVbx?zO7-7vgQ=3y<|J&v^l~* z4)JP}-$u^40Wh$Hn>0zYZmG!9xV%d{`Ny(P%?Lk%Ma%aKnR66Eid<8+l0zxBqc^~* z@&>QxnZg`Jy>h`%)8+LIv!RdJcL=P6dnJQ;sO+bNI+awwER1bqUNe>CY0aMfp*GD1 zQF5Av_tAk<`7Vy`cO{D&fhaekrRKZ1w%tGCe_CfowSNw#Q>hLL42G&ssI=wdAY8;h z2<#B^-a&WVPOyxpU$&>KvDiuv^ckZh8V|-Vdz~?7`wU-&3v^B56TxltKzRmec9XHh zve(2iZ*%vg*>#x2|DYQ9fV|gf27hkl6ESNlfECTeCT+{j$|=+l71jor^gx>BM3*5) z+DZ$ZVHONRmVGY_zv!0gcG^7$%?1k~pkvxP!jo{;`);F0x#ezDo8a?tJ?jZdaBni2|6PM0$k+YlD= zRjfnxOK2B-F}_YPPa59Qm=Wzf>&0w&9XI<{ZH=FPTe1iFuvL}@(69%-MDLQ`{andh z@{NyW6w~xRf!adfpS|?p7f0n&x`qNh0$9iFc$$?{7m_nvC#PLxaf+U!nYjOLp2JF0qRLZ9 zy3{Vt!yHP42};sBsg^xt*0HFsV43fJTmzKqF|+`+V`6kaRKZx&xi(?~?#Kd7X7W|L5;3`f@_`go za}U68;sqVEn41EOloP&I!3-@h#k3&E42sZQ5Kxd6Av00geBfPQpW{Xb&&M+6wYZMk z!m=*084kLjx02|dT$T_+fW9Hyn5*7{6K;d~pr)}6-9Rvi5`0w@a&ie(KS0fVbGA7} zlW~yUkHr5MqXno~xk?19Nr3|!+B}^KU9+;|LNIOHQ#~z|Zoxo6Yi*4}<0i=PQe!0Q zA0obxIg5P_HftW%(#9p2zXj36k{IxVcIIa7nR#H6Hc2Fqg{iG(u`N)gntYnt4m>&x*<3wmWw}|kdBJ4}dXZkjmc4|0dmNk;t}GsG4w$4tbae#^zF2v*fKuw2 zpexqoF!eCZUr19*o5_~s-Fdhm6)Bo8iic^OsQ^-`;K6O!c!LS2ui_l#_cr_kNE-)O zOJ<|Sf~>#OuG2ORn9HBx5_3tqfN zztoDG9Nj4`+DLkC-4Sj=bZxqG`(C%ELN_KlyI|HQK|4~MTY=W4Kf9Bgy%ShFq^>$0 z<~;|K@!|wn8O-a-UG9{%?8=gN>}8X`XC{mnYG?IwE?$oF)N#P zB~R7~wk?mgJww(BdL@IFog3=}t#fDl%8Fedsbb~8G8fLvezh}O9UxtKuU(S1+cRF9 zvRNHKn{!g82(?QZ*loQc zlwy#R^470#noW@Sg!YuR*U|arGqT8l%JQ`UHnrFOC0`vZ@iF%o$ARh76El{i7G z`9nS_n!{RP*v%v9_W?AC6E{+wsSa+MDu{R;7{YZ#?i3;I=Va>_d#_uCDOg)oX6r%_ zxX9ZS*QyK6&BA3eX{{B{IHj7+(Dw8&xCJlV3`&-Z{lNZ?EL$T#TZ)%=Qqx%VidZ|m z=0SF>cFSx07;a`?W83wO%G!Eo#*Hm!MT>Jf6*D8sIaiZk7NAo>0I&F=B4Pucr!72)yO{cJkYEu-Hvm%lys zyd00n;^z}ipUi#FoPEPg?p&)oTfaUJpQE?7=jrwux_6et$L@ z=TC}s7Ev51FK%-s{{ke-&D@03v^t-V%?lL_3+9{)4I52lMG-=9EG69FH?3wdP#*xT zWn38g^;Ow?@jjt7{^d4$*ui7op{RrZptQlZt-px~5@z`?U=l*m{)_t8e>^s-l;+_f zB_C6`L~QtYBe`rDNdZL?V8$-wJBH{8abZIY=))jph@Ue+Km^%0k0ZcRpvCL- zTt+zW1gDrVQGS9V#_RO>Ep)l=Bi}86V1AFy{4RP>EQ8i99xt8dC8{%xvPC*>-Brjm zAV)fw$mrb|qvA?K)QG1d*pJ@|RWbknR4K*zWt`AN>BR~K9AHCo-s4e;lYl>QihUe} znzF}fyiu#v%~wbZe1P=Zh?+lP#FR6cTa)wBct)TJCu#R^&BuRVhBJ1t8nLhP0SN*Q zP3^mGkXOxn*Z{h%J&7P?Hqrz0$Q53ai>he2po2+a=#A zX@rZce)XVio)|A2=Veh2IbV52EGzau!PiDK`fF^VqFDwq;SBX z=aO1$3M^pL-M55BZI0%VbB%U?1Kfp1F4u6YAIHH(yb#)i5q(L1BkNUey+031|AOQcc#1?X z;UcSkQ^%A)&nRKGAyn;8H+F)Jw^up*Cn>Hl@_Mct28+{;vMf?Ll=OgmvQ?8r|A^w8 z1Ep+32{FOO@6j!P2cn}`PMYcB3dS+8O8S6zS^O^6HE`r5;i4Pl1>~xX9OO;;YgbSqHz)-CBASbvxjqY~yX}G_G)08C^ z+%vV-EQG6#eSyN~sx;D$xd-}pPN<+%s0m^0!`?=)B|d|h0k@q+kW^7ncnJD{oFGwP z*>25Q(C=2l-6zkPc*X1h#xAN>Ne85}2sR)teFM|AQ{Xd{9Zv-9Ou}}8)=o2lpGLVy zDg=cuSV20*bTv|LV4V5Jd*Dtme2Tl#n@)~=PviR}{<{!`PmUCST0m}V4*m(K#&fIX z0FE&k1dFYMdH4@;d5*t2my_CluiMwFgH-KuAMVfaAA*O280I0}9jIrj5*>UV9DxNN zzvc88HQK4--MfUaCnCXyT-K8aH9^jH{VJV$%TeFL1P|$X>`D6~fU=l7NF)NF67)|e z*dL)-BZFjmFju%Cyt2+K=5wbHEG#8zX^fJ z26Mq&(Xj)lQ!5tW7w1%W%CQn+|4%9z z4EPwx6!{KEfCt!&6SVi?od4N^|@{EhR*`=;mX~1dSeA5;c{{^l5gh0EWV1I>EZml zKTnew+`GP##hE%ep;!_GO3s=U2#8v@vQ5btTrUGF+&9%IoCcH@Mr`N?{i%@ZQ8 zKVNeTGccNV{#?UQ4q~jLFV5kX!J4pCDA->i8q>zGsF>hpU^UIL5j+W~W3Zwnn)N#9>e8?4u)$pxE%mV7J zR;6RQU`f5`tn8_^6#i)ndMA6B5jBaNP(CePnM zctB6*s5WO1I%zz`PW#B2kCJ~d6Nk#tD)B}3Fp#zsUR4E|^O~y?^zd{d!~5SXqU2oA zt6PQ-YLH2OXEI4w|GWxRoNA1UG38CxaAiiyh`UXf@Pna`@5kp(Wldg%tra>~dsERf z6+uLQEDdE4OYAbdq>JT@qQ~Q$b9Q_(AO+7Z4)&4=f_I%t4=ZGYfE=SltP?VHypW;k zR3!OQ$JHC+ND`zIC`9c}C5Let757n;1ba|S8-%&NFTVH!iaUSio~Pq504AH?I|5=ar{X7uMVB(Pmkk!QSVeekz`j z?a<;VH(LlUREs)DE(kG^f}1u>6|I5y%c{dvD&i8uq5-{UkX3;7C{mVTPZx*6#2A^@ zCgUP;@jJmRzKv8p;vH7rC-J5nlqwmSPJE%nRVZuwJ_F&H=GJ-W3y7Ya#e!pUT6f;`4n?FyGowJ zraP1XuNyv4&euxrDg!FiUJ=v8W+0;w^kBFzjJr%EVwtSKhigW4x$;Oxw1zS% zkO8!u2PGBBG$RR3h1BRHMnAe2A0rdGS`_} zx>^`2)Zv5G4;tpZIcD5Laz6n1rh30fU*JjigxG!)yN55<6*t;Ok&tipVs%G%z_?>K zC-#%x8R@U(SP9IM3zA6B>-p*_=E9h>1dEzEy2J}6Osfe&q7wgRQD>=whOcbF1iR-Y zVK9M8IfN%?aMzF0$ZBhn)8!j zOZOAkfo&&(VrEz2B-%F2IF7ZHoo!U4u*!wK5iDaSlcR;82lOX;D_)Q|nK?{vn#IsT zF4+1i0>v!~i)H4r=X+R!5V~(TB|cPBh|8F;D@j@n+ML`pa*YA|a%#OUDCGO7%SJlvMZ@Arg!mFNog2Q zA%#?^t&MH8Ib@$SWAXEJ5~IP+IBC*OQI4B}KV$An?Upc&luk1zIi&_xy&eqIK0aMu z3I+Yu^f6?--p@s;M9>%y3$!& zK4tn-6|ew44=>YY!Qcw2aE~hF^xJW-%JwOxx76*vYWAiEO%_&;bFt#!bvtkw?%Ike zmSJRd0<8dInO7O-WI1?yGOXGTUX}ybO>Qd=Ubh3+39`n)%doFH!LB%Xd$6qjCLO%+ z3@H<;KZHf&n1MTV@z>-TGiWh!*J=u>pTa^Ny^(m7SYs$cGI5l|#5H))5H3p#q|ua9 zb{;_z89BO3pE}o11r5llXLBNMELA_=hxpI0VMkAShUs!ZN&gHg_)r}x!LFdRs!l7RYCm`T&Q4P1@b-Yh zxKh*ayfvqm9|h10nedFNLwoIt9oT?Gh4y{T+u-N1fH5jJ&dZ6ybV|VZQ2o<8+I~Lx zrw9M^;GbR{o&D1W%SNgyj!|wC`K-A&7oIge9@4!Hdn{EUsciB6$Z*}2TU#K!6(j|| zuB{v1TfM4Y+oCrKUSK>RChg#N3a%hg#SSvXHFs(7;zRaWlnM+t4E zsHV%+R-2`80i(>Opg^UAc`S>~11XE3Z2T5|IG!w)Jd#e`2wfJhB?q#DGNXA zdsdO*_uct^sN_JV+_Ex&bnlDTjm4RJ&)SMMtWAF{TdY{2mOrYp#J&L_jtdHe0c5agpCj>(Y zvj;)v$Y|-9;7X|=qgK$PtH0v9#6?;&cp6DoXMIO~p z;(tUhLC#{hExA0{pYwY1+e)qV6jg3nqU(yf(`zhKw2ET_C;ZaaT6vQJ%V3{KAVs@0 zboIjqS(EURVPZzb9kD=T)&-WVe;d!m6%Tk2CEx~tlZxuo|zYzadTx42YoQhL`GV! z+_w752GvPM*UNa?<(hrKGSs6aCoaoW5uP4AbK_Wtg<4G0Y>iNch_=FoHZm$|QQvkM zt^Nr zvL(1*F1OW2;$=@jfte{C(y^JhXm|t1EtC?=Qo-(%a3NTJfu@~s5l*1EuNXxp1OWI| z=qMsaGu;U$+cL?(I{7#^h*xowrOWFZOki`@*q+S7TpdO&Y-uVGQo@5!zvBrrN=WMjAI(+EoiGkPSu z6-nzlE%!crz#^)2E3Lq&_N|rG@d>=f4+A;y+zxaLMu@2a7lxBHAQf0$FCd7~|3ZK4 z4o1qsevH~qy9HzIb&-EB!H9VAE`%Th0bQPZu<@he;4y*{fQE`A9)&Zwv8O*Ay62si z)X&NrW&~G3?K}eQ9K)(rs zM+z0<{%mosm@K=qBTgnoQcrB?0CI^01p;nMdyU5x7Q9nZ@+V9SFi2N$gLUHCKN4Sk zq^}2OrdoIu8slAxwTMv65fnE;e^c2}QM_y}CLi8166Mc9b~Gb{==75SyZl5@f1wcS z6nv}S!$N&iu7s)*OX%keRTf4{ij}`Ye#M~zYPZV0+|ifeCL}w}Vv3+yUSkLb!0TNt zwTktXmg+U8LaLbH($c_NVKtlZ2LY(~w& z%OEta9UUb$N#7^wA~x%&AU(QK`^UHc$HiFSrwm!3G!gV+%D(hCRrO9H&8!?Y+=V47 zW+j2=ML&7E3qYXna4HvNh}NV`1i+oFQ#81NTL2b{z-5tHN=F{nGNH>;9vc%X94?;z zHB?8{QQ*Xdfiz2L45c4#xCt_HdEnA)RbmnrP<&roq$QZm$^Y?gDvtI}+@^F$@ zdhwPZ%7isalFV5KU3)GV?30^j5lQ85!aM0^VMFw{;g^chNcZK#X^n7NqkX;)ksYqA zMkiM`zgB@7Kzq+Uy{y%yshX|HFfAQQ$ZSEXMic|Fd=Y$P34~Iy&;}@efFz79Ww{#5 zLsbLJZ5M zlu`@E1A3pgPhQ#-?AcXc$_*JJar+>7p#3}2IH^pS!8ItebAIR;N^(MLxtx^=x20YS zI%bC6L0$!easWxopyf)2$S!S*mAGV9^E5SRJ9m^#x>Veg=w53WAuqw5Mrl1P&`z&H z(yjT)_p-yMx&=^SXg!8>`b7cRt-elA5QNf{ukjCl6$Nu>^u3JWvXw;x5lPgWJb_Bp zvl6RY?)P`tOw0#)X;5q~ou#+~5blm^A7k6+FnM4WskDa>Y_jPHS~)+^CEl@iSf{D` zMLKm0yyEp(G>3&5xUmu|RGflm42>F9e0Yl0^Yi1?uxmL;Ym8aGf!v4k9!g7( zr8Xr#7!RY#oH;sBL>MZ>f4GpGFa9T-5DGJK0#)@-08{n+IO$*RtelvQTFJD z*fczf(VN3MHfo4KF>82!+^WUZp~Iu~v0=zMk_q2UL3rIIlR%&Dqqj$+i5WoLX@A7N zZss!QSJ01}c%fRDA=B@MJv4qm51X1Q`D;&-o#1s^z<-W0ETI!*!0V$l$^|5Z^5h3e z+w$mRlqC&-tRynz$TKHW4OwPf9+xuFYcyf?7FiwW-B9OMs75QfoN5OfEDZ>L5F!&b z^6hJ`gibJD6EnSe0sN z2_$nt0|>#5{t2QIUgrPtwhF|Vpo<3q#2wBe6O!@@887t&4zmLtQ{bZj8BqW`_(P>1 z7t+Nla=NdaNX@c9D$*fu8{)5x9gBAQd)hWml8v%Hj78p+Wb3O)KoH&rLfTkW8@eh2 zPo|ZU`TY>mVEoEdG#6byH(>HpG1ZU(qZ178>Y6@V<4wR!AD@_;4p;k5wgcu@)~X6f z8h}nYyEoFPJy57j1Jm_F?4A7qQ$@XC8ddrs=L{NAtK>ECV8_X1wwz)Zod-~y4jP{L zH>C5?JOagk&;XR8Caou>}Yuh(hhcx%%xQ21Zi~nz(8Rz zWQ+gCxk~Gh*wSmkhuM-*nzX6NqqrzVC^WPJzy!&1F4*t;EH2zJ&(B!VW0UjF<5m<;n~c{iUol4T$lBWa~>XEptznm;6UZ^W%@Ned{gPp74E|&8GM9ltO~?U<&|m zyJyVSr#p0_;OK+*V$P4-04Xow1_ZbRvTb}UShN%H7EWM0IF2b{5dNY%hI1h$$h7P$ zSE|O6ahugjP z{q+XxB!8??0$Gtk%u+W78ux2L`rn-j9DS6jZ?i^;tM_No~ruZFg5zo)is@1ynA71k&4DYW@DJyEgI$PcAF zr-U-MA*IPCBk#Pykg?|my~Y7nCUc3KC{V7<30fwJ>$p5*!LSe#X2COCuBLY=5s;uz z1Gp)q6|1~?jxFy$q&S&aus}>y$DyiuMmi3SW$zDh7?3HcM?Hfy+6JS}8s}^D>)F-hZ zL&7KOf4<0zb-&cZYKaxpMbvc9R->+vsbv)Xjw}wLtI4V#0WvZ>#sPOT&=a#`22HE67 zpSz1xraBNL_e4?2*?wwzDHpRQ_rPM>L0a1Uo_M=yI6FNmy?_F51*3B-@83&KBxM95 zh_E9H!h6_ik6Yf=`oXeUFx2RJo5re1#VZ^2Nw=9}SK%vQgv-5%fN^maEgZX55&Y

    %76 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 R4C4bI{}1}vbn5^R1OO6LISv2- literal 0 HcmV?d00001 diff --git a/chart/jenkins-operator/templates/jenkins.yaml b/chart/jenkins-operator/templates/jenkins.yaml index bfbcefb2..3501d2da 100644 --- a/chart/jenkins-operator/templates/jenkins.yaml +++ b/chart/jenkins-operator/templates/jenkins.yaml @@ -100,8 +100,6 @@ spec: {{- end }} {{- if .Values.jenkins.priorityClassName }} priorityClassName: {{- .Values.jenkins.priorityClassName }} - {{- else }} - priorityClassName: "" {{- end }} disableCSRFProtection: {{ .Values.jenkins.disableCSRFProtection }} containers: