diff --git a/.github/workflows/compress-images.yaml b/.github/workflows/compress-images.yaml new file mode 100644 index 000000000000..c3c762c47a3e --- /dev/null +++ b/.github/workflows/compress-images.yaml @@ -0,0 +1,22 @@ +name: Compress Images +on: + pull_request_target: + paths: + - '**.jpg' + - '**.jpeg' + - '**.png' + - '**.webp' +jobs: + build: + name: calibreapp/image-actions + permissions: write-all + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Compress Images + uses: calibreapp/image-actions@main + with: + githubToken: ${{ secrets.GITHUB_TOKEN }} + ignorePaths: 'content/images/avatars/**' diff --git a/.github/workflows/updatecli.yaml b/.github/workflows/updatecli.yaml index faae75fb8bf6..6cdfb0deda86 100644 --- a/.github/workflows/updatecli.yaml +++ b/.github/workflows/updatecli.yaml @@ -16,7 +16,7 @@ jobs: uses: actions/checkout@v4 - name: Install Updatecli in the runner - uses: updatecli/updatecli-action@v2.67.0 + uses: updatecli/updatecli-action@v2.70.0 - name: Run Updatecli in Dry Run mode run: updatecli diff --config ./updatecli/updatecli.d --values ./updatecli/values.github-action.yaml diff --git a/.ruby-version b/.ruby-version index fa7adc7ac72a..9c25013dbb86 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.3.5 +3.3.6 diff --git a/.typos.toml b/.typos.toml index 34fd1db8f715..895b335f7239 100644 --- a/.typos.toml +++ b/.typos.toml @@ -60,6 +60,7 @@ check-filename = false "loLSNdCv6K4" = "loLSNdCv6K4" "ArachnePnR" = "ArachnePnR" "LIy90gGvmIU" = "LIy90gGvmIU" +"71Nd_6OqdQk" = "71Nd_6OqdQk" "PNGs" = "PNGs" "Lso" = "Lso" "ND" = "ND" diff --git a/Dockerfile b/Dockerfile index 022db0fbe5d1..77149fc352e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ COPY scripts ./scripts RUN npm install RUN make assets -FROM ruby:3.3.5 as builder +FROM ruby:3.3.6 as builder ENV USE_LOCAL_RUBY=true # throw errors if Gemfile has been modified since Gemfile.lock diff --git a/Gemfile.lock b/Gemfile.lock index bf0769b614cc..f036a72d30a0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -108,8 +108,7 @@ GEM http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 4.0) netrc (~> 0.8) - rexml (3.3.6) - strscan + rexml (3.3.9) rouge (4.2.1) rss (0.3.1) rexml @@ -120,7 +119,6 @@ GEM sassc (2.4.0) ffi (~> 1.9) shellany (0.0.1) - strscan (3.1.0) temple (0.10.0) thor (1.2.1) tilt (2.0.11) diff --git a/Jenkinsfile b/Jenkinsfile index c2f11171d074..8833e28e61c3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -86,25 +86,31 @@ node('docker&&linux') { */ if (infra.isTrusted() && env.BRANCH_NAME == null) { stage('Publish site') { - infra.withFileShareServicePrincipal([ - servicePrincipalCredentialsId: 'trustedci_jenkinsio_fileshare_serviceprincipal_writer', - fileShare: 'jenkins-io', - fileShareStorageAccount: 'jenkinsio' - ]) { + try { + infra.withFileShareServicePrincipal([ + servicePrincipalCredentialsId: 'trustedci_jenkinsio_fileshare_serviceprincipal_writer', + fileShare: 'jenkins-io', + fileShareStorageAccount: 'jenkinsio' + ]) { + sh ''' + # Don't output sensitive information + set +x + + # Synchronize the File Share content + azcopy sync \ + --skip-version-check \ + --recursive=true\ + --delete-destination=true \ + --compare-hash=MD5 \ + --put-md5 \ + --local-hash-storage-mode=HiddenFiles \ + ./build/_site/ "${FILESHARE_SIGNED_URL}" + ''' + } + } catch (err) { + currentBuild.result = 'FAILURE' + // Only collect azcopy log when the deployment fails, because it is an heavy one sh ''' - # Don't output sensitive information - set +x - - # Synchronize the File Share content - azcopy sync \ - --skip-version-check \ - --recursive=true\ - --delete-destination=true \ - --compare-hash=MD5 \ - --put-md5 \ - --local-hash-storage-mode=HiddenFiles \ - ./build/_site/ "${FILESHARE_SIGNED_URL}" - # Retrieve azcopy logs to archive them cat /home/jenkins/.azcopy/*.log > azcopy.log ''' diff --git a/STYLEGUIDE.adoc b/STYLEGUIDE.adoc index a8b848a6f513..04e56deb6766 100644 --- a/STYLEGUIDE.adoc +++ b/STYLEGUIDE.adoc @@ -115,7 +115,7 @@ node { // Declarative // pipeline { - agent { docker { image 'node:20.18.0-alpine3.20' } } + agent { docker { image 'node:22.11.0-alpine3.20' } } stages { stage('Build') { sh 'npm install' diff --git a/content/404.html.haml b/content/404.html.haml index fb8d8c0e04ee..a530d4c58caf 100644 --- a/content/404.html.haml +++ b/content/404.html.haml @@ -6,6 +6,12 @@ hideSearchBar: true --- :css + .pagecontainer { + display: flex; + flex-direction: column; + flex-grow: 1; + } + .errorcontainer { text-align: center; } @@ -28,46 +34,50 @@ hideSearchBar: true margin-bottom: 30px; } -%div.errorcontainer - %img{:src => '/images/fire-jenkins.svg'} - - %h3 - The page you requested could not be found. - - %p - %a{:href => "/"} Back to homepage - -%div.searchcontainer - %h3 - Search for related pages - -:javascript - // fetch last segment from URL - const path = window.location.pathname; - const pathSegments = path.split('/').filter(Boolean); - const lastSegmentIndex = pathSegments.length - 1; - const lastSegment = pathSegments[lastSegmentIndex]; - - const div = document.createElement('div'); - div.classList.add('searchcontainer'); - - const scriptFileEl = document.createElement('script'); - scriptFileEl.setAttribute('defer', ''); - scriptFileEl.setAttribute('src', `https://cdn.jsdelivr.net/npm/@docsearch/js@3`); - document.head.appendChild(scriptFileEl); - - scriptFileEl.addEventListener('load', () => { - // enable docsearch - window.docsearch({ - // point it at the renderroot - container: div, - indexName: 'jenkins', - appId: "M6L7Q4Z8HS", - apiKey: "52f8dfbff76ffd9106f1c68fee16154b", - searchParameters: { - }, - initialQuery: lastSegment, +%div.pagecontainer + + %div.errorcontainer + %img{:src => '/images/fire-jenkins.svg'} + + %h3 + The page you requested could not be found. + + %p + %a{:href => "/"} Back to homepage + + %div.searchcontainer + %h3 + Search for related pages + + + + :javascript + // fetch last segment from URL + const path = window.location.pathname; + const pathSegments = path.split('/').filter(Boolean); + const lastSegmentIndex = pathSegments.length - 1; + const lastSegment = pathSegments[lastSegmentIndex]; + + const div = document.createElement('div'); + div.classList.add('searchcontainer'); + + const scriptFileEl = document.createElement('script'); + scriptFileEl.setAttribute('defer', ''); + scriptFileEl.setAttribute('src', `https://cdn.jsdelivr.net/npm/@docsearch/js@3`); + document.head.appendChild(scriptFileEl); + + scriptFileEl.addEventListener('load', () => { + // enable docsearch + window.docsearch({ + // point it at the renderroot + container: div, + indexName: 'jenkins', + appId: "M6L7Q4Z8HS", + apiKey: "52f8dfbff76ffd9106f1c68fee16154b", + searchParameters: { + }, + initialQuery: lastSegment, + }); }); - }); - document.body.append(div); + document.body.append(div); diff --git a/content/_data/adopters/Alauda.adoc b/content/_data/adopters/Alauda.adoc new file mode 100644 index 000000000000..21f9088f877d --- /dev/null +++ b/content/_data/adopters/Alauda.adoc @@ -0,0 +1,6 @@ +--- +name: "Alauda" +url: https://www.alauda.io/ +detailsUrl: https://github.com/alauda/alauda-devops-sync-plugin +detailsLinkText: Project +--- \ No newline at end of file diff --git a/content/_data/changelogs/lts.yml b/content/_data/changelogs/lts.yml index ea22e4c72735..bd7bc7228d61 100644 --- a/content/_data/changelogs/lts.yml +++ b/content/_data/changelogs/lts.yml @@ -11672,6 +11672,546 @@ - url: /security/advisory/2024-10-02/#SECURITY-3373 title: SECURITY-3373 +- version: "2.479.1" + date: 2024-10-30 + lts_predecessor: "2.462.3" + lts_baseline: "2.479" + changes: # compared to lts_baseline 2.479 - extracted from the RC commit(s) + + - type: major bug + category: bug + pull: 9760 + issue: 73760 + authors: + - basil + pr_title: "[JENKINS-73760] Updates fail due to invalid JSON from HTTP Update Center" + message: |- + Migrate from http://updates.jenkins-ci.org to https://updates.jenkins.io if the initial installation version was 2.76 or older. + - type: bug + category: bug + pull: 9797 + issue: 73838 + authors: + - basil + pr_title: "[JENKINS-73838] Compatibility for Jenkins#doSafeRestart(StaplerRequest, String)" + message: |- + Restore compatibility with plugins calling Jenkins#doSafeRestart(StaplerRequest, String). + - type: bug + category: bug + pull: 9764 + issue: 73801 + authors: + - basil + pr_title: "[JENKINS-73801] Nested Views plugin overrides View#doConfigDotXml(StaplerRequest)" + message: |- + Restore compatibility with plugins contributing new views with custom XML, such as the Nested Views plugin. + - type: bug + category: bug + pull: 9693 + issue: 73437 + authors: + - ridemountainpig + pr_title: "[JENKINS-73437] Fix build history no automatic line wrapping" + message: |- + Wrap long lines in the build history. + - type: bug + category: bug + pull: 9827 + issue: 73867 + authors: + - basil + pr_title: "Override the outdated managed dependency on asm in guice-parent" + message: |- + Prevent an old version of ASM from appearing as a managed dependency in plugin builds. + - type: bug + category: bug + pull: 9834 + issue: 73917 + authors: + - markewaite + pr_title: "Update dependency io.jenkins.plugins:asm-api to v9.7.1-95.v9f552033802a_" + message: |- + Update ASM to 9.7.1 to match the most recent release of the ASM API and Jenkins ASM API plugin. + - type: bug + category: bug + pull: 9810 + issue: 73835 + authors: + - dwnusbaum + pr_title: "[JENKINS-73835] Do not allow builds to be deleted while they are + still running and ensure build discarders run after builds are fully complete" + message: |- + Do not allow builds to be deleted while they are still building. + Ensure build discarders only process builds which have fully completed. + - type: bug + category: bug + pull: 9882 + authors: + - basil + pr_title: "Allow for null to be passed to doSafeRestart" + message: |- + Allow null to be passed as the first argument to doSafeRestart. + + lts_changes: # compared to lts_predecessor 2.462.3 (selected by personal review) + + - type: major rfe + category: rfe + authors: + - basil + pr_title: "Require Java 17 or newer" + references: + - pull: 9358 + - issue: 67907 + - url: https://www.jenkins.io/blog/2024/06/11/require-java-17/ + title: Java 17 requirement blog post + message: |- + Require Java 17 or newer. + - type: major rfe + category: rfe + authors: + - basil + pr_title: "[JENKINS-73278] Migrate core from EE 8 to EE 9" + references: + - url: https://github.com/spring-projects/spring-framework/releases/tag/v6.0.23 + title: Spring Framework 6.0.23 release notes + - url: https://github.com/spring-projects/spring-framework/releases/tag/v6.1.12 + title: Spring Framework 6.1.12 release notes + - url: https://github.com/spring-projects/spring-framework/releases/tag/v6.1.13 + title: Spring Framework 6.1.13 release notes + - url: https://github.com/spring-projects/spring-framework/releases/tag/v6.1.14 + title: Spring Framework 6.1.14 release notes + - url: https://github.com/spring-projects/spring-security/releases/tag/6.2.6 + title: Spring Security 6.2.6 release notes + - url: https://github.com/spring-projects/spring-security/releases/tag/6.3.2 + title: Spring Security 6.3.2 release notes + - url: https://github.com/spring-projects/spring-security/releases/tag/6.3.3 + title: Spring Security 6.3.3 release notes + - url: https://github.com/spring-projects/spring-security/releases/tag/6.3.4 + title: Spring Security 6.3.4 release notes + - url: https://projects.eclipse.org/releases/jakarta-ee-9 + title: Jarkata EE 9 release page + - url: https://github.com/jenkinsci/ldap-plugin/releases/tag/733.vd3700c27b_043 + title: LDAP plugin 733.vd3700c27b_043 + - url: https://github.com/jenkinsci/reverse-proxy-auth-plugin/releases/tag/reverse-proxy-auth-plugin-1.8.0 + title: Reverse Proxy Auth plugin 1.8.0 + - url: https://github.com/jenkinsci/mailer-plugin/releases/tag/489.vd4b_25144138f + title: Mailer plugin 489.vd4b_25144138f + - url: https://github.com/jenkinsci/cas-plugin/releases/tag/cas-plugin-1.7.0 + title: CAS plugin 1.7.0 + - url: https://github.com/jenkinsci/negotiatesso-plugin/releases/tag/136.vda_2b_6a_744b_d8 + title: Windows Negotiate SSO plugin 136.vda_2b_6a_744b_d8 + - url: https://www.jenkins.io/doc/book/platform-information/support-policy-servlet-containers/ + title: Servlet Container Support Policy + - pull: 9672 + - issue: 73278 + message: |- + Upgrade Spring Framework from 5.3.39 to 6.1.14, upgrade Spring Security from 5.8.14 to 6.3.4, and upgrade Java EE from 8 to 9. + Users of the LDAP plugin must upgrade to version 733.vd3700c27b_043 in combination with upgrading Jenkins core. + Users of the Reverse Proxy Auth plugin must upgrade to version 1.8.0 in combination with upgrading Jenkins core and must also upgrade the Mailer plugin to version 489.vd4b_25144138f. + Users of the CAS plugin must upgrade to version 1.7.0 in combination with upgrading Jenkins core. + Users of the Windows Negotiate SSO plugin must upgrade to version 136.vda_2b_6a_744b_d8 in combination with upgrading Jenkins core. + Users of third-party servlet containers must upgrade their servlet container to an EE 9 version in accordance with the Jenkins Servlet Container Support Policy. + - type: major rfe + category: major rfe + authors: + - basil + pr_title: "[JENKINS-73130] Upgrade core from Jetty 10.x to 12.x (EE 8)" + references: + - pull: 9590 + - issue: 73130 + - url: https://github.com/jetty/jetty.project/releases/tag/jetty-12.0.10 + title: Jetty 12.0.10 release notes + - url: https://github.com/jetty/jetty.project/releases/tag/jetty-12.0.11 + title: Jetty 12.0.11 release notes + - url: https://github.com/jetty/jetty.project/releases/tag/jetty-12.0.12 + title: Jetty 12.0.12 release notes + message: |- + Upgrade Jetty from 10.0.24 to 12.0.12. + - type: major rfe + category: major rfe + pull: 9405 + issue: 68822 + authors: + - madisparn + pr_title: "JENKINS-68822 added support for removing all builds with LogRotator" + message: |- + Allow all builds to be removed by the build discarder. + - type: major rfe + category: major rfe + authors: + - markewaite + pr_title: "[JENKINS-73129] Remove Windows path traversal escape hatch from SECURITY-2481" + references: + - pull: 9387 + - issue: 73129 + - url: /security/advisory/2021-10-06/#SECURITY-2481 + title: Path traversal vulnerability on Windows - SECURITY-2481 + message: |- + Remove Windows path traversal vulnerability escape hatch that was provided with the SECURITY-2481 fix.. + - type: major bug + category: bug + pull: 9428 + issue: 73381 + authors: + - basil + pr_title: "[JENKINS-73381] Downloading tar.gz artifacts in Firefox is broken" + message: |- + Fix download of .tar.gz artifacts in Firefox. + - type: rfe + category: rfe + authors: + - janfaracik + - mawinter69 + - timja + pr_title: "Refine content and appearance of the user account screen" + references: + - pull: 9521 + - pull: 9707 + - pull: 9461 + - pull: 9411 + - pull: 9393 + - pull: 9381 + message: |- + Enhancements and refinements for the appearance of several pages in Jenkins. + - type: rfe + category: rfe + authors: + - zbynek + - janfaracik + pr_title: "Refine form controls appearance" + references: + - pull: 9453 + - pull: 9380 + - pull: 9365 + - pull: 9395 + - pull: 9641 + message: |- + Refinements and modernizations to sections of the Jenkins UI. + - type: rfe + category: rfe + pull: 7268 + issue: 69869 + authors: + - Wadeck + - timja + pr_title: "[JENKINS-69869] Categorize the user properties" + message: |- + User properties are now categorized in different pages. + - type: rfe + category: rfe + pull: 9148 + authors: + - janfaracik + pr_title: "Rewrite the build history widget" + message: |- + Update the design of the build history widget. + - type: rfe + category: rfe + pull: 9724 + authors: + - janfaracik + pr_title: "Use Notice component for views lacking jobs" + message: |- + Use Notice component for views lacking jobs. + - type: rfe + category: rfe + pull: 9648 + issue: 73669 + authors: + - mawinter69 + pr_title: "[JENKINS-73669] don't change unrelated checkboxes in rowSelectionCont…" + message: |- + Do not edit unrelated checkboxes in rowSelectionController. + - type: rfe + category: rfe + pull: 9591 + authors: + - jglick + pr_title: "Friendlier handling of DeploymentHandshakeException from CLI in -webSocket mode" + message: |- + Improve display of HTTP handshake errors (such as authentication issues) from the CLI in -webSocket mode. + - type: rfe + category: rfe + pull: 9665 + authors: + - Vlatombe + pr_title: "Add -webSocket option by default when creating an inbound agent" + message: |- + Use webSocket in the inbound agent command line sample. + - type: rfe + category: rfe + pull: 9616 + authors: + - zbynek + pr_title: "Allow plugins to customize number of suggestions in autocomplete" + message: |- + Allow plugins to customize the maximum number of suggestions in autocomplete text fields. + - type: rfe + category: rfe + pull: 9594 + issue: 73597 + authors: + - jeromepochat + pr_title: "[JENKINS-73597] Remove RekeySecretAdminMonitor and related resources" + message: |- + Remove obsolete RekeySecretAdminMonitor. + - type: rfe + category: rfe + pull: 9511 + issue: 73563 + authors: + - mawinter69 + pr_title: "[JENKINS-73563] create a jenkins-button instead of a yui button in makeButton" + message: |- + Use makeButton to create a jenkins-button on the fly instead of using YUI. + - type: rfe + category: rfe + pull: 9502 + issue: 73495 + authors: + - markewaite + pr_title: "[JENKINS-73495] Clarify the plugin incompatibility message" + message: |- + Clarify that the plugin incompatibility message applies to the current plugin. + - type: rfe + category: rfe + pull: 9501 + authors: + - markewaite + pr_title: "Add end of life dates for Alpine 3.20, Ubuntu 24.04, Fedora 40" + message: |- + Add end of life dates for Alpine 3.20, Ubuntu 24.04, and Fedora 40. + Correct several end of life dates, including CentOS 8. + - type: rfe + category: rfe + pull: 9476 + authors: + - basil + pr_title: "Use detached plugins as a cache for the Update Center" + message: |- + Avoid unnecessary download of bundled plugins during the setup wizard. + - type: rfe + category: rfe + pull: 9488 + authors: + - mawinter69 + pr_title: "scroll fields from added hetero-list entry into viewport" + message: |- + Scroll fields from the added hetero-list entry into the viewport. + - type: rfe + category: rfe + pull: 9465 + authors: + - mawinter69 + pr_title: "modernise build time trend page" + message: |- + Modernize the build time trend page with a "time since" column and a link to the console, and allow the table to be resized. + Remove the agent column for the Pipeline build trend. + - type: rfe + category: rfe + pull: 9483 + authors: + - jglick + pr_title: "Lifecycle.onBootFailure" + message: |- + When using ExitLifecycle, exit the process immediately upon a boot failure. + Also allow custom lifecycles to exit immediately. + - type: rfe + category: rfe + pull: 9449 + authors: + - Vlatombe + pr_title: "Show plugin source URL when downloading it" + message: |- + Display the source URL in logs when installing a plugin. + - type: rfe + category: rfe + pull: 9437 + authors: + - Vlatombe + pr_title: "Allow administrative monitors to be displayed for users with Overall/MANAGE permission" + message: |- + Allow some administrative monitors to be displayed for users with Overall/MANAGE permission. + - type: rfe + category: rfe + pull: 9440 + authors: + - basil + pr_title: "Increase minimum required Remoting version from 4.13 to 3107.v665000b_51092" + message: |- + Increase the minimum required Remoting version from 4.13 to 3107.v665000b_51092. + - type: rfe + category: rfe + authors: + - basil + pr_title: "Delegate compression to servlet container" + references: + - pull: 9379 + - url: https://github.com/jenkinsci/stapler/releases/tag/1881.vd39f3ee5c629 + title: Stapler 1881.vd39f3ee5c629 release notes + - url: https://github.com/jenkinsci/winstone/releases/tag/winstone-6.20 + title: Winstone-Jetty 6.20 release notes + message: |- + Update Stapler from 1880.vb_6d94a_3b_05db_ to 1881.vd39f3ee5c629 and Winstone-Jetty from 6.19 to 6.20 to let Jetty handle HTTP response compression. + A new command-line option --compression can be used to disable compression if desired. + - type: rfe + category: rfe + pull: 9177 + authors: + - mawinter69 + pr_title: "remove idle executors from widget" + message: |- + Remove idle executors from the Build Executor widget. + - type: rfe + category: rfe + pull: 7037 + issue: 14789 + authors: + - das7pad + pr_title: "[JENKINS-14789] Configurable interval for computer retention check" + message: |- + The latency for bringing up offline agents can be improved using a new global config option Computer Retention Check Interval and setting an In demand delay of zero on the agents. + - type: bug + category: bug + authors: + - scherler + - janfaracik + pr_title: "[JENKINS-73695] Prevent unnecessary horizontal scrollbar in Firefox" + references: + - pull: 9695 + - issue: 73695 + - pull: 9667 + - pull: 9654 + - issue: 73330 + - pull: 9649 + - pull: 9625 + - pull: 9658 + - issue: 73302 + message: |- + Several bug fixes for the Jenkins UI. + - type: bug + category: bug + pull: 9737 + issue: 73785 + authors: + - daniel-beck + pr_title: "[JENKINS-73785] Restore ContextMenu#from with StaplerRequest/Response args" + message: |- + Restore compatibility with plugins contributing new objects with context menus, such as the Nested Views plugin. + - type: bug + category: bug + pull: 9653 + issue: 73687 + authors: + - dwnusbaum + pr_title: "[JENKINS-73687] Make deserialization of Map fields in XML files more robust" + message: |- + Make deserialization of Map fields in XML files more robust. + - type: bug + category: bug + pull: 9696 + authors: + - basil + pr_title: "Compatibility for ChainedServletFilter" + message: |- + Restore compatibility with the OpenId Connect Authentication and Reverse Proxy Authentication plugins. + - type: bug + category: bug + pull: 9152 + issue: 72988 + authors: + - mawinter69 + pr_title: "[JENKINS-72988] validate displayname against items in the same ItemGroup" + message: |- + Validate display name only against items in the same ItemGroup. + - type: bug + category: bug + pull: 9463 + authors: + - timja + pr_title: "Disable dependents toggle in plugin manager with system read" + message: |- + Correct the styling for plugins that can't be disabled in plugin manager when user has system read permission. + - type: bug + category: bug + pull: 9624 + issue: 73613 + authors: + - mawinter69 + pr_title: "[JENKINS-73613] refresh buildhistory widget in all cases" + message: |- + Refresh the build history widget in all cases, including on background tabs or hidden tabs. + - type: bug + category: bug + authors: + - mawinter69 + pr_title: "[JENKINS-73554] fix jelly exception" + references: + - pull: 9519 + - issue: 73554 + message: |- + Fix IndexOutOfBoundsException in cloud management pages when the controller has no executors. + - type: bug + category: bug + pull: 9485 + issue: 73467 + authors: + - basil + pr_title: "[JENKINS-73467] No facility to try unsupported Remoting versions when using inbound agents" + message: |- + Fix the hudson.slaves.SlaveComputer.allowUnsupportedRemotingVersions escape hatch, which was previously not working with inbound agents. + +- version: "2.479.2" + date: 2024-11-27 + changes: + - type: security + message: Important security fix. + references: + - url: /security/advisory/2024-11-27/ + title: security advisory + - type: rfe + category: rfe + authors: + - renovate + - daniel-beck + pr_title: "Update dependency org.jenkins-ci.plugins:script-security to v1369" + references: + - pull: 9970 + - issue: 74852 + - url: https://github.com/jenkinsci/script-security-plugin/releases/tag/1368.vb_b_402e3547e7 + title: Script Security plugin 1368.vb_b_402e3547e7 release notes + message: |- + Upgrade Script Security plugin to 1368.vb_b_402e3547e7. + Script Security 1368.vb_b_402e3547e7 includes a fix for SECURITY-3447. + - type: bug + category: bug + pull: 9954 + issue: 74826 + authors: + - renovate + - markewaite + pr_title: "Update dependency com.thoughtworks.xstream:xstream to v1.4.21 [SECURITY]" + message: |- + Upgrade XStream to 1.4.21. + XStream 1.4.21 includes a fix for CVE-2024-47072. + - type: bug + category: bug + pull: 9947 + issue: 74795 + authors: + - basil + pr_title: "[JENKINS-74795] Job created via REST API attaches to default view" + message: |- + Do not add jobs created via the REST API to the default view (regression in 2.475). + - type: bug + category: bug + pull: 9945 + issue: 74814 + authors: + - basil + pr_title: "[JENKINS-74814] java.lang.UnsupportedOperationException: This stack walker does not have RETAIN_CLASS_REFERENCE access" + message: |- + Allow context classloaders to be defined without making explicit reference to the calling class. # DO NOT EDIT THIS FILE DIRECTLY # ALL CHANGES MUST GO THROUGH PULL REQUESTS # MALFORMED FILE CONTENTS WILL BREAK THE SITE BUILD diff --git a/content/_data/changelogs/weekly.yml b/content/_data/changelogs/weekly.yml index a148e36da091..258c619a5fd6 100644 --- a/content/_data/changelogs/weekly.yml +++ b/content/_data/changelogs/weekly.yml @@ -24624,8 +24624,16 @@ title: Jarkata EE 9 release page - url: https://github.com/jenkinsci/ldap-plugin/releases/tag/733.vd3700c27b_043 title: LDAP plugin 733.vd3700c27b_043 + - url: + https://github.com/jenkinsci/reverse-proxy-auth-plugin/releases/tag/reverse-proxy-auth-plugin-1.8.0 + title: Reverse Proxy Auth plugin 1.8.0 + - url: https://github.com/jenkinsci/mailer-plugin/releases/tag/489.vd4b_25144138f + title: Mailer plugin 489.vd4b_25144138f - url: https://github.com/jenkinsci/cas-plugin/releases/tag/cas-plugin-1.7.0 title: CAS plugin 1.7.0 + - url: + https://github.com/jenkinsci/negotiatesso-plugin/releases/tag/136.vda_2b_6a_744b_d8 + title: Windows Negotiate SSO plugin 136.vda_2b_6a_744b_d8 - url: https://www.jenkins.io/doc/book/platform-information/support-policy-servlet-containers/ title: Servlet Container Support Policy @@ -24634,7 +24642,9 @@ message: |- Upgrade Spring Framework from 5.3.39 to 6.1.12, upgrade Spring Security from 5.8.14 to 6.3.3, and upgrade Java EE from 8 to 9. Users of the LDAP plugin must upgrade it to version 733.vd3700c27b_043 in lockstep with upgrading Jenkins core. + Users of the Reverse Proxy Auth plugin must upgrade to version 1.8.0 in lockstep with upgrading Jenkins core and must also upgrade the Mailer plugin to version 489.vd4b_25144138f. Users of the CAS plugin must upgrade it to version 1.7.0 in lockstep with upgrading Jenkins core. + Users of the Windows Negotiate SSO plugin must upgrade to version 136.vda_2b_6a_744b_d8 in lockstep with upgrading Jenkins core. Users of third-party servlet containers must upgrade the servlet container to an EE 9 version in accordance with the Jenkins Servlet Container Support Policy. - type: rfe category: rfe @@ -24866,6 +24876,507 @@ - url: /security/advisory/2024-10-02/#SECURITY-3373 title: SECURITY-3373 + - version: '2.480' + date: 2024-10-08 + changes: + - type: rfe + category: rfe + pull: 9735 + authors: + - janfaracik + - timja + pr_title: Refine 'Administrative monitors' interface + message: |- + Refine Administrative monitors interface. + - type: bug + category: regression + pull: 9797 + issue: 73838 + authors: + - basil + pr_title: "[JENKINS-73838] Compatibility for `Jenkins#doSafeRestart(StaplerRequest, + String)`" + message: |- + Restore compatibility with plugins calling Jenkins#doSafeRestart(StaplerRequest, String). + - type: bug + category: regression + pull: 9764 + issue: 73801 + authors: + - basil + pr_title: "[JENKINS-73801] Nested Views plugin overrides `View#doConfigDotXml(StaplerRequest)`" + message: |- + Restore compatibility with plugins contributing new views with custom XML, like Nested Views plugin. + - type: bug + category: bug + pull: 9790 + issue: 73824 + authors: + - dwnusbaum + pr_title: "[JENKINS-73824] Wait for Pipeline builds to complete before allowing + their jobs to be deleted" + message: |- + Wait for ongoing Pipeline builds to fully complete before allowing their parent job to be deleted. + - type: bug + category: bug + pull: 9760 + issue: 73760 + authors: + - basil + pr_title: "[JENKINS-73760] Updates fail due to invalid JSON from HTTP Update + Center" + message: |- + Migrate from http://updates.jenkinsci.org to https://updates.jenkins.io when the initial installation version was 2.76 or older. + - type: bug + category: bug + pull: 9693 + issue: 73437 + authors: + - ridemountainpig + pr_title: "[JENKINS-73437] Fix build history no automatic line wrapping" + message: |- + Wrap long lines in the build history. + - type: rfe + category: developer + pull: 9743 + authors: + - Vlatombe + pr_title: Introduce `SaveableListener#onDeleted` + message: |- + Developer: Add a new method SaveableListener#onDeleted so that plugins can be notified when a Saveable is deleted. + - type: rfe + category: developer + pull: 6867 + issue: 71515 + authors: + - daniel-beck + - basil + pr_title: "[JENKINS-60866][JENKINS-71515] Use `JSON#parse` to process `codemirror-config` + argument" + message: |- + Developer: Improve Content Security Policy compatibility by removing an eval call from JS. + Require syntactically valid JSON snippet to be returned from MarkupFormatter#getCodemirrorConfig / provided to codemirrorconfig in f:textarea. + - type: bug + category: bug + pull: 9827 + authors: + - basil + pr_title: " Override the outdated managed dependency on `asm` in `guice-parent`" + message: |- + Developer: Prevent an old version of ASM from appearing as a managed dependency in plugin builds. + # pull: 9749 (PR title: Extract interfaces for objects to be used through the executors widget) + # pull: 9766 (PR title: Be more explicit about not being logged in on 404 error page) + # pull: 9772 (PR title: Download Yarn Berry with Corepack rather than Yarn 1.x) + # pull: 9779 (PR title: Update dependency com.google.guava:guava to v33.3.1-jre) + # pull: 9783 (PR title: Update dependency postcss-preset-env to v10.0.5) + # pull: 9785 (PR title: Update jenkins/ath Docker tag to v6016) + # pull: 9786 (PR title: Update dependency org.jenkins-ci.plugins:junit to v1302) + # pull: 9789 (PR title: Update dependency org.jenkins-ci.plugins:cloudbees-folder to v6.955.v81e2a_35c08d3 - autoclosed) + # pull: 9791 (PR title: Update eslint monorepo to v9.11.1) + # pull: 9792 (PR title: Update dependency org.jenkins-ci.main:jenkins-test-harness to v2299) + # pull: 9793 (PR title: Update dependency webpack to v5.95.0 - autoclosed) + # pull: 9794 (PR title: Update dependency com.puppycrawl.tools:checkstyle to v10.18.2) + # pull: 9796 (PR title: Update dependency org.jenkins-ci.plugins:mailer to v488) + # pull: 9798 (PR title: Update access-modifier.version to v1.34) + # pull: 9799 (PR title: Update bridge-method-injector.version to v1.30) + # pull: 9800 (PR title: Update dependency io.jenkins.lib:support-log-formatter to v1.3) + # pull: 9801 (PR title: Update dependency org.jenkins-ci:annotation-indexer to v1.18) + # pull: 9802 (PR title: Update dependency org.jenkins-ci:crypto-util to v1.10) + # pull: 9803 (PR title: Update dependency org.jenkins-ci:memory-monitor to v1.13) + # pull: 9804 (PR title: Update dependency org.jenkins-ci:symbol-annotation to v1.25) + # pull: 9805 (PR title: Update dependency org.jenkins-ci:task-reactor to v1.9) + # pull: 9806 (PR title: Update dependency org.jenkins-ci:version-number to v1.12) + # pull: 9807 (PR title: Update dependency org.jenkins-ci.modules:instance-identity to v201) + # pull: 9808 (PR title: Update dependency sass to v1.79.4) + # pull: 9812 (PR title: Update dependency org.jenkins-ci.plugins:matrix-project to v838) + # pull: 9814 (PR title: Update dependency org.jenkins-ci.plugins:credentials to v1381) + # pull: 9815 (PR title: `mvn clean` should clean frontend artifacts) + # pull: 9816 (PR title: Update dependency globals to v15.10.0) + # pull: 9817 (PR title: Update babel monorepo to v7.25.7) + # pull: 9818 (PR title: Update mina-sshd-api.version to v2.14.0-131.v04e9b_6b_e0362) + # pull: 9819 (PR title: Update mina-sshd.version to v2.14.0) + # pull: 9820 (PR title: Fill in since annotations) + # pull: 9822 (PR title: Account for new Maven version requirement) + # pull: 9824 (PR title: Update dependency org.jenkins-ci.main:jenkins-test-harness to v2307) + # pull: 9825 (PR title: Update dependency org.jenkins-ci.plugins:junit to v1303) + # pull: 9828 (PR title: Update mina-sshd-api.version to v2.14.0-133.vcc091215a_358) + # pull: 9831 (PR title: Update dependency org.ow2.asm:asm to v9.7.1) + # pull: 9834 (PR title: Update dependency io.jenkins.plugins:asm-api to v9.7.1-95.v9f552033802a_) + # pull: 9835 (PR title: Fix dropdowns being added multiple times to the same element) + # pull: 9837 (PR title: Update dependency node to v20.18.0) + # pull: 9838 (PR title: Update dependency org.jenkins-ci.plugins:credentials to v1384) + # pull: 9839 (PR title: Update jenkins/ath Docker tag to v6022) + # pull: 9840 (PR title: Update dependency org.jenkins-ci.plugins:junit to v1304) + # pull: 9842 (PR title: Update dependency postcss-preset-env to v10.0.6) + # pull: 9843 (PR title: Update eslint monorepo to v9.12.0) + + - version: '2.481' + date: 2024-10-15 + changes: + - type: rfe + category: rfe + pull: 9787 + issue: 73813 + authors: + - mawinter69 + pr_title: "[JENKINS-73813] Show a notification when scheduling a build fails" + message: |- + Show a notification when scheduling a build fails. + - type: rfe + category: rfe + pull: 9833 + authors: + - janfaracik + pr_title: "Refine content and appearance of the 'Edit View' screen" + message: |- + Refine content and appearance of the Edit View page. + - type: rfe + category: rfe + authors: + - basil + pr_title: "Winstone 8.2: Upgrade Jetty from 12.0.13 to Jetty 12.0.14" + references: + - pull: 9841 + - url: https://github.com/jetty/jetty.project/releases/jetty-12.0.14 + title: Jetty 12.0.14 changelog + - url: https://github.com/jenkinsci/winstone/releases/winstone-8.2 + title: Winstone 8.2 changelog + message: |- + Upgrade Winstone to 8.2 in order to update Jetty from 12.0.13 to 12.0.14. + - type: rfe + category: rfe + authors: + - Vlatombe + pr_title: "[JENKINS-30101][JENKINS-30175] Simplify persistence design for + temporarily offline status" + references: + - pull: 9855 + - issue: 30101 + - issue: 30175 + message: |- + Retain user-generated offline reason when agent connects or disconnects for technical reasons. + - type: bug + category: bug + pull: 9727 + issue: 63343 + authors: + - dwnusbaum + pr_title: "[JENKINS-63343] Validate element types for collections and maps + when deserializing XML files" + message: |- + Ignore values with incorrect types when deserializing collections and maps in XML files. + - type: bug + category: bug + pull: 9739 + issue: 72979 + authors: + - debayangg + pr_title: "[JENKINS-72979] Remove trailing space from Windows agent secret + file instructions" + message: |- + Remove trailing space from Windows agent secret file instructions. + - type: bug + category: bug + pull: 9810 + issue: 73835 + authors: + - dwnusbaum + pr_title: "[JENKINS-73835] Do not allow builds to be deleted while they are + still running and ensure build discarders run after builds are fully complete" + message: |- + Do not allow builds to be deleted while they are still building. + Ensure build discarders only process builds which have fully completed. + - type: rfe + category: developer + pull: 9813 + authors: + - Vlatombe + pr_title: "Create a new taglib to capture the save/apply bottom bar" + message: |- + Developer: Add a new taglib saveApplyBar for configuration forms. + # pull: 9809 (PR title: Add tests for empty directory in tar and zip archives) + # pull: 9844 (PR title: Update dependency org.jenkins-ci.plugins:matrix-project to v839) + # pull: 9845 (PR title: Update jenkins/ath Docker tag to v6032) + # pull: 9847 (PR title: Update jenkins/ath Docker tag to v6034) + # pull: 9848 (PR title: Update dependency org.jenkins-ci.plugins:scm-api to v698) + # pull: 9850 (PR title: Update dependency org.jenkins-ci.main:jenkins-test-harness to v2341) + # pull: 9851 (PR title: Update dependency lit to v3.2.1) + # pull: 9853 (PR title: Update dependency org.jenkins-ci.plugins:credentials to v1389) + # pull: 9854 (PR title: Update jenkins/ath Docker tag to v6038) + # pull: 9856 (PR title: Update dependency globals to v15.11.0) + # pull: 9859 (PR title: Update dependency org.jenkins-ci.plugins:display-url-api to v2.209.v582ed814ff2f) + # pull: 9860 (PR title: Update dependency org.jenkins-ci.plugins:mailer to v489) + # pull: 9861 (PR title: Update dependency org.jenkins-ci.plugins:matrix-project to v840) + # pull: 9863 (PR title: Update babel monorepo to v7.25.8) + # pull: 9864 (PR title: Update dependency postcss-preset-env to v10.0.7) + # pull: 9865 (PR title: Update dependency sass to v1.79.5) + # pull: 9866 (PR title: Update dependency io.jenkins.plugins:asm-api to v9.7.1-97.v4cc844130d97) + # pull: 9868 (PR title: Update dependency io.jenkins.plugins:json-api to v20240303-101.v7a_8666713110) + # pull: 9870 (PR title: Update dependency org.jenkins-ci.plugins:script-security to v1365) + + - version: '2.482' + date: 2024-10-22 + changes: + - type: rfe + category: rfe + pull: 9462 + authors: + - timja + pr_title: Use standard dropdowns for combobox + message: |- + Modernize ComboBox component. + - type: rfe + category: rfe + pull: 9734 + authors: + - janfaracik + - timja + pr_title: "Refine content and appearance of the project ''Configure'' screen" + message: |- + Refine content and appearance of the project Configure screen. + - type: bug + category: bug + pull: 9855 + issue: 30101 + authors: + - Vlatombe + pr_title: "[JENKINS-30101][JENKINS-30175] Simplify persistence design for + temporarily offline status" + message: |- + Retain user generated offline reason when agent connects or disconnects for technical reasons. + + # pull: 8351 (PR title: [JENKINS-71728] Add CSP compatible version of `FormApply#applyResponse`) + # pull: 9728 (PR title: [JENKINS-73768] Handle base=derived case in Util#isOverridden) + # pull: 9867 (PR title: Update dependency io.jenkins.plugins:gson-api to v2.11.0-85.v1f4e87273c33) + # pull: 9869 (PR title: Update dependency stylelint to v16.10.0) + # pull: 9872 (PR title: Update jenkins/ath Docker tag to v6040) + # pull: 9873 (PR title: Update dependency io.jenkins.plugins:echarts-api to v5.5.1-2 - autoclosed) + # pull: 9874 (PR title: Fix run generate-weekly-changelog.sh failed) + # pull: 9876 (PR title: Stop build in `DeleteBuildsCommandTest.deleteBuildsShouldFailIfTheBuildIsRunning` so test can be cleaned up on Windows consistently) + # pull: 9877 (PR title: Update dependency org.jenkins-ci:jenkins to v1.125) + # pull: 9878 (PR title: Print Jenkins version on boot) + # pull: 9879 (PR title: Update dependency io.jenkins.plugins:echarts-api to v5.5.1-3) + # pull: 9880 (PR title: Update dependency org.jenkins-ci.main:remoting to v3270) + # pull: 9881 (PR title: Update dependency org.jenkins-ci.plugins.workflow:workflow-support to v930) + # pull: 9882 (PR title: Allow for null to be passed to `doSafeRestart`) + # pull: 9884 (PR title: Update dependency org.springframework:spring-framework-bom to v6.1.14) + # pull: 9885 (PR title: Migrate `site.xml` to new model) + # pull: 9886 (PR title: Update dependency org.jenkins-ci.plugins:junit to v1307) + # pull: 9887 (PR title: Reduce default size of diagnostic buffer for `FlightRecorderInputStream` from 1MiB to 1KiB) + # pull: 9888 (PR title: Update dependency org.jenkins-ci.main:remoting to v3272) + # pull: 9889 (PR title: Update dependency sass to v1.80.1) + # pull: 9892 (PR title: Update dependency sass to v1.80.2) + # pull: 9893 (PR title: Update Yarn to v4.5.1) + # pull: 9894 (PR title: Update dependency org.springframework.security:spring-security-bom to v6.3.4) + # pull: 9895 (PR title: Update dependency org.jenkins-ci.main:remoting to v3273 - autoclosed) + # pull: 9896 (PR title: Update dependency @eslint/js to v9.13.0) + # pull: 9897 (PR title: Update dependency org.jenkins-ci.main:jenkins-test-harness to v2345) + # pull: 9898 (PR title: Update dependency eslint to v9.13.0) + # pull: 9899 (PR title: Update dependency sass to v1.80.3) + + - version: '2.483' + date: 2024-10-29 + changes: + - type: rfe + category: rfe + pull: 9903 + authors: + - jglick + pr_title: Removing configurability of `Jenkins.agentProtocols` + message: |- + Stop allowing configuration of the agent protocols list. + - type: rfe + category: rfe + pull: 9883 + authors: + - Vlatombe + pr_title: Display appropriate GUI that accurately displays offline by design + message: |- + The agents online/offline status and icon can now be influenced by the offline cause, giving better information to users. + Clarifies some use cases when an agent was offline by design and not because of a configuration or technical error. + - type: rfe + category: rfe + pull: 9916 + authors: + - mustsafu + pr_title: Turkish localization fixes for node list page + message: |- + Translate node list page to Turkish. + - type: bug + category: bug + pull: 9908 + issue: 73845 + authors: + - Dohbedoh + pr_title: "[JENKINS-73845] Fix OperatingSystemEndOfLifeAdminMonitor endOfLifeDate + displayed on first warning day" + message: |- + Fix end of life operating system monitor that shows 2099-12-31 on the first day a warning should be displayed. + - type: rfe + category: developer + pull: 9905 + authors: + - Vlatombe + pr_title: When calling Nodes#setNodes, NodeListener methods should be called + as required + message: |- + Developer: Calls to Nodes#setNodes now notify NodeListener implementations. + + # pull: 9890 (PR title: Turkish localization fixes for security configuration) + # pull: 9891 (PR title: Translate user property categories to Turkish) + # pull: 9902 (PR title: Update dependency org.jenkins-ci.plugins:matrix-auth to v3.2.3) + # pull: 9904 (PR title: Update jenkins/ath Docker tag to v6052) + # pull: 9906 (PR title: Add Resource Root URL test for permissions assigned to groups) + # pull: 9909 (PR title: Add note about environment variable in parameter file.html) + # pull: 9910 (PR title: Fill in since annotations) + # pull: 9911 (PR title: Update jenkins/ath Docker tag to v6058) + # pull: 9912 (PR title: Update babel monorepo to v7.26.0) + # pull: 9913 (PR title: Update dependency org.jenkins-ci.plugins:script-security to v1366) + # pull: 9914 (PR title: Update jenkins/ath Docker tag to v6059) + # pull: 9915 (PR title: Update babel monorepo to v7.26.0) + # pull: 9916 (PR title: Turkish localization fixes for node list page) + # pull: 9917 (PR title: Update dependency com.puppycrawl.tools:checkstyle to v10.19.0) + # pull: 9918 (PR title: Update dependency postcss-preset-env to v10.0.8) + # pull: 9919 (PR title: Update dependency sass to v1.80.4) + # pull: 9922 (PR title: Update dependency io.jenkins.plugins:echarts-api to v5.5.1-4) + + - version: '2.484' + date: 2024-11-05 + changes: + - type: rfe + category: rfe + pull: 9928 + authors: + - mustafau + pr_title: Translate RSS links to Turkish + message: |- + Translate RSS links to Turkish. + - type: bug + category: bug + pull: 9925 + authors: + - jglick + pr_title: "Race condition & memory leak in TypedFilter" + message: |- + Fix a rare race condition rendering pages soon after startup. + + # pull: 9778 (PR title: Avoid saving `nextBuildNumber` while loading `Job`) + # pull: 9846 (PR title: `Job.BuildNumberAssigner`) + # pull: 9923 (PR title: Skip `LogRotatorTest#ableToDeleteCurrentBuild` on Windows) + # pull: 9924 (PR title: Update dependency org.jenkins-ci.plugins:script-security to v1367) + # pull: 9926 (PR title: Update dependency com.puppycrawl.tools:checkstyle to v10.20.0) + # pull: 9927 (PR title: Fill in since annotations) + # pull: 9929 (PR title: Update softprops/action-gh-release action to v2.0.9) + # pull: 9932 (PR title: Update dependency sass to v1.80.5) + # pull: 9934 (PR title: Update dependency webpack to v5.96.0) + # pull: 9935 (PR title: Update dependency mini-css-extract-plugin to v2.9.2 - autoclosed) + # pull: 9936 (PR title: Update dependency sass-loader to v16.0.3) + # pull: 9937 (PR title: Update dependency webpack to v5.96.1) + # pull: 9938 (PR title: Update dependency postcss-preset-env to v10.0.9) + # pull: 9939 (PR title: Update eslint monorepo to v9.14.0) + # pull: 9943 (PR title: Update dependency sass to v1.80.6) + + - version: '2.485' + date: 2024-11-12 + changes: + - type: rfe + category: rfe + pull: 9930 + authors: + - jglick + pr_title: Clarify SECURITY-3315 error code on client side + message: |- + Clearer error message for the CLI in the default webSocket mode when a 403 error results from a reverse proxy misconfiguration. + - type: bug + category: regression + pull: 9947 + issue: 74795 + authors: + - basil + pr_title: "[JENKINS-74795] Job created via REST API attaches to default view" + message: |- + Do not add jobs created via the REST API to the default view. + - type: rfe + category: developer + pull: 9921 + authors: + - jglick + pr_title: Introducing `ControllerToAgentCallable` and `ControllerToAgentFileCallable` + message: |- + Developer: Introduce ControllerToAgentCallable and ControllerToAgentFileCallable with support for records in controller to agent callables. + - type: bug + category: bug + pull: 9945 + issue: 74814 + authors: + - basil + pr_title: "[JENKINS-74814] `java.lang.UnsupportedOperationException`: This + stack walker does not have `RETAIN_CLASS_REFERENCE` access" + message: |- + Developer: Allow context classloaders to be defined without making explicit reference to the calling class. + + # pull: 9931 (PR title: Update operating system end of life test data) + # pull: 9940 (PR title: Update dependency org.jenkins-ci.plugins.workflow:workflow-support to v932) + # pull: 9941 (PR title: Update jenkins/ath Docker tag to v6072) + # pull: 9942 (PR title: Update stapler.version to v1922 (major)) + # pull: 9944 (PR title: Update dependency org.jenkins-ci.main:remoting to v3283) + # pull: 9946 (PR title: Update dependency org.apache.maven.skins:maven-fluido-skin to v2.0.0) + # pull: 9949 (PR title: Update dependency org.jenkins-ci:jenkins to v1.126) + # pull: 9950 (PR title: Update dependency globals to v15.12.0) + # pull: 9952 (PR title: Update dependency com.puppycrawl.tools:checkstyle to v10.20.1) + # pull: 9954 (PR title: Update dependency com.thoughtworks.xstream:xstream to v1.4.21 [SECURITY]) + # pull: 9957 (PR title: Update dependency org.jenkins-ci.plugins:junit to v1309) + # pull: 9960 (PR title: Update dependency io.jenkins.plugins:prism-api to v1.29.0-18) + # pull: 9961 (PR title: Update dependency io.jenkins.plugins:design-library to v323) + # pull: 9962 (PR title: Update dependency org.jenkins-ci.main:jenkins-test-harness to v2351) + # pull: 9963 (PR title: Update softprops/action-gh-release action to v2.1.0) + + - version: '2.486' + date: 2024-11-19 + changes: + - type: rfe + category: developer + pull: 9982 + authors: + - dependabot[bot] + pr_title: Bump @eslint/plugin-kit from 0.2.0 to 0.2.3 + message: |- + Developer: Upgrade ESLint plugin-kit from 0.2.0 to 0.2.3. + - type: rfe + category: developer + pull: 9986 + authors: + - dependabot[bot] + pr_title: Bump cross-spawn from 7.0.3 to 7.0.5 + message: |- + Developer: Upgrade cross-spawn from 7.0.3 to 7.0.5. + + # pull: 9966 (PR title: Update dependency org.jenkins-ci.plugins:command-launcher to v116) + # pull: 9967 (PR title: Update jenkins/ath Docker tag to v6081) + # pull: 9969 (PR title: Update dependency postcss to v8.4.48) + # pull: 9970 (PR title: Update dependency org.jenkins-ci.plugins:script-security to v1369) + # pull: 9971 (PR title: Update dependency postcss-preset-env to v10.1.0) + # pull: 9974 (PR title: Fill in since annotations) + # pull: 9976 (PR title: Update dependency org.springframework:spring-framework-bom to v6.2.0) + # pull: 9977 (PR title: Update dependency postcss to v8.4.49) + # pull: 9978 (PR title: Update dependency org.jenkins-ci.main:jenkins-test-harness to v2353) + # pull: 9984 (PR title: Update dependency org.jvnet.hudson:commons-jelly-tags-define to v1.1-jenkins-20241115) + # pull: 9985 (PR title: Update dependency sass to v1.80.7) + # pull: 9987 (PR title: Update stapler.version to v1927 (major)) + # pull: 9988 (PR title: Update dependency org.jenkins-ci.plugins:cloudbees-folder to v6.959.v4ed5cc9e2dd4) + # pull: 9989 (PR title: Update eslint monorepo to v9.15.0) + # pull: 9990 (PR title: Update dependency sass to v1.81.0) + # pull: 9991 (PR title: Update dependency postcss-preset-env to v10.1.1) + + - version: '2.487' + date: 2024-11-27 + changes: + - type: security + message: Important security fix. + references: + - url: /security/advisory/2024-11-27/ + title: security advisory + # DO NOT EDIT THIS FILE DIRECTLY ON GITHUB IF YOU HAVE COMMIT ACCESS # ALL CHANGES MUST GO THROUGH PULL REQUESTS # MALFORMED FILE CONTENTS WILL BREAK THE SITE BUILD diff --git a/content/_data/indexpage/carousel.yml b/content/_data/indexpage/carousel.yml index 1cc82ca26e32..03f756966b1c 100644 --- a/content/_data/indexpage/carousel.yml +++ b/content/_data/indexpage/carousel.yml @@ -1,25 +1,24 @@ -# Hacktoberfest 2024 -- :href: https://hacktoberfest.com/ - :title: Hacktoberfest 2024 - :intro: Jenkins is participating in Hacktoberfest 2024. We are seeking contributors - and maintainers who want to join us to improve Jenkins in October! +- :href: /blog/2024/10/04/content-security-policy-grant/ + :title: Alpha Omega Foundation Content Security Policy Grant + :intro: Alpha Omega Foundation has provided a grant to Jenkins to improve the implementation of Content Security Policy. + Read more about what this means for the Jenkins project. :image: - :src: /images/hacktoberfest/hacktoberfest_2024_social_600x300.png - :height: 300px + :src: /images/post-images/2024/10/04/content-security-policy-grant.png + :height: 320px :call_to_action: :text: More info - :href: "/events/hacktoberfest/" + :href: /blog/2024/10/04/content-security-policy-grant/ -# Jenkins 2024 board and officer elections -- :href: /blog/2024/09/25/board-officer-election-announcement/ - :title: Voter registration for Jenkins Elections 2024 - :intro: Voter registration has started for 2024 elections. - Register today to shape the future of Jenkins! +# Jenkins 2024 board and officer statements +- :href: /blog/2024/10/03/jenkins-election-candidates/ + :title: Jenkins Elections 2024 Voting is now open! + :intro: Voting for 2024 Jenkins governance board elections is now open until November 31, 2024. + Read the candidate statements to learn what they hope to bring to the project and what Jenkins means to them. :image: - :src: /images/governance/elections/2024/2024-registrations-opengraph.svg + :src: /images/governance/elections/2024/2024-candidate-statements-opengraph.svg :height: 320px :call_to_action: - :text: Register to vote! + :text: Read the candidate statements here! :href: /blog/2024/09/25/board-officer-election-announcement/ # diff --git a/content/_data/upgrades/2-121-1.adoc b/content/_data/upgrades/2-121-1.adoc index 25f306c227e5..58c6e0c6cb9e 100644 --- a/content/_data/upgrades/2-121-1.adoc +++ b/content/_data/upgrades/2-121-1.adoc @@ -36,7 +36,7 @@ Jobs now have a link in the side panel titled "Rename" that links to a page spec link:https://issues.jenkins.io/browse/JENKINS-31661[JENKINS-31661] If you have not defined a root URL, various Jenkins features will not work correctly. -To ensure to the extent possible that a root URL is configured, an administative monitor will show when it's not. +To ensure to the extent possible that a root URL is configured, an administrative monitor will show when it's not. ==== JDK Tool Plugin detached from Jenkins core diff --git a/content/_data/upgrades/2-479-1.adoc b/content/_data/upgrades/2-479-1.adoc new file mode 100644 index 000000000000..66c02fd8ad76 --- /dev/null +++ b/content/_data/upgrades/2-479-1.adoc @@ -0,0 +1,123 @@ +==== Require Java 17 + +Beginning with Jenkins 2.479.1, Jenkins requires Java 17 or newer on both the controller JVM and agent JVMs. + +Therefore, it is critical to upgrade both the controller _and_ agents to Java 17 or newer prior to upgrading Jenkins to 2.479.1. +Use the link:https://plugins.jenkins.io/versioncolumn/[Versions Node Monitors] plugin to verify that agents are running a compatible version of Java. +In addition to upgrading your controller and agents, you must ensure that all plugins have been updated both *before and after* upgrading. +This ensures up-to-date plugins that remain compatible. +If plugins are not updated both before and after the upgrade, compatibility issues may arise. + +The official Jenkins Docker images for link:https://hub.docker.com/r/jenkins/jenkins/[the controller] and link:https://hub.docker.com/r/jenkins/inbound-agent/[agents] have been based on Java 17 for several months, while also supporting Java 21 as an alternative. +With the release of Jenkins 2.479.1, the Java 11 images have been retired. +Users of the official Docker images do not need to install or configure Java on their own, as it comes preinstalled in the Docker images. + +If your application build still requires Java 8 or 11, and you are using a Docker image to run the agent Java process `remoting.jar` simultaneously, you must provide a Java 17 or newer runtime for the Jenkins agent process and a Java 8 or 11 environment for your application build. + +Users of the official Jenkins OS packages for Debian, Red Hat, and SUSE Linux distributions must use their own Java package. +These users may install Java 17 from their Linux distribution, as described on the package download site: + +* link:https://pkg.jenkins.io/debian-stable/[Debian Linux and derivatives] +* link:https://pkg.jenkins.io/redhat-stable/[Red Hat Enterprise Linux and derivatives] +* link:https://pkg.jenkins.io/opensuse-stable/[openSUSE Linux and derivatives] + +The above downloads do not require any custom repositories, so this is the simplest method, and has been tested by the Jenkins project. +However, the above method does not give the user a high degree of control over the Java runtime environment. +The official Jenkins Docker images and the Jenkins infrastructure project use Adoptium/Eclipse Temurin. +Enthusiastic users can install Java from Adoptium or another vendor. +Adoptium recently began providing Linux installation packages, as described in link:https://blog.adoptium.net/2021/12/eclipse-temurin-linux-installers-available/[a blog post by George Adams]. +The choice of Java vendor is up to you, as long as that vendor provides Java 17 or Java 21. +Refer to your chosen Java vendor for installation instructions. + +Once you have installed a suitable version of Java, configure Jenkins to use that Java runtime. +The most straightforward way is to configure that version of Java as the default version, at the operating system (OS) level: + +Debian:: `update-alternatives --config java` +Red Hat:: `alternatives --config java` +SUSE:: `update-alternatives --config java` + +Alternatively, users who do not wish to change the default version of Java can customize the `JAVA_HOME` or `JENKINS_JAVA_CMD` environment variable as part of the Jenkins `systemd(1)` service unit. +Refer to the link:/doc/book/system-administration/systemd-services/[Managing systemd services] documentation for more information. + +If you are using the Environment Injector plugin and receive a `WARNING: An illegal reflective access operation has occurred` message, there are two workarounds for affected users: + +If you only need to update an existing environment variable (such as PATH), but do not need to add or remove environment variables, upgrade to link:https://github.com/jenkinsci/envinject-plugin/releases/tag/2.919.v009a_a_1067cd0[version 2.919.v009a_a_1067cd0] of the plugin:envinject[Environment Injector plugin]. + +If you need to add (set) or remove (unset) environment variables, consider unchecking *Prepare jobs environment* or *Unset System Environment Variables* in the plugin:envinject[Environment Injector plugin], to reduce or eliminate usage of this plugin.. +Instead, implement by starting the agent process (the process started by running java -jar agent.jar […]) in the desired environment (clearing the environment and defining FOO with env - FOO=BAR java -jar agent.jar […]) in your shell. +Mutating environment variables in a Unix process can be problematic, so it is recommended that you start the process with the desired environment, rather than changing the environment later. +Changing the environment after a Unix process has started often results in race conditions, and the Environment Injector plugin is no exception. + +If you need to add (set) or remove (unset) environment variables and must do this using the plugin:envinject[Environment Injector] plugin, then specify the --add-opens JVM option for your agent: + +For outbound agents that connect via SSH, you must specify the JVM options on the agent configuration page: + +image::/images/post-images/2024/10/jvm-options-ssh.png[Specifying the JVM options for your agent that connects via SSH.] + +For inbound agents, you must also add the argument to the JVM on the agent configuration page. +For example: +[source,bash] +---- +java --add-opens java.base/java.lang=ALL-UNNAMED --add- +opens=java.base/java.lang.reflect=ALL-UNNAMED -jar agent.jar -url +http://localhost:9090/ -secret -name inbound -workDir +---- + +==== Upgrade Spring Security, Spring Framework, and servlet containers + +In addition to Java 17, 2.479.1 includes upgrades to Spring Security 6, Spring Framework 6, and Jakarta EE 9. +When upgrading your Jenkins controller and agents, you must also ensure that all plugins have been updated accordingly. +Prior to upgrading Jenkins, make sure that all plugins have been brought up to date as much as possible. +After completing the Jenkins upgrade, update your plugins once more to ensure that they are in line with the latest LTS build. + +Users of the LDAP plugin **must** upgrade it to link:https://plugins.jenkins.io/ldap/releases/#version_733.vd3700c27b_043[version 733.vd3700c27b_043] in tandem with upgrading Jenkins core. +Users of the Reverse Proxy Auth plugin **must** upgrade it to link:https://plugins.jenkins.io/reverse-proxy-auth-plugin/releases/#version_1.8.0[version 1.8.0] in tandem with upgrading Jenkins core and must also upgrade the Mailer plugin to link:https://updates.jenkins.io/download/plugins/mailer/489.vd4b_25144138f/mailer.hpi[version 489.vd4b_25144138f]. +Users of the CAS plugin **must** upgrade it to link:https://plugins.jenkins.io/cas-plugin/releases/#version_1.7.0[version 1.7.0] in tandem with upgrading Jenkins core. +Users of the Windows Negotiate SSO plugin **must** upgrade it to link:https://plugins.jenkins.io/NegotiateSSO/releases/#version_136.vda_2b_6a_744b_d8[version 136.vda_2b_6a_744b_d8] in tandem with upgrading Jenkins core. +Users of third-party servlet containers **must** upgrade the servlet container to an EE 9 version in accordance with the link:https://www.jenkins.io/doc/book/platform-information/support-policy-servlet-containers/[Jenkins Servlet Container Support Policy]. + +To upgrade the LDAP plugin, follow these steps: + +. Stop the Jenkins service with `systemctl stop jenkins` on Linux or similar commands on other operating systems. +. Download the LDAP plugin from the link:https://updates.jenkins.io/latest/ldap.hpi[Jenkins update center]. +. Move ldap.hpi into $JENKINS_HOME/plugins/ldap.jpi and set the correct ownership and permissions. +. Start the Jenkins service with `systemctl start jenkins` or similar commands on other operating systems. + +To upgrade the Reverse Proxy Auth plugin, follow these steps: + +. Stop the Jenkins service with `systemctl stop jenkins` on Linux or similar commands on other operating systems. +. Download the Reverse Proxy Auth plugin from the link:https://updates.jenkins.io/download/plugins/reverse-proxy-auth-plugin/1.8.0/reverse-proxy-auth-plugin.hpi[Jenkins update center]. +. Move reverse-proxy-auth-plugin.hpi into $JENKINS_HOME/plugins/reverse-proxy-auth-plugin.jpi and set the correct ownership and permissions. +. Download the Mailer plugin from the link:https://updates.jenkins.io/download/plugins/mailer/489.vd4b_25144138f/mailer.hpi[Jenkins update center]. +. Move mailer.hpi into $JENKINS_HOME/plugins/mailer.jpi and set the correct ownership and permissions. +. Start the Jenkins service with `systemctl start jenkins` or similar commands on other operating systems. + +To upgrade the CAS plugin, follow these steps: + +. Stop the Jenkins service with `systemctl stop jenkins` on Linux or similar commands on other operating systems. +. Download the CAS plugin from the link:https://updates.jenkins.io/download/plugins/cas-plugin/1.7.0/cas-plugin.hpi[Jenkins update center]. +. Move cas-plugin.hpi into $JENKINS_HOME/plugins/cas-plugin.jpi and set the correct ownership and permissions. +. Start the Jenkins service with `systemctl start jenkins` or similar commands on other operating systems. + +To upgrade the Windows Negotiate SSO plugin, follow these steps: + +. Stop the Jenkins service with `systemctl stop jenkins` on Linux or similar commands on other operating systems. +. Download the Windows Negotiate SSO plugin from the link:https://updates.jenkins.io/download/plugins/NegotiateSSO/136.vda_2b_6a_744b_d8/NegotiateSSO.hpi[Jenkins update center]. +. Move NegotiateSSO.hpi into $JENKINS_HOME/plugins/NegotiateSSO.jpi and set the correct ownership and permissions. +. Start the Jenkins service with `systemctl start jenkins` or similar commands on other operating systems. + +// Intentionally not describing servlet container upgrade. Is that okay? + +==== Remove Windows escape hatch + +The `hudson.model.DirectoryBrowserSupport.allowAbsolutePath` system property that allows the Windows path traversal vulnerability escape hatch has been removed. +Users that rely on it must adapt their usage to no longer require the Windows path traversal vulnerability. +No other workaround is planned. +Refer to link:https://www.jenkins.io/security/advisory/2021-10-06/#SECURITY-2481[SECURITY-2481] for details. + +==== Increase minimum required Remoting version + +The minimum required Remoting version has been updated to link:https://github.com/jenkinsci/remoting/releases/tag/3107.v665000b_51092[3107.v665000b_51092]. +When an agent with a Remoting version older than 3107.v665000b_51092 connects to the Jenkins controller, the agent connection is rejected. +Ensure that all agents are running a recent version of Remoting prior to upgrading. +Agents with unsupported Remoting versions can be allowed to connect to the controller by setting the `hudson.slaves.SlaveComputer.allowUnsupportedRemotingVersions` system property to `true`. diff --git a/content/_data/upgrades/2-479-2.adoc b/content/_data/upgrades/2-479-2.adoc new file mode 100644 index 000000000000..fabdfb4d37c1 --- /dev/null +++ b/content/_data/upgrades/2-479-2.adoc @@ -0,0 +1 @@ +No notable changes requiring upgrade notes. \ No newline at end of file diff --git a/content/_data/upgrades/2-73-1.adoc b/content/_data/upgrades/2-73-1.adoc index 409fc3250365..042cc2a7c2a3 100644 --- a/content/_data/upgrades/2-73-1.adoc +++ b/content/_data/upgrades/2-73-1.adoc @@ -42,7 +42,7 @@ Workarounds for this issue: . In the case of Git Plugin, switch to the Git CLI implementation -link:https://gist.github.com/rtyler/cd3a3f759c46f308bf7151819f5538a0[This Groovy Script], when executed in the "Script Console" (located at `/script`) can be used to determine if the instance contains any passphrase-proteced ed25519 SSH keys before upgrading. +link:https://gist.github.com/rtyler/cd3a3f759c46f308bf7151819f5538a0[This Groovy Script], when executed in the "Script Console" (located at `/script`) can be used to determine if the instance contains any passphrase-protected ed25519 SSH keys before upgrading. ==== Groovy 2.4.11 Upgrade diff --git a/content/_partials/downloadbanner.html.haml b/content/_partials/downloadbanner.html.haml index e1aceebab4f2..968359660dec 100644 --- a/content/_partials/downloadbanner.html.haml +++ b/content/_partials/downloadbanner.html.haml @@ -7,7 +7,7 @@ .col-md-1.col-lg-2 .col-md-5.col-lg-4 - %img{:src => "/images/logos/jenkins/Jenkins-stop-the-war.svg", :style => 'width: 356px;'} + %img{:src => "/images/logos/jenkins/jenkins.svg", :style => 'width: 256px;'} .col-md-5.col-lg-4 %h1.page-title @@ -20,14 +20,6 @@ The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. - %p - %img{:src => "https://s.w.org/images/core/emoji/13.1.0/svg/1f1fa-1f1e6.svg", :style => 'width: 20px;'} - We stand with the people of Ukraine. - Please assist humanitarian efforts for the Ukrainian people and - those affected by the military invasion of Ukraine by supporting - international aid organizations, including the - %a{ :href => "https://redcross.org.ua/en/donate/" } - Ukrainian Red Cross %div{:style => "display: flex; gap: 1rem"} %a.app-button.app-button--primary{:href => expand_link('download')} diff --git a/content/blog/2024/10/24/2024-10-24-update-center-brownouts-5.adoc b/content/blog/2024/10/24/2024-10-24-update-center-brownouts-5.adoc new file mode 100644 index 000000000000..50f4bdc24b02 --- /dev/null +++ b/content/blog/2024/10/24/2024-10-24-update-center-brownouts-5.adoc @@ -0,0 +1,64 @@ +--- +layout: post +title: "Brownout on Update Center (updates.jenkins.io):\n 24 and 25 October 2024" +tags: +- jenkins +- jenkins-infra +- update-center +authors: +- dduportal +opengraph: + image: /images/post-images/2023/01/12/jenkins-newsletter/infrastructure.png +overview: "We'll be using the new Update Center implementation in production for 1 day" +discourse: true +--- + +== Summary (link:https://en.wikipedia.org/wiki/Wikipedia:Too_long;_didn%27t_read[TL;DR]) + +Note: this is a follow up of link:/blog/2024/09/25/update-center-brownouts-4/[the 26 and 27 September 24 hours brownout]. + +The service https://updates.jenkins.io will switch its implementation to a new system during 1 day: + +- From Thursday 24 October 2024 from 10:00am UTC until Friday 25 October 2024 10:00am UTC + +All Jenkins users are impacted but should not see any functional change. + +⚠️ Please, check that your organization respects the advertised DNS TTL or you might be stuck in the brownout longer than expected. + +Under the hood, any HTTP request made to this service will be redirected to a mirror close to user locations during these brownouts. + +== What is the "Update Center"? + +Jenkins link:https://updates.jenkins.io[Update Center] is a web server at the core of the Jenkins public infrastructure which distributes the plugins, tool installers, and versions index to all Jenkins servers across the world. + +From the installation wizard to regular plugin updates, if you run Jenkins, then you use this service under the hood. + +Today, it serves around 50 Tb of data (outbound bandwidth) each month from a single virtual machine on AWS, which costs around $6,000 per month. + +In order to sustain this service and improve it, the Jenkins infrastructure team has worked relentlessly during the past years to have a new sustainable implementation for this service. + +The new Update Center implementation features a highly available system that redirects user requests to a download mirror close to their location. +Additional information is available in the link:https://github.com/jenkins-infra/helpdesk/issues/2649[GitHub issue]. + +== Why this Fifth "link:https://en.wikipedia.org/wiki/Brownout_(electricity)[Brownout]"? + +Our functional tests and performance tests are meeting our expectations after the initial work and the four brownouts we ran. + +However the previous (fourth) brownout raised 2 issues: +- We've seen (and were reported) HTTP/404 errors due to broken links in some HTML pages (not used a lot) and missing endpoints used for healthchecks in link:https://github.com/jenkins-infra/helpdesk/issues/4311[] +- We've also seen HTTP/404 errors after 8-9 hours or production usage due to network file share (SMB/CIFS) issues with Apache. The service is self-healing but we are trying to fine tune this: if it fails, then we'll have to update the Apache architecture to stop using a network file share. See https://github.com/jenkins-infra/helpdesk/issues/4312 for details. + +As such, a fifth brownout serves to verify the above (minor) problems are solved under a production workload. + +== How + +Both current and new Update Centers are updated at the same time and serve the same index. + +Starting 12 weeks ago, the Jenkins infrastructure has been using the new Update Center (link:https://azure.updates.jenkins.io[azure.updates.jenkins.io]) with a client-side DNS override (`updates.jenkins.io` hostname points to this new service). + +During this brownout, we'll simply switch the DNS entry `updates.jenkins.io` to this new service and watch for the logs and error rate. +At the end, we'll switch DNS back to the normal service and then analyze metrics and logs to see how the system behaved. + +We are confident the new system will perform as expected. + +Please refer to the link:https://github.com/jenkins-infra/helpdesk/issues/2649[helpdesk ticket] for more information. diff --git a/content/blog/2024/10/25/2024-10-25-jenkins-tutorial-revamp.adoc b/content/blog/2024/10/25/2024-10-25-jenkins-tutorial-revamp.adoc new file mode 100644 index 000000000000..5d64ce63f7a1 --- /dev/null +++ b/content/blog/2024/10/25/2024-10-25-jenkins-tutorial-revamp.adoc @@ -0,0 +1,277 @@ +--- +layout: post +title: "Revamping Jenkins Tutorials: A Journey to Simplicity and Inclusivity" +tags: +- jenkins +- community +- contribute +- vienna +- cdf +- open-source +- outreach +- cdf +- docker +- tutorials +authors: +- gounthar +opengraph: + image: /images/post-images/2024/10/25/2024-10-25-jenkins-tutorial-revamp/opengraph.png +links: +discourse: true +--- + +== Introduction: Transforming Jenkins tutorials + +Technical tutorials often present challenges to developers, particularly when learning complex systems like Jenkins. +The existing Jenkins tutorials, while comprehensive, had become a significant barrier to entry for many developers, especially those new to continuous integration and deployment. + +During the link:https://events.linuxfoundation.org/archive/2024/open-source-summit-europe/[Open Source Summit Europe 2024], the Continuous Delivery Foundation (CDF) organized a link:https://cd.foundation/cd-mini-summit-vienna/[mini summit]. +The CFP committee accepted our presentation on the Jenkins tutorials modernization project, which was completed during Google Summer of Code 2023. +This initiative was presented alongside link:https://cd.foundation/cd-mini-summit-vienna/program/[other valuable contributions] from various CDF projects. +We are grateful to the link:https://cd.foundation[CDF] for providing this platform to share our work. + +This blog post accompanies that presentation and details our systematic approach to redesigning the Jenkins tutorials. +We'll examine how we transformed complex setup procedures into streamlined, accessible guides using modern tooling and best practices. +The discussion will cover the challenges we encountered, the technical solutions we implemented, and the measurable improvements achieved through these changes. + +== The Problem: Old Jenkins tutorials + +=== A visual comparison + +Before we dive into the specifics, let's take a visual journey through the old and new tutorial experiences: + +video::jVOpNnOXr_s[youtube,width=839] + +Did you notice how much scrolling was required on the right side? +It was like a never-ending story. +And did you see the amount of code users had to copy-paste? +While we'll always need a certain quantity of code for the Jenkins pipeline itself, the setup process should be as simple as possible. +That wasn't the case with the old tutorials. + +=== Breaking down the issues + +Our old tutorials, while comprehensive, presented several significant challenges: + +1. *Overwhelming complexity*: Users were bombarded with Docker commands before they could even start learning about Jenkins. +The tutorial assumed users were Docker gurus, throwing commands at them like there's no tomorrow. + +2. *Assumptions about user knowledge*: The tutorials assumed a high level of Docker expertise. +But let me ask you this: how many of you knew Docker really well the first time you tried Jenkins? +That's not a fair expectation. + +3. *Lengthy setup process*: A significant portion of the tutorial was dedicated to setup rather than learning Jenkins itself. +We were spending more time with Docker than with Jenkins! + +4. *Reliance on outdated tools*: We were heavily dependent on the deprecated Blue Ocean plugin, which was no longer recommended. + +5. *Docker in Docker*: The old tutorial used Docker in Docker, which is considered a bad practice from a security standpoint. + +6. *Lack of context*: The tutorials often lacked explanations for why certain steps were necessary, leaving users to blindly follow instructions without understanding. + +Here's a snippet from the old Maven tutorial to illustrate these points: + +[source,bash] +---- +docker network create jenkins +docker run \ + --name jenkins-docker \ + --rm \ + --detach \ + --privileged \ + --network jenkins \ + --network-alias docker \ + --env DOCKER_TLS_CERTDIR=/certs \ + --volume jenkins-docker-certs:/certs/client \ + --volume jenkins-data:/var/jenkins_home \ + --publish 2376:2376 \ + docker:dind \ + --storage-driver overlay2 +---- + +This command, while functional, is overwhelming for beginners and lacks context. +Why do we need a Docker network? +Why are we running Docker in Docker? +These questions were left unanswered. + +== The Solution: Revamping with Docker Compose + +After much deliberation and feedback, we decided to leverage link:https://docs.docker.com/compose/intro/compose-application-model/[Docker Compose] to simplify the entire setup process. + +=== Why Docker Compose? + +Docker Compose can encapsulate complex multi-container setups into a single, easy-to-understand file. +It is the only tool that can handle the complexity of the Jenkins controller and agent setup while making it accessible to newcomers. + +Here's an example of how Docker Compose simplifies things: + +[source,yaml] +---- +services: + jenkins: + image: jenkins/jenkins:lts + ports: + - "8080:8080" + volumes: + - jenkins_home:/var/jenkins_home + agent: + image: jenkins/ssh-agent:jdk17 + environment: + - JENKINS_AGENT_SSH_PUBKEY= +volumes: + jenkins_home: +---- + +With this setup, users can start Jenkins and an agent with a single command: `docker compose up -d`. + +=== Key improvements + +1. *Simplified setup*: Instead of a series of complex Docker commands, users can now get started with a single Docker Compose command. + +2. *Reduced assumptions*: By encapsulating the setup in Docker Compose, we removed the need for extensive Docker knowledge. + +3. *Focus on Jenkins*: With a streamlined setup, users can dive into learning Jenkins faster. + +4. *Modernized tools*: We replaced outdated plugins like Blue Ocean with more current solutions. + +5. *Elimination of Docker in Docker*: Our new setup avoids this security risk entirely. + +6. *Contextual guidance*: We've added explanations for each step, helping users understand why they're performing certain actions. + +== The Process: Collaboration and innovation + +This revamp was a collaborative effort, with significant contributions from our Google Summer of Code participant, author:ash-sxn[Ashutosh Saxena]. +His fresh perspective as a newcomer to Jenkins was invaluable in identifying pain points that we, as experienced developers, had overlooked. + +=== Key innovations + +1. *Multi-architecture support*: We ensured our Docker images work on both `x86_64` and `ARM64` architectures. +This was a significant challenge that Ashutosh tackled using Docker's `buildx` tool. + +2. *GitPod integration*: We made Jenkins accessible directly from the browser, reducing hardware barriers to entry. +This was particularly important for users with less powerful machines or those in environments with limited resources. + +3. *Docker Compose profiles*: We introduced profiles for different languages and technologies, making it easy to switch between setups. +For example, users can start a Maven-specific setup with `docker compose --profile maven up -d`. + +4. *Automated updates*: We implemented automation to keep our Docker images up-to-date, using tools like link:https://docs.github.com/en/code-security/dependabot[Dependabot] and link:https://www.updatecli.io/[UpdateCLI]. + +== The Result: A More inclusive Jenkins + +The outcome of our efforts is a Jenkins experience that's more inclusive than ever. +Let's break down the key improvements: + +=== 1. Simplified setup + +Users can now get Jenkins running with a single command. Here's how straightforward it is: + +1. Clone the repository: `git clone https://github.com/jenkins-docs/quickstart-tutorials.git` +2. Navigate to the directory: `cd quickstart-tutorials` +3. Start Jenkins: `docker compose --profile up -d` + +That's it! No more complex Docker commands or manual configuration. + +=== 2. Browser-based access with GitPod + +Thanks to GitPod integration, Jenkins is now just a click away, even on less powerful devices. +This cloud-based approach brings several key advantages for accessibility and ease of use: + +. _*One-Click Setup*_: The repository's `README` contains a link:https://gitpod.io/#https://github.com/jenkins-docs/quickstart-tutorials[GitPod link] that launches Jenkins instantly. +With the GitPod Chrome extension installed, you'll see a prominent green button that makes the process even smoother. +. _*Resource-Friendly*_: GitPod provides 50 hours of free monthly usage, making Jenkins accessible to users regardless of their local hardware capabilities. +. _*Bandwidth Optimization*_: Since GitPod handles the heavy lifting of downloading Docker images, users can get started quickly even with limited internet connectivity - whether they're working from a train, a remote location, or a region with restricted bandwidth. +. _*Familiar Development Environment*_: Users get instant access to a Visual Studio Code-like IDE and terminal, complete with clear instructions for their chosen tutorial. + +Here's a quick demonstration of the GitPod integration in action: + +video::WsH7yL5chow[youtube,width=839] + +As you can see, users have some instructions and a command to copy-paste in the terminal. + +After pasting the command in the terminal, the setup process begins automatically. +Docker images are pulled efficiently through GitPod's infrastructure, preserving your local bandwidth. +The Jenkins controller and agent containers are launched, and a browser tab automatically opens to display the Jenkins interface. +The entire process takes less than a minute - a significant improvement over traditional setup methods. +Since we've streamlined the authentication process, you can log in immediately using the credentials (`admin`/`admin`) and begin your Jenkins journey. + +video::oEcreaxR6MQ[youtube,width=839] + +Expanding the window reveals the full Jenkins interface. +Upon logging in with the tutorial credentials (`admin`/`admin`), you'll immediately notice several key features: a pre-configured job and an active agent visible in the left sidebar. +This job, while simple, serves an important purpose — it demonstrates that both your Jenkins controller is operational and the agent is properly connected. +Navigating to "_`Manage Jenkins`_" shows that all plugins are current, eliminating any need for initial administrative setup. +The bottom right corner displays the current Jenkins LTS version (`2.462.2` at the time of recording), confirming you're working with the latest stable release. +This streamlined environment allows users to focus entirely on learning Jenkins, without getting caught up in configuration details. +The entire setup process, from start to finish, takes less than two minutes and requires no local installation — perfectly aligned with our goal of making Jenkins more accessible to everyone. + +video::pEaWpCm1xLU[youtube,width=839] + +The GitPod terminal output illustrates another key innovation: our implementation of Docker Compose profiles for various programming languages and technologies. +This feature exemplifies our commitment to simplicity — switching between different technology stacks, whether Maven, Python, or Node.js, requires only a single command: `docker compose --profile maven up -d`. +The system handles all the complexity behind the scenes, delivering a seamless experience that lets developers focus on learning Jenkins rather than wrestling with configuration. + +This streamlined approach reflects our broader commitment to inclusivity. +Through multi-architecture support and browser-based accessibility via GitPod, we've created an environment where developers of all experience levels and technical resources can engage with Jenkins effectively. + +=== 3. Flexible configurations + +Docker Compose profiles allow easy switching between different tech stacks. +Whether you're working with Maven, Python, or Node.js, you can start the appropriate environment with a simple profile switch. + +=== 4. Up-to-date and secure + +By eliminating Docker in Docker and implementing automated updates, we've made the tutorials more secure and easier to maintain. + +== The Impact: Before and after + +The impact of these changes has been significant and far-reaching: + +1. *Increased adoption*: Our Docker images have been downloaded over 26,000 times since launch. +We've seen multiple forks of the project, with people using it to create their own Jenkins instances for other technologies. + +2. *Educational benefits*: University professors have incorporated these tutorials into their CI/CD curricula. +One teacher reported that his students, most of whom had never used Jenkins before, were able to get up and running in minutes. +The simplification helped them focus on learning Jenkins rather than fighting with the setup process. + +3. *Community engagement*: We've seen regular clones and forks of the repository, indicating active use of our tutorials. +Referrals come not just from jenkins.io, but also from Reddit, Medium, and Google searches. + +4. *Unexpected benefits*: The new setup has even facilitated testing of major Jenkins upgrades. +For example, it's being used to test the ongoing migration to Spring Security 6.x and Spring Framework 6.x. +This allows anyone to launch transitional versions of Jenkins with one command and provide valuable feedback on the progress. + +== The Future: Call to action + +While we've made significant strides, our work is far from over. +We're constantly looking for ways to improve Jenkins, and that's where you come in. +Whether you're a seasoned developer or a complete newcomer, your feedback and contributions are invaluable. + +We encourage you to: + +1. Try out link:/doc/tutorials/#tools[the new tutorials]. +2. link:https://github.com/jenkins-docs/quickstart-tutorials/issues[Provide feedback] on your experience. +3. Contribute ideas or code to further improve the tutorials. +4. link:https://community.jenkins.io/[Share your experience] with the community. + +Remember, Jenkins is a community-driven project. +Your input shapes its future! + +=== Upcoming improvements + +We're already planning the next phase of improvements: + +1. Expanding the range of technology-specific profiles. +2. Further refining the GitPod experience. +3. Exploring integration with other cloud development environments. +4. Continuously updating our documentation to reflect best practices. + +== Conclusion + +The Jenkins tutorials modernization project has significantly transformed the onboarding experience for new users. +Through careful redesign and modern tooling, we've created a more accessible and efficient learning environment that accommodates developers across all experience levels. + +The implementation of Docker Compose, GitPod integration, and comprehensive documentation has established a robust foundation for future Jenkins users. +These improvements serve our core mission of making continuous integration and deployment accessible to all developers, regardless of their prior experience with DevOps tools. + +We invite you to experience these improvements firsthand by exploring our updated tutorials. +Your feedback and contributions will help shape the future of Jenkins documentation and training resources. +For a detailed overview of this modernization effort, you can view the complete presentation from the CDF Summit here: link:https://www.youtube.com/watch?v=8rHtgzZGNLY&list=PL2KXbZ9-EY9R_boit2YAwAiCPdcI0Y44J&index=5&ab_channel=ContinuousDeliveryFoundation[presentation recording]. diff --git a/content/blog/2024/11/01/2024-11-01-jenkins-csp-project-update.adoc b/content/blog/2024/11/01/2024-11-01-jenkins-csp-project-update.adoc new file mode 100644 index 000000000000..35c6e4653300 --- /dev/null +++ b/content/blog/2024/11/01/2024-11-01-jenkins-csp-project-update.adoc @@ -0,0 +1,94 @@ +--- +layout: post +title: "Advancing Security: Jenkins Content Security Policy (CSP) Project Progress" +tags: +- jenkins +- community +- contribute +- open-source +- security +- csp +- alpha-omega +- plugins +authors: +- gounthar +opengraph: + image: /images/post-images/2024/11/01/2024-11-01-jenkins-csp-project-update/opengraph.png +links: +discourse: true +--- + +Security is a core focus at Jenkins, and through the link:/blog/2024/10/04/content-security-policy-grant/[Content Security Policy (CSP) grant] from the Alpha-Omega Foundation, we're reinforcing our commitment to the stability and safety of our community. +After weeks of progress, collaboration, and technical challenges, it's time to share where we are and what’s next. + +== Why CSP Matters +With Jenkins as a crucial tool for thousands worldwide, securing its ecosystem is essential. +link:https://content-security-policy.com/[CSP], a modern web security protocol, helps shield applications from injection attacks like cross-site scripting (XSS). +This project, supported by Alpha-Omega, represents a three-month push to integrate and enhance CSP across Jenkins, thanks to the dedication of developers author:shlomomdahan[Shlomo Dahan] and https://github.com/yaroslavafenkin[Yaroslav Afenkin], and the oversight of author:basil[Basil Crow] and myself. + +== Milestones and Achievements + +=== Acceptance Testing Success + +One of our most significant milestones has been the dramatic improvement in our Acceptance Test Harness (ATH) results. +Starting from a challenging position, we've achieved remarkable progress: + +* Initial CSP compatibility testing showed numerous issues. +* Current status: Only 5 remaining failures in restrictive mode. +* Represents a major step toward full CSP implementation. + +=== Plugin Modernization Campaign + +Our team has systematically worked through the Jenkins plugin ecosystem, modernizing and securing critical components. +Key highlights include: + +==== High-Impact Releases + +We've successfully updated and released over 20 widely used plugins with improved CSP compatibility, including: + +* Core plugins like link:https://plugins.jenkins.io/maven-plugin/[Maven], link:https://plugins.jenkins.io/subversion/[Subversion], and link:https://plugins.jenkins.io/junit/[JUnit]. +* Critical workflow components such as the link:https://plugins.jenkins.io/branch-api/[Branch API]and link:https://plugins.jenkins.io/workflow-support/[Workflow Support] plugins. +* Popular visualization tools like the link:https://plugins.jenkins.io/echarts-api/[ECharts API] plugin. + +==== jQuery Modernization + +A special focus has been placed on modernizing jQuery usage across plugins, with notable improvements: + +* Upgrading plugins from jQuery 1.x to 3.x. +* Removing inline JavaScript. +* Implementing modern event-handling patterns. + +=== Community Impact + +This initiative isn't just about code changes — it's about building a more secure foundation for the entire Jenkins community. +Our work has: + +* Enhanced security for thousands of Jenkins installations worldwide. +* Provided a clear path forward for plugin maintainers. +* Created examples for future CSP implementations. + +=== Looking Forward + +As we move into the second phase of this project, we're focusing on: + +* Completing the remaining critical plugin updates. +* Finalizing CSP scanner tooling for automated vulnerability detection. +* Creating comprehensive documentation for maintainers and users. +* Preparing for a potential expanded project in 2025. + +=== Get Involved + +We welcome community participation in this important security initiative. +You can help by: + +* Testing your plugins with CSP enabled. +* Reporting any CSP-related issues you encounter. +* Contributing to plugin modernization efforts. + +For more information about the CSP implementation project or to get involved, visit our link:/doc/developer/security/csp/[CSP documentation page]. + + +[NOTE] +==== +Special thanks to author:basil[Basil Crow] for technical leadership, author:shlomomdahan[Shlomo Dahan] and link:https://github.com/yaroslavafenkin[Yaroslav Afenkin] for the hard work, author:daniel-beck[Daniel Beck] for his link:https://github.com/daniel-beck/csp-scanner[CSP-flaw-finding tool], and the Alpha-Omega Foundation for making this work possible through their generous grant. +==== diff --git a/content/blog/2024/11/07/2024-11-07-update-center-brownouts-6.adoc b/content/blog/2024/11/07/2024-11-07-update-center-brownouts-6.adoc new file mode 100644 index 000000000000..28edefab57fd --- /dev/null +++ b/content/blog/2024/11/07/2024-11-07-update-center-brownouts-6.adoc @@ -0,0 +1,68 @@ +--- +layout: post +title: "Brownout on Update Center (updates.jenkins.io):\n 07 and 08 November 2024" +tags: +- jenkins +- jenkins-infra +- update-center +authors: +- smerle33 +opengraph: + image: /images/post-images/2023/01/12/jenkins-newsletter/infrastructure.png +overview: "We'll be using the new Update Center implementation in production for 1 day" +discourse: true +--- + +== Summary (link:https://en.wikipedia.org/wiki/Wikipedia:Too_long;_didn%27t_read[TL;DR]) + +Note: this is a follow up of link:/blog/2024/10/24/update-center-brownouts-5/[the 24 and 25 October 2024 24 hours brownout]. + +The service link:https://updates.jenkins.io[https://updates.jenkins.io] will switch its implementation to a new system during 1 day: + +- From Thursday 7 November 2024 09:00 am UTC until Friday 8 November 2024 09:00 am UTC + +All Jenkins users are impacted but should not see any functional change. + +⚠️ Please check that your organization respects the advertised DNS TTL or you might be stuck in the brownout longer than expected. + +Under the hood, any HTTP request made to this service will be redirected to a mirror close to the users' location during these brownouts. + +== What is the "Update Center"? + +Jenkins link:https://updates.jenkins.io[Update Center] is a web server at the core of the Jenkins public infrastructure that distributes the plugins, tool installers, and versions index to all Jenkins servers across the world. + +From the installation wizard to regular plugin updates, if you run Jenkins, then you use this service under the hood. + +Today, it serves around 50 Tb of data (outbound bandwidth) each month from a single virtual machine on AWS, which costs around $6,000 per month. + +The Jenkins infrastructure team has worked relentlessly over the past years to implement a new sustainable implementation for this service in order to sustain and improve it. + +The new Update Center implementation features a highly available system that redirects user requests to a download mirror close to their location. +Additional information is available in the link:https://github.com/jenkins-infra/helpdesk/issues/2649[GitHub issue]. + +== Why this Sixth "link:https://en.wikipedia.org/wiki/Brownout_(electricity)[Brownout]"? + +Our functional tests and performance tests are meeting our expectations after the initial work and the five brownouts we ran. + +However the previous (fifth) brownout raised 2 issues: + +- We miss some directory listings that are present on the current infra and are not available on mirrors + +- We've also added log retain from Cloudflare to Datadog that should help if HTTP/404 errors still occur after 8-9 hours or production usage due to network file share (SMB/CIFS) issues with Apache. The service is self-healing but we are trying to fine-tune this: if it fails, then we'll have to update the Apache architecture to stop using a network file share. See https://github.com/jenkins-infra/helpdesk/issues/4312 for details. + +As such, a sixth brownout serves to verify the above (minor) problems are solved under a production workload, this should be the last brownout. + +We plan a full migration to this new infrastructure for Monday 18 November, more information on this to come. + +== How + +Both current and new Update Centers are updated at the same time and serve the same index. + +Starting 12 weeks ago, the Jenkins infrastructure has been using the new Update Center (link:https://azure.updates.jenkins.io[azure.updates.jenkins.io]) with a client-side DNS override (`updates.jenkins.io` hostname points to this new service). + +During this brownout, we'll simply switch the DNS entry `updates.jenkins.io` to this new service and watch for the logs and error rate. +At the end, we'll switch DNS back to the normal service and then analyze metrics and logs to see how the system behaved. + +We are confident the new system will perform as expected. + +Please refer to the link:https://github.com/jenkins-infra/helpdesk/issues/2649[helpdesk ticket] for more information. diff --git a/content/blog/2024/11/13/2024-11-13-hacktoberfest.adoc b/content/blog/2024/11/13/2024-11-13-hacktoberfest.adoc new file mode 100644 index 000000000000..a380bf830807 --- /dev/null +++ b/content/blog/2024/11/13/2024-11-13-hacktoberfest.adoc @@ -0,0 +1,58 @@ +--- +layout: post +title: "Jenkins' Participation in Hacktoberfest 2024" +tags: +- hacktoberfest +- event +- community +- newcomer +- outreach-programs +author: gounthar +links: + discourse: https://community.jenkins.io/t/hacktoberfest-2024/20812 +opengraph: + image: /images/hacktoberfest/hacktoberfest_2024_social.jpg +--- + +image:/images/hacktoberfest/hacktoberfest_2024_logo.svg[Hacktoberfest,role=center,width='75%'] + +The Jenkins community is pleased to have participated in this year’s Hacktoberfest, an event focused on fostering open-source contributions and welcoming new contributors to our ecosystem. + +As Hacktoberfest 2024 has come to a close, we're happy to reflect on the community's participation: + +== Jenkins’ Contribution to Hacktoberfest + +This year, we saw an increase in community engagement, with contributions including *1,174 pull requests* across the `jenkinsci`, `jenkins-infra`, and `jenkins-docs` GitHub organizations. +Notably, *243 pull requests* were part of the Hacktoberfest initiative, contributed by *67 unique participants*. + +Out of these submissions, *223 pull requests were successfully merged*, demonstrating the collaborative efforts and commitment of our contributors and maintainers alike, achieving an impressive 92% acceptance rate. + +== Encouraging Newcomers + +One of our primary objectives during Hacktoberfest is to welcome and support new open-source contributors. +The Jenkins community provided resources and guidance, assisting newcomers in understanding the procedures and standards for quality contributions. + +We are proud of all our participants, with special recognition for our seasoned contributors who continue to provide valuable input year after year. +Notable contributions from some of our well-established members include: + +- author:jonesbusy[*jonesbusy*], submitting *41 validated pull requests* +- author:basil[*basil*], contributing *14 pull requests* +- author:kmartens27[*kmartens27*], adding *11 pull requests* + +Each of these individuals has consistently demonstrated their commitment to enhancing the Jenkins project, contributing their expertise to advance our goals, and mentoring and supporting new contributors along the way. + +== Supporting Our Maintainers and Community + +The proactive involvement of our project maintainers has been instrumental in the success of Hacktoberfest this year. +Their dedication to preparing repositories by adding relevant topics and tags to ensure clear, accessible contribution guidelines has been crucial. +Our heartfelt thanks go out to all maintainers for fostering a supportive environment for our contributors. + +== Looking Forward to Hacktoberfest 2025 + +With an eye towards next year’s Hacktoberfest, we are keen to build on our success and continue improving our engagement with both long-standing community members and those new to the world of open source. +We hope to keep enriching our processes and support frameworks. + +The Jenkins community is proud of what we've achieved together and looks forward to welcoming more individuals into our ongoing open-source projects. +If you are interested in link:https://www.jenkins.io/participate/[contributing] or learning more about our activities, we encourage you to engage with us. + +link:https://community.jenkins.io/t/hacktoberfest-2024/20812[Join our discussions] and help shape the future of Jenkins! diff --git a/content/blog/2024/11/16/2024-11-16-new-update-center.adoc b/content/blog/2024/11/16/2024-11-16-new-update-center.adoc new file mode 100644 index 000000000000..5fd2c3d22001 --- /dev/null +++ b/content/blog/2024/11/16/2024-11-16-new-update-center.adoc @@ -0,0 +1,50 @@ +--- +layout: post +title: "New Update Center (updates.jenkins.io) Architecture in Production:\n 18 November 2024" +tags: +- jenkins +- jenkins-infra +- update-center +authors: +- dduportal +- smerle33 +opengraph: + image: /images/post-images/2023/01/12/jenkins-newsletter/infrastructure.png +overview: "The new Update Center implementation in production" +discourse: true +--- + +== Summary (link:https://en.wikipedia.org/wiki/Wikipedia:Too_long;_didn%27t_read[TL;DR]) + +Note: this is a follow up of link:/blog/2024/11/07/update-center-brownouts-6/[the 07 and 08 November 2024 24-hour brownout]. + +The service link:https://updates.jenkins.io[https://updates.jenkins.io] will switch its implementation to the new system, on Monday 18 November 2024 at 09:00 am UTC. + +All Jenkins users are impacted but should not see any functional change. + +⚠️ Please check that your organization respects the advertised DNS TTL or you might be stuck in the brownout longer than expected. + +== What is the "Update Center"? + +Jenkins link:https://updates.jenkins.io[Update Center] is a web server at the core of the Jenkins public infrastructure that distributes the plugins, tool installers, and version index to all Jenkins servers worldwide. + +From the installation wizard to regular plugin updates, if you run Jenkins, then you use this service under the hood. + +Today, it serves around 50 TB of data (outbound bandwidth) each month from a single virtual machine on AWS, which costs around $6,000 per month. + +The Jenkins infrastructure team has worked relentlessly over the past years to implement a new sustainable implementation for this service in order to sustain and improve it. + +The new Update Center implementation features a highly available system that redirects user requests to a download mirror close to their location. + +Additional information is available in the link:https://github.com/jenkins-infra/helpdesk/issues/2649[GitHub issue]. + +== What Happens? + +After running 6 brownouts (e.g. using the new system in production from 1 to 24 hours), +we are confident we ran out of things to break (©link:https://www.jenkins.io/blog/authors/basil/[Basil Crow]). + +We'll simply switch the DNS entry `updates.jenkins.io` to this new service and continue monitoring it. + +In 1 month, if no major issue arises, we'll start decommissioning the old service on the VM which was used for years. + +Please refer to the link:https://github.com/jenkins-infra/helpdesk/issues/2649[helpdesk ticket] for more information. diff --git a/content/changelog-stable/index.html.haml b/content/changelog-stable/index.html.haml index f375c4f233b2..fadbeddab41a 100644 --- a/content/changelog-stable/index.html.haml +++ b/content/changelog-stable/index.html.haml @@ -23,10 +23,10 @@ actions: %div.app-releases__list__items = partial('changelog-changes.html.haml', :changes => release.changes) - - if release.changes and release.lts_changes - .app-releases__notable-changes - = "Notable changes since #{release.lts_predecessor}" - %div.app-releases__list__items - = partial('changelog-changes.html.haml', :changes => release.lts_changes) + - if release.changes and release.lts_changes + .app-releases__notable-changes + = "Notable changes since #{release.lts_predecessor}" + %div.app-releases__list__items + = partial('changelog-changes.html.haml', :changes => release.lts_changes) = partial('changelog-stable.html') diff --git a/content/css/jenkins.css b/content/css/jenkins.css index 0a006bef5c3c..8e3761c998bf 100644 --- a/content/css/jenkins.css +++ b/content/css/jenkins.css @@ -23,20 +23,20 @@ a:hover { } .container.page { - position: relative + position: relative; } -body .no-margin{ - margin:0; - padding:0; +body .no-margin { + margin: 0; + padding: 0; } #ji-hover-layer { position: relative; - z-index: 999 + z-index: 999; } -#download-menu>.dropdown-menu { +#download-menu > .dropdown-menu { width: 50rem; - padding: 2rem + padding: 2rem; } .download-popup-menu .popover-arrow { @@ -47,7 +47,7 @@ body .popover.download-options { width: 620px; min-width: 500px !important; max-width: 90% !important; - box-shadow: 0 3px 15px rgba(0, 0, 0, .25) + box-shadow: 0 3px 15px rgba(0, 0, 0, 0.25); } .betanotice { @@ -60,23 +60,23 @@ body .popover.download-options { z-index: 100; } - body h1.page-title { font: bold 4rem 'georgia'; - margin-top: -.2rem + margin-top: -0.2rem; } body h1.page-title .in-tag { - display: none + display: none; } .sub-heading { - margin: -.5rem 0 1rem; + margin: -0.5rem 0 1rem; } -.fixed.top{ - position:fixed; - top:0; width:100%; - z-index:10; +.fixed.top { + position: fixed; + top: 0; + width: 100%; + z-index: 10; } .text-right { @@ -101,7 +101,7 @@ body h1.page-title .in-tag { right: 0; bottom: 0; width: 100%; - opacity: .67 + opacity: 0.67; } .carousel-item .mask { @@ -110,7 +110,7 @@ body h1.page-title .in-tag { right: 20%; top: 0; bottom: 0; - background: rgba(255, 255, 255, .5); + background: rgba(255, 255, 255, 0.5); box-shadow: 0 0 100px 10px #fff; } @@ -120,44 +120,40 @@ body h1.page-title .in-tag { } /* for same font-size in popups*/ -.dropdown-menu p{ - - font-size: .875rem !important; - +.dropdown-menu p { + font-size: 0.875rem !important; } /* fix for windows chrome which renders size of dropdown button 1px less because of round-off */ -@media screen and (-webkit-min-device-pixel-ratio:0) and (min-resolution:.001dpcm) -{ - .chromeOnly{ - - height: 36px; - - } +@media screen and (-webkit-min-device-pixel-ratio: 0) and (min-resolution: 0.001dpcm) { + .chromeOnly { + height: 36px; + } } -.authors, .authors>.auth { +.authors, +.authors > .auth { display: inline-block; padding-bottom: 5px; margin: 0; } -.authors>.auth>a { +.authors > .auth > a { font-size: 50px; padding: 5px; border: 1px solid; display: block; text-decoration: none; - cursor: pointer + cursor: pointer; } -.authors>.auth>a:hover { - background: #def +.authors > .auth > a:hover { + background: #def; } div .authors { display: block; padding: 0; - margin-bottom: 3rem + margin-bottom: 3rem; } .row.body { @@ -165,19 +161,17 @@ div .authors { } .no-margin .row { - margin:0; + margin: 0; } - - .container.center { - text-align: center + text-align: center; } -.center>.center { +.center > .center { display: inline; float: none; - display: inline-block + display: inline-block; } body .jumbotron { @@ -197,8 +191,8 @@ body .card-block { text-decoration: none !important; } -.jumbotron.featured .row>div { - position: relative +.jumbotron.featured .row > div { + position: relative; } .jumbotron.featured .icon-docker.big { @@ -206,19 +200,18 @@ body .card-block { position: absolute; right: 0; top: -4rem; - text-decoration: none + text-decoration: none; } .tint { - box-shadow: inset 0 0 100px rgba(0, 0, 0, .25) + box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.25); } img.desaturate { -webkit-filter: grayscale(100%); filter: grayscale(100%); filter: gray; - filter: - url("data:image/svg+xml;utf8,#greyscale"); + filter: url("data:image/svg+xml;utf8,#greyscale"); } .img-box { @@ -235,179 +228,182 @@ img.desaturate { margin: 2px; } -.img-box>img { +.img-box > img { width: 100%; vertical-align: middle; position: relative; - top: -5px + top: -5px; } -.media-row, .step-by-step { +.media-row, +.step-by-step { text-align: center; padding: 2rem 1rem 3rem; white-space: nowrap; overflow-x: auto; overflow: visible; position: relative; - border-bottom: .1rem solid #ccc; + border-bottom: 0.1rem solid #ccc; } .media-row { - display: flex; - flex-wrap: wrap; - background-color: #fff; + display: flex; + flex-wrap: wrap; + background-color: #fff; } -.media-row>.header, .step-by-step>.container>.header { +.media-row > .header, +.step-by-step > .container > .header { margin-bottom: 1.75rem; } -.media-row>.media, .step-by-step>.container.step { +.media-row > .media, +.step-by-step > .container.step { vertical-align: top; cursor: pointer; - font-size:.9rem; + font-size: 0.9rem; } .date-time, -.step-by-step>.container .step .card-title { - display: inline-block; - text-align:center; - width: 4.75em; - height: 4.75em; - padding: .5em; - background: #168bb9; - color: #fff; - border-radius: 50%; - position: relative; - overflow: hidden; - font-size: 1rem; -} -.date-time>.date, -.step-by-step>.container .step .card-title>.tag { - font-size: .75em; - font-weight: normal; - position: absolute; - left: 0; - top: 0; - right: 0; - padding: .5em 0 .25em; - background: rgba(180,40,40,.85); - box-shadow: 0 1px 5px rgba(0,0,0,.15); - border-top-left-radius: .5em; - border-top-right-radius: .5em; +.step-by-step > .container .step .card-title { + display: inline-block; + text-align: center; + width: 4.75em; + height: 4.75em; + padding: 0.5em; + background: #168bb9; + color: #fff; + border-radius: 50%; + position: relative; + overflow: hidden; + font-size: 1rem; +} +.date-time > .date, +.step-by-step > .container .step .card-title > .tag { + font-size: 0.75em; + font-weight: normal; + position: absolute; + left: 0; + top: 0; + right: 0; + padding: 0.5em 0 0.25em; + background: rgba(180, 40, 40, 0.85); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.15); + border-top-left-radius: 0.5em; + border-top-right-radius: 0.5em; } .date-time > .date .small { - font-size: .5em; -} - -body .date-time{ - border-radius:.5em; - height:5.3em; - width:5.3em; -} -.date-time>.date>*{ - display:inline; -} -.date-time>.date>.dow{ - display: block; - position: absolute; - bottom: -1.1em; - left: -1em; - right: -1.15em; - font-size: 6em; - font-family: 'arial narrow'; - font-weight: bolder; - color: rgba(0,0,0,.15); - text-align: center; -} -.date-time>.time{ - font-size: 1.1em; - line-height: .67em; - position: relative; - margin: 2em -1em 0; -} -.step-by-step>.container .step .card-title>.num { - font-size: 2em; - line-height: 1em; - margin-top: .67em; -} -.step-by-step>.container .step .title { - font-size:1.1rem; - white-space:nowrap -} -.step-by-step>.container .step .short { - font-size: .75rem; + font-size: 0.5em; +} + +body .date-time { + border-radius: 0.5em; + height: 5.3em; + width: 5.3em; +} +.date-time > .date > * { + display: inline; +} +.date-time > .date > .dow { + display: block; + position: absolute; + bottom: -1.1em; + left: -1em; + right: -1.15em; + font-size: 6em; + font-family: 'arial narrow'; + font-weight: bolder; + color: rgba(0, 0, 0, 0.15); + text-align: center; +} +.date-time > .time { + font-size: 1.1em; + line-height: 0.67em; + position: relative; + margin: 2em -1em 0; +} +.step-by-step > .container .step .card-title > .num { + font-size: 2em; + line-height: 1em; + margin-top: 0.67em; +} +.step-by-step > .container .step .title { + font-size: 1.1rem; + white-space: nowrap; +} +.step-by-step > .container .step .short { + font-size: 0.75rem; line-height: 1.5em; overflow: hidden; display: block; - margin: 0 .5rem .5rem; - overflow: hidden + margin: 0 0.5rem 0.5rem; + overflow: hidden; } /* default padding removed so that text dont get cropped */ -.card-block{ - padding-bottom: 0 +.card-block { + padding-bottom: 0; } -.media-row>.media { +.media-row > .media { width: 14rem; height: auto; min-height: 16rem; text-align: left; font-size: 85%; - margin: .25rem + margin: 0.25rem; } -.media-row>.media>img { - width: 100% +.media-row > .media > img { + width: 100%; } -.media-row>.media>.card-block { +.media-row > .media > .card-block { width: 100%; white-space: normal; - padding: .75rem + padding: 0.75rem; } -.media-row>.media>.card-block p { - line-height: 1.2em +.media-row > .media > .card-block p { + line-height: 1.2em; } -.media-row>.media .media-title { +.media-row > .media .media-title { font-size: 1.25rem; - margin-bottom: .125rem + margin-bottom: 0.125rem; } .quote-row { background: #f9f9f9; - box-shadow: inset 0 10px 100px rgba(0, 0, 0, .25); + box-shadow: inset 0 10px 100px rgba(0, 0, 0, 0.25); border-radius: 0; - white-space: normal + white-space: normal; } .quote-row .card.important { background: #fff; - box-shadow: 0 1px 5px rgba(0, 0, 0, .25); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25); font-size: 1rem; margin-top: -1rem; - white-space: normal + white-space: normal; } .quote-row .card.important p { - font-size: 1rem + font-size: 1rem; } -#directory td>a { +#directory td > a { display: block; padding-right: 1rem; - padding-bottom: .5rem; - margin-bottom: .5rem + padding-bottom: 0.5rem; + margin-bottom: 0.5rem; } -#directory td>a>img { +#directory td > a > img { height: 40px; width: 40px; } #directory tr { - vertical-align: top + vertical-align: top; } #directory tr td .title { @@ -415,207 +411,212 @@ body .date-time{ } #directory tr td .description { - font-size: 75% + font-size: 75%; } -#welcome, body #sidebar ul.resources { +#welcome, +body #sidebar ul.resources { padding-bottom: 3rem; position: relative; border-top: 1px solid #ccc; padding-top: 1.5rem; - margin-top: .75rem; - margin-bottom: 2rem + margin-top: 0.75rem; + margin-bottom: 2rem; } -#welcome>div { +#welcome > div { position: absolute; left: 0; bottom: 0; - height: 3rem + height: 3rem; } -#welcome>div>a { +#welcome > div > a { display: block; padding-left: 40px; margin-left: 1rem; position: absolute; top: 0; - font-weight: bold + font-weight: bold; } -#sidebar #welcome>div>img { +#sidebar #welcome > div > img { position: absolute; top: 0; left: 4px; height: 32px; - width: 32px + width: 32px; } -#sidebar #welcome>.content { +#sidebar #welcome > .content { position: relative; - height: auto + height: auto; } -#sidebar ul.resources, #sidebar ul.resources>li, #sidebar ul.resources>li>a - { +#sidebar ul.resources, +#sidebar ul.resources > li, +#sidebar ul.resources > li > a { display: block; list-style: none; margin: 0; - padding: 0 + padding: 0; } -body #sidebar ul.resources>li>a { - padding: 0 0 .5rem 40px; +body #sidebar ul.resources > li > a { + padding: 0 0 0.5rem 40px; margin-left: 1rem; - font-weight: bold + font-weight: bold; } -body .ji-dated-list>.post { - border-top: .1rem solid #ccc; - margin-bottom: .5rem +body .ji-dated-list > .post { + border-top: 0.1rem solid #ccc; + margin-bottom: 0.5rem; } .ji-dated-list, .ji-item-list, -.ji-item-list>post, -.ji-item-list>post>.body, -.ji-item-list>.post>.body { +.ji-item-list > post, +.ji-item-list > post > .body, +.ji-item-list > .post > .body { display: block; position: relative; padding: 0; margin: 0; list-style: none; - font-size:1rem; + font-size: 1rem; } -.events .ji-item-list{ +.events .ji-item-list { text-align: center; white-space: nowrap; overflow: visible; overflow-x: auto; overflow-y: visible; - border-bottom:1px solid #ccc; - vertical-align:top; -} - -.events .ji-item-list>.event{ - display:inline-block; - margin:0; - vertical-align:top; -} -.events .ji-item-list>.event>a{ - width:16rem; - padding:.75rem; - margin:1rem .25rem .25rem; - white-space:normal; - text-decoration:none; -} -.events .ji-item-list>.event>a .title{ - margin:.75rem 0 .25rem; - height:1.1rem; - overflow:hidden; - position:relative; -} -.events .ji-item-list>.event>a .title:after{ - content:' '; - display:block; - position:absolute; - height:1.1rem; - width:10%; - box-shadow:inset var(--background) -3rem 0 2rem -2rem; - bottom:0; right:0; -} -.events .ji-item-list>.event>a .teaser{ - color:#4a5568; - font-size:.85rem; - height:3.3rem; - overflow:hidden; - position:relative; -} -.events .ji-item-list>.event>a .teaser:after{ - content:' '; - display:block; - position:absolute; - height:1.1rem; - width:25%; - box-shadow:inset var(--background) -6rem 0 3rem -3rem; - bottom:0; right:0; -} - - -.ji-dated-list>.post>.attrs, .ji-dated-list>.post>.body { + border-bottom: 1px solid #ccc; + vertical-align: top; +} + +.events .ji-item-list > .event { + display: inline-block; + margin: 0; + vertical-align: top; +} +.events .ji-item-list > .event > a { + width: 16rem; + padding: 0.75rem; + margin: 1rem 0.25rem 0.25rem; + white-space: normal; + text-decoration: none; +} +.events .ji-item-list > .event > a .title { + margin: 0.75rem 0 0.25rem; + height: 1.1rem; + overflow: hidden; + position: relative; +} +.events .ji-item-list > .event > a .title:after { + content: ' '; + display: block; + position: absolute; + height: 1.1rem; + width: 10%; + box-shadow: inset var(--background) -3rem 0 2rem -2rem; + bottom: 0; + right: 0; +} +.events .ji-item-list > .event > a .teaser { + color: #4a5568; + font-size: 0.85rem; + height: 3.3rem; + overflow: hidden; + position: relative; +} +.events .ji-item-list > .event > a .teaser:after { + content: ' '; + display: block; + position: absolute; + height: 1.1rem; + width: 25%; + box-shadow: inset var(--background) -6rem 0 3rem -3rem; + bottom: 0; + right: 0; +} + +.ji-dated-list > .post > .attrs, +.ji-dated-list > .post > .body { padding: 1.25rem 1rem 1rem 5rem; text-decoration: none; } -.fff.section{ - background:#fff; - box-shadow:0 2px 3px rgba(0,0,0,.15); - position:relative; - z-index:2 +.fff.section { + background: #fff; + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15); + position: relative; + z-index: 2; } -.ji-dated-list>.post>.body>.teaser { +.ji-dated-list > .post > .body > .teaser { text-decoration: none; - color: #333 + color: #333; } -.ji-dated-list>.post>.body>.card { +.ji-dated-list > .post > .body > .card { position: absolute; left: 0rem; top: 1.25rem; } -.ji-dated-list>.post>.attrs { +.ji-dated-list > .post > .attrs { text-align: left; - padding-top: 0 + padding-top: 0; } -.ji-dated-list>.post>.attrs .author { +.ji-dated-list > .post > .attrs .author { font-size: 125%; - margin: 0 0 .25rem; - display: inline-block + margin: 0 0 0.25rem; + display: inline-block; } -.ji-dated-list>.post>.attrs>.tags>li>a { +.ji-dated-list > .post > .attrs > .tags > li > a { display: block; - padding: 0 .25rem; - border: .1rem solid + padding: 0 0.25rem; + border: 0.1rem solid; } .ji-item-list .card { - border: .1rem solid; + border: 0.1rem solid; text-align: center; width: 4rem; } -.date.card>.month { +.date.card > .month { background: #999; - color: #fff + color: #fff; } -.date.card>.day { +.date.card > .day { font-weight: 600; font-size: 150%; - line-height: 3rem + line-height: 3rem; } .ji-item-list .post { - margin: .5rem 0 1.5rem + margin: 0.5rem 0 1.5rem; } -.events>h5, .blog-posts>h4 { +.events > h5, +.blog-posts > h4 { min-height: 2rem; margin: 0 0 1rem; - border-bottom: 1px solid #ccc + border-bottom: 1px solid #ccc; } .events .event .title { font-size: 1rem; margin: 0; - display: block + display: block; } .events .event .teaser { - font-size: .85rem; + font-size: 0.85rem; line-height: 1.1rem; } @@ -634,7 +635,7 @@ body .ji-dated-list>.post { } .event .teaser.collapsed::before { - content: ""; + content: ''; position: absolute; bottom: 0; left: 0; @@ -645,74 +646,74 @@ body .ji-dated-list>.post { } .docker-plugins-list { - margin-top: 3rem + margin-top: 3rem; } -.ji-item-list.plugins>.post .body { - padding: .75rem 0 0 2.5rem +.ji-item-list.plugins > .post .body { + padding: 0.75rem 0 0 2.5rem; } -.ji-item-list.plugins>.post .body p { - margin: 0 +.ji-item-list.plugins > .post .body p { + margin: 0; } -.ji-item-list.plugins>.post .body>.title { - margin-top: 0 +.ji-item-list.plugins > .post .body > .title { + margin-top: 0; } -.ji-item-list.plugins>.post>.attrs { +.ji-item-list.plugins > .post > .attrs { font-size: 80%; - text-align: right + text-align: right; } -.ji-item-list.plugins>.post>.body>.card { - top: .75rem +.ji-item-list.plugins > .post > .body > .card { + top: 0.75rem; } .card.icon { line-height: 2rem; - padding: 0 .25rem; + padding: 0 0.25rem; vertical-align: middle; - display: inline + display: inline; } .card.icon div { - display: inline + display: inline; } -.ji-dated-list>.post>.article { +.ji-dated-list > .post > .article { text-decoration: none; } -.ji-dated-list>.post>.article>.title { - margin: .5rem 0 .125rem +.ji-dated-list > .post > .article > .title { + margin: 0.5rem 0 0.125rem; } -.ji-dated-list>.post>.article>.url { +.ji-dated-list > .post > .article > .url { color: var(--color--secondary); - font-size: 75% + font-size: 75%; } .doc-block { - margin: 2rem 0 6rem + margin: 2rem 0 6rem; } .sub-block { - margin: 3rem 0 3rem + margin: 3rem 0 3rem; } .active-section { - margin-bottom: 1rem + margin-bottom: 1rem; } .toc li a { display: block; - padding: .5rem 0; - line-height: 1.2em + padding: 0.5rem 0; + line-height: 1.2em; } .toc .active-section li a { - padding: .125rem 0 + padding: 0.125rem 0; } .cal { @@ -720,57 +721,57 @@ body .ji-dated-list>.post { margin-bottom: 2rem; } -.cal>.row { +.cal > .row { margin: 0; - border-bottom: 1px solid rgba(0, 0, 0, .2) + border-bottom: 1px solid rgba(0, 0, 0, 0.2); } -.cal>.days { +.cal > .days { text-align: center; border-bottom: 1px solid #999; - background: rgba(0, 0, 0, .15); - box-shadow: inset 0 3px 3px -3px rgba(0, 0, 0, .3) + background: rgba(0, 0, 0, 0.15); + box-shadow: inset 0 3px 3px -3px rgba(0, 0, 0, 0.3); } -.cal>.days>.col-md-2 { +.cal > .days > .col-md-2 { height: auto; line-height: 2em; - position: relative + position: relative; } -.cal>.row>.col-md-2.weekend { - background: rgba(0, 0, 0, .1); +.cal > .row > .col-md-2.weekend { + background: rgba(0, 0, 0, 0.1); border: none; - box-shadow: inset 3px 0 3px -3px rgba(0, 0, 0, .2) + box-shadow: inset 3px 0 3px -3px rgba(0, 0, 0, 0.2); } .cal .col-md-2 { height: 5.5rem; - border-right: 1px solid rgba(0, 0, 0, .1) + border-right: 1px solid rgba(0, 0, 0, 0.1); } .cal a.apt { position: absolute; line-height: 1.2em; - background: rgba(100, 255, 255, .5); - box-shadow: inset 0 0 0 1px rgba(0, 100, 100, .5); + background: rgba(100, 255, 255, 0.5); + box-shadow: inset 0 0 0 1px rgba(0, 100, 100, 0.5); left: 0; font-size: 75%; - padding: .125rem .5rem; - display: block + padding: 0.125rem 0.5rem; + display: block; } .cal a.apt.span-4 { width: 400%; - margin: 1px + margin: 1px; } .cal a.apt.span-1 { - width: 100% + width: 100%; } .segment { - padding-top:3rem; + padding-top: 3rem; } .cols-3 { @@ -786,87 +787,105 @@ body .ji-dated-list>.post { } ion-icon { - pointer-events: none; + pointer-events: none; } -.features.uniform-height>div { - padding-left: 0 +.features.uniform-height > div { + padding-left: 0; } -.uniform-height .box { - padding: .67rem .75rem 0 4rem; - position: relative; - border-radius: 5px; - min-height: 10rem; +.uniform-height .box { + padding: 0.67rem 0.75rem 0 4rem; + position: relative; + border-radius: 5px; + min-height: 10rem; } .uniform-height ion-icon { - content: ' '; - display: block; - position: absolute; - left: 0rem; - top: .75rem; - width: 2.25rem; - height: 2.25rem; - padding: .5rem; - line-height: 3.25rem; - background: #168bb9; - border-radius: 50%; - text-align: center; - color: #fff; - font-size: 1.75rem; -} - -.uniform-height .box>p { + content: ' '; + display: block; + position: absolute; + left: 0rem; + top: 0.75rem; + width: 2.25rem; + height: 2.25rem; + padding: 0.5rem; + line-height: 3.25rem; + background: #168bb9; + border-radius: 50%; + text-align: center; + color: #fff; + font-size: 1.75rem; +} + +.uniform-height .box > p { line-height: 1.5em; - font-size: .8rem; - overflow: hidden + font-size: 0.8rem; + overflow: hidden; } -.uniform-height .box>h5 { +.uniform-height .box > h5 { line-height: 1.3em; font-size: 1.1rem; - margin-bottom: .33rem; + margin-bottom: 0.33rem; } -@media ( max-width : 768px) { - html, body { +@media (max-width: 768px) { + html, + body { max-width: 100%; overflow-x: hidden; } .segment { - padding-top: 1rem + padding-top: 1rem; } - .uniform-height .box { + .uniform-height .box { min-height: 4rem; - padding-bottom: .5rem; - margin-bottom: .5rem; + padding-bottom: 0.5rem; + margin-bottom: 0.5rem; } } -@media ( min-width : 992px ) and ( max-width : 1200px ) { - .uniform-height .box { +@media (min-width: 992px) and (max-width: 1200px) { + .uniform-height .box { min-height: 12rem; } } .jumbotron.plugins { -/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#81b0c4+0,335061+100 */ -background: #81b0c4; /* Old browsers */ -background: -moz-linear-gradient(left, #81b0c4 0%, #335061 100%); /* FF3.6-15 */ -background: -webkit-linear-gradient(left, #81b0c4 0%,#335061 100%); /* Chrome10-25,Safari5.1-6 */ -background: linear-gradient(to right, #81b0c4 0%,#335061 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ -filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#81b0c4', endColorstr='#335061',GradientType=1 ); /* IE6-9 */ - border-radius:0; - color:#fff} -.overview {padding-top:1.5rem} -.overview p {font-size:1.1rem} + /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#81b0c4+0,335061+100 */ + background: #81b0c4; /* Old browsers */ + background: -moz-linear-gradient( + left, + #81b0c4 0%, + #335061 100% + ); /* FF3.6-15 */ + background: -webkit-linear-gradient( + left, + #81b0c4 0%, + #335061 100% + ); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient( + to right, + #81b0c4 0%, + #335061 100% + ); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#81b0c4', endColorstr='#335061',GradientType=1 ); /* IE6-9 */ + border-radius: 0; + color: #fff; +} +.overview { + padding-top: 1.5rem; +} +.overview p { + font-size: 1.1rem; +} nav .nav-item { - cursor:pointer; + cursor: pointer; } nav .nav-item.active { - box-shadow:inset #D33833 0 -2px; + box-shadow: inset #d33833 0 -2px; } #toc-blog { @@ -879,142 +898,219 @@ nav .nav-item.active { } .section.blogs .content { - padding-top: .5rem + padding-top: 0.5rem; } .quoteblock { - padding-bottom: 1rem; + padding-bottom: 1rem; } blockquote { - padding: 1rem 1rem 1rem 2rem; - border-left: 5px solid #ddd; - margin: 1rem 0 2rem; - font-style: italic; + padding: 1rem 1rem 1rem 2rem; + border-left: 5px solid #ddd; + margin: 1rem 0 2rem; + font-style: italic; } .quoteblock blockquote { - background-color: color-mix(in srgb, var(--color) 5%, transparent); - border-radius: 10px; - padding: 1rem 1rem 1rem 3rem; - margin: 1rem 0 0 0; - position: relative; + background-color: color-mix(in srgb, var(--color) 5%, transparent); + border-radius: 10px; + padding: 1rem 1rem 1rem 3rem; + margin: 1rem 0 0 0; + position: relative; } .quoteblock .attribution { - margin-left: 1.5rem; - font-style: italic; + margin-left: 1.5rem; + font-style: italic; } .quoteblock blockquote:before { - content: '\201C'; - font-size: 4rem; - color: #ddd; - display: block; - position: absolute; - left: 0rem; - top: .5rem; - width: 3rem; - text-align: center; - line-height: 1em; + content: '\201C'; + font-size: 4rem; + color: #ddd; + display: block; + position: absolute; + left: 0rem; + top: 0.5rem; + width: 3rem; + text-align: center; + line-height: 1em; } .toc { - margin-bottom: 1rem; - background-color: color-mix(in srgb, var(--color) 2.5%, transparent); - border: 1px solid color-mix(in srgb, var(--color) 1%, transparent); - border-radius: 10px; - float: right; - width: 20rem; - margin-left: 15px; - padding: 10px 15px; - clear: right; + margin-bottom: 1rem; + background-color: color-mix(in srgb, var(--color) 2.5%, transparent); + border: 1px solid color-mix(in srgb, var(--color) 1%, transparent); + border-radius: 10px; + float: right; + width: 20rem; + margin-left: 15px; + padding: 10px 15px; + clear: right; } .toc li li { - padding-left: 1rem; + padding-left: 1rem; } -.toc ul, .toc li, .toc li > a { - display: block; - font-size: 0.9rem; - line-height: 1.35rem; - padding: 0px; - margin: 0px; - list-style: none; +.toc ul, +.toc li, +.toc li > a { + display: block; + font-size: 0.9rem; + line-height: 1.35rem; + padding: 0px; + margin: 0px; + list-style: none; } .toc ul.root > li > a { - font-size: 0.85rem; - color: rgb(153, 17, 17); -} -.container.blog-post #sidebar -{ - position: fixed; - right: 0; - top: 0; - bottom: 0; - padding-top: 5rem; - overflow-y: auto; - background: #f9f9f9; - border-left: 1px solid #ccc; - box-shadow: inset 10px 0 10px -15px; + font-size: 0.85rem; + color: rgb(153, 17, 17); } -.container.blog-post -{ - flex:1; +.container.blog-post #sidebar { + position: fixed; + right: 0; + top: 0; + bottom: 0; + padding-top: 5rem; + overflow-y: auto; + background: #f9f9f9; + border-left: 1px solid #ccc; + box-shadow: inset 10px 0 10px -15px; } -.vertical.events .ji-item-list>.event { - display:block; +.container.blog-post { + flex: 1; } -.container.blog-post .events .ji-item-list{ - white-space:normal; - border:none; +.vertical.events .ji-item-list > .event { + display: block; } -.container.blog-post .time .date-time{ -font-size: .75rem; - position: absolute; - left: 1rem; +.container.blog-post .events .ji-item-list { + white-space: normal; + border: none; +} +.container.blog-post .time .date-time { + font-size: 0.75rem; + position: absolute; + left: 1rem; } -.container.blog-post .events .ji-item-list>.event>a { -text-align: left; - padding: .25rem 0 .25rem 5.5rem; - width: auto; - margin: .25rem 1rem .25rem .25rem; +.container.blog-post .events .ji-item-list > .event > a { + text-align: left; + padding: 0.25rem 0 0.25rem 5.5rem; + width: auto; + margin: 0.25rem 1rem 0.25rem 0.25rem; } - /* override carousel.scss's text-shadowing which is bad and it should feel bad */ .carousel-caption { text-shadow: none; } -.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} -table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0} -.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color: var(--color--secondary)} -table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit} -.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%; margin: 10px;} -.admonitionblock>table td.icon{text-align:center;width:80px} -.admonitionblock>table td.icon img{max-width:none} -.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} -.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color: var(--color--secondary)} -.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} -span.icon>.fa{cursor:default} -.admonitionblock td.icon [class^="fa icon-"],.admonitionblock ion-icon{font-size:2.5em;cursor:default} -.admonitionblock td.icon .icon-note:before{content:"\f05a";color:var(--blue)} -.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} -.admonitionblock td.icon .icon-warning:before{content:"\f071";color:var(--orange)} -.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400} -.admonitionblock td.icon .icon-important:before{content:"\f06a";color:var(--red)} -.admonitionblock ion-icon.important{color:var(--red)} +.admonitionblock td.content > .title, +.audioblock > .title, +.exampleblock > .title, +.imageblock > .title, +.listingblock > .title, +.literalblock > .title, +.stemblock > .title, +.openblock > .title, +.paragraph > .title, +.quoteblock > .title, +table.tableblock > .title, +.verseblock > .title, +.videoblock > .title, +.dlist > .title, +.olist > .title, +.ulist > .title, +.qlist > .title, +.hdlist > .title { + text-rendering: optimizeLegibility; + text-align: left; + font-family: 'Noto Serif', 'DejaVu Serif', serif; + font-size: 1rem; + font-style: italic; +} +table.tableblock > caption.title { + white-space: nowrap; + overflow: visible; + max-width: 0; +} +.paragraph.lead > p, +#preamble > .sectionbody > .paragraph:first-of-type p { + color: var(--color--secondary); +} +table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { + font-size: inherit; +} +.admonitionblock > table { + border-collapse: separate; + border: 0; + background: none; + width: 100%; + margin: 10px; +} +.admonitionblock > table td.icon { + text-align: center; + width: 80px; +} +.admonitionblock > table td.icon img { + max-width: none; +} +.admonitionblock > table td.icon .title { + font-weight: bold; + font-family: 'Open Sans', 'DejaVu Sans', sans-serif; + text-transform: uppercase; +} +.admonitionblock > table td.content { + padding-left: 1.125em; + padding-right: 1.25em; + border-left: 1px solid #ddddd8; + color: var(--color--secondary); +} +.admonitionblock > table td.content > :last-child > :last-child { + margin-bottom: 0; +} +span.icon > .fa { + cursor: default; +} +.admonitionblock td.icon [class^='fa icon-'], +.admonitionblock ion-icon { + font-size: 2.5em; + cursor: default; +} +.admonitionblock td.icon .icon-note:before { + content: '\f05a'; + color: var(--blue); +} +.admonitionblock td.icon .icon-tip:before { + content: '\f0eb'; + text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); + color: #111; +} +.admonitionblock td.icon .icon-warning:before { + content: '\f071'; + color: var(--orange); +} +.admonitionblock td.icon .icon-caution:before { + content: '\f06d'; + color: #bf3400; +} +.admonitionblock td.icon .icon-important:before { + content: '\f06a'; + color: var(--red); +} +.admonitionblock ion-icon.important { + color: var(--red); +} .fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - /* font-family is needed to override some settings in font-icons.css */ - font-family: FontAwesome !important; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + /* font-family is needed to override some settings in font-icons.css */ + font-family: FontAwesome !important; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .paragraph.boxshadow img { @@ -1024,31 +1120,32 @@ span.icon>.fa{cursor:default} box-shadow: 0 0 15px 0px rgba(0, 0, 0, 0.5); } -.div-mar{ +.div-mar { margin-right: 2rem; - border-top:solid 2px white; + border-top: solid 2px white; } -.div-mar,.area{ +.div-mar, +.area { padding: 1rem 0; } -.links{ +.links { padding: 0; } -.footer-left{ +.footer-left { padding-left: 0; } -@media screen and (max-width: 991px){ - .footer-left{ +@media screen and (max-width: 991px) { + .footer-left { margin-top: 1rem; } } /* keep our bulleted lists tight */ -li>p { +li > p { padding: 0; margin: 0; } @@ -1056,34 +1153,40 @@ li>p { /* when centering images in asciidoc, let's make sure they resize to their * container properly */ -.image.center>img { - max-width: 100%; - max-height: 100%; +.image.center > img { + max-width: 100%; + max-height: 100%; } -.skip, .current-page, .next-link, .previous-link { +.skip, +.current-page, +.next-link, +.previous-link { position: relative; float: left; padding: 0.5rem 0.75rem; margin-left: -1px; line-height: 1.5; - color: #0275D8; + color: #0275d8; text-decoration: none; - background-color: #FFF; - border: 1px solid #DDD; + background-color: #fff; + border: 1px solid #ddd; } -.next-link:focus, .next-link:hover, .previous-link:focus, .previous-link:hover { - color: #014C8C; - background-color: #ECEEEF; - border-color: #DDD; +.next-link:focus, +.next-link:hover, +.previous-link:focus, +.previous-link:hover { + color: #014c8c; + background-color: #eceeef; + border-color: #ddd; text-decoration: underline; } .current-page { - color: #014C8C; - background-color: #ECEEEF; - border-color: #DDD; + color: #014c8c; + background-color: #eceeef; + border-color: #ddd; } li.card.step { @@ -1097,17 +1200,49 @@ li.card.step { /* Ensure that source code block numbering looks pretty (e.g. :https://asciidoctor.org/docs/user-manual/#source-code-blocks) */ -.conum[data-value]{display:inline-block;color: var(--background)!important;background-color:color-mix(in srgb, var(--color) 80%, transparent);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} -.conum[data-value] *{color:#fff!important} -.conum[data-value]+b{display:none} -.conum[data-value]:after{content:attr(data-value)} -pre .conum[data-value]{position:relative;top:-.125em} -b.conum *{color:inherit!important} -.conum:not([data-value]):empty{display:none} -.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1} -.colist>table tr>td:last-of-type{padding:.25em 0} +.conum[data-value] { + display: inline-block; + color: var(--background) !important; + background-color: color-mix(in srgb, var(--color) 80%, transparent); + -webkit-border-radius: 100px; + border-radius: 100px; + text-align: center; + font-size: 0.75em; + width: 1.67em; + height: 1.67em; + line-height: 1.67em; + font-family: 'Open Sans', 'DejaVu Sans', sans-serif; + font-style: normal; + font-weight: bold; +} +.conum[data-value] * { + color: #fff !important; +} +.conum[data-value] + b { + display: none; +} +.conum[data-value]:after { + content: attr(data-value); +} +pre .conum[data-value] { + position: relative; + top: -0.125em; +} +b.conum * { + color: inherit !important; +} +.conum:not([data-value]):empty { + display: none; +} +.colist > table tr > td:first-of-type { + padding: 0 0.75em; + line-height: 1; +} +.colist > table tr > td:last-of-type { + padding: 0.25em 0; +} table { - margin-bottom: 1.25rem; + margin-bottom: 1.25rem; } /* Making the sidebar scroll independently */ @@ -1119,7 +1254,7 @@ table { margin-bottom: 1rem; } -@supports ((position:-webkit-sticky) or (position:sticky)) { +@supports ((position: -webkit-sticky) or (position: sticky)) { #sidebar-content { position: -webkit-sticky; position: sticky; @@ -1144,62 +1279,59 @@ table { /** docbook section navigation **/ .doc-page-link { - margin-left: auto; - margin-right: auto; - text-align: center; - display: block; + margin-left: auto; + margin-right: auto; + text-align: center; + display: block; } - .pipeline-block { - margin-bottom: 1rem; + margin-bottom: 1rem; } .pipeline-script-expand { - font-size: 0.7rem; + font-size: 0.7rem; } - /** Role to be used in asciidoc for visually distinguishing Scripted Pipeline * sections of documentation **/ .scripted-pipeline { - border-left: 2px solid #ddd; - border-top: 1px solid #ddd; - padding: 5px; + border-left: 2px solid #ddd; + border-top: 1px solid #ddd; + padding: 5px; } /** Some specific styles for styling Pipeline syntax reference pages **/ .syntax h2 { - border-bottom: 3px solid #ddd; + border-bottom: 3px solid #ddd; } .syntax h3 { - border-bottom: 2px solid #ddd; + border-bottom: 2px solid #ddd; } .syntax h4 { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #ddd; } table.syntax { - --border-color: color-mix(in srgb, var(--color--secondary) 10%, transparent); - font-size: 0.8rem; - margin: 1rem; - border: 1px solid var(--border-color); + --border-color: color-mix(in srgb, var(--color--secondary) 10%, transparent); + font-size: 0.8rem; + margin: 1rem; + border: 1px solid var(--border-color); } table.syntax p { - padding: 5px; - margin: 0; + padding: 5px; + margin: 0; } table.syntax > tbody > tr > td { - border: 1px solid var(--border-color); + border: 1px solid var(--border-color); } table.syntax > tbody > tr > th { - background-color: var(--border-color); - border: 1px solid var(--border-color); - font-weight: bold; + background-color: var(--border-color); + border: 1px solid var(--border-color); + font-weight: bold; } - /** documentation side-bar navigation styling **/ .tour .active { font-weight: bold; @@ -1247,15 +1379,20 @@ table.syntax > tbody > tr > th { -o-transform: skewY(-14deg); transform: skewY(-14deg); -webkit-backface-visibility: hidden; - backface-visibility: initial; } - @media (min-width: 767px) { - .header .skew:before { - top: -350px; - height: 900px; } } - @media (min-width: 992px) { - .header .skew:before { - top: -350px; - height: 1020px; } } + backface-visibility: initial; +} +@media (min-width: 767px) { + .header .skew:before { + top: -350px; + height: 900px; + } +} +@media (min-width: 992px) { + .header .skew:before { + top: -350px; + height: 1020px; + } +} .jumbotron { position: relative; @@ -1264,7 +1401,7 @@ table.syntax > tbody > tr > th { .jumbotron::before { position: absolute; - content: ""; + content: ''; inset: 0; background: currentColor; opacity: 0.05; @@ -1282,23 +1419,23 @@ table.syntax > tbody > tr > th { justify-content: center; flex-direction: column; gap: 1rem; - border: .1rem solid #ccc; + border: 0.1rem solid #ccc; font-size: 1rem; font-weight: 600; height: 16.5rem; width: 13rem; box-sizing: border-box; - padding: .67rem; + padding: 0.67rem; color: #666; text-decoration: none !important; background: #fff; border-radius: 3px; - margin: .25rem; + margin: 0.25rem; text-align: center; cursor: pointer; } -.author-card .author.logo{ +.author-card .author.logo { display: block; } @@ -1331,7 +1468,7 @@ table.syntax > tbody > tr > th { .grid-container .card { border: 1px solid #d3d3d3; - border-radius: .25rem; + border-radius: 0.25rem; } .grid-container .card .content { @@ -1339,13 +1476,15 @@ table.syntax > tbody > tr > th { } /* add border to tables */ -.grid-all, .grid-all th, .grid-all td { +.grid-all, +.grid-all th, +.grid-all td { border: 1px solid color-mix(in srgb, var(--color) 10%, transparent); - padding: .75rem; + padding: 0.75rem; } .grid-all thead th { - border-bottom-width: 2px; + border-bottom-width: 2px; } .nav-item.searchbox { @@ -1356,7 +1495,7 @@ table.syntax > tbody > tr > th { /* Styling NavBar Burger Menu's Search and Download Area - For better UI/UX in mobile resolutions. */ -@media (max-width : 991px) { +@media (max-width: 991px) { .navbar { max-height: 70vh; overflow-y: auto; @@ -1369,7 +1508,7 @@ table.syntax > tbody > tr > th { margin-left: 0; } - .nav-item.searchbox input.form-control.searchbox{ + .nav-item.searchbox input.form-control.searchbox { width: 100%; } @@ -1386,7 +1525,7 @@ table.syntax > tbody > tr > th { } ion-icon.report { - color: #FFA91B; + color: #ffa91b; width: 22px; height: 22px; vertical-align: middle; @@ -1398,11 +1537,11 @@ ion-icon.report { margin-right: 5px; } -.app-avatar-image{ +.app-avatar-image { min-width: 64px; - width: 25vw; - max-width: 128px; + width: 25vw; + max-width: 128px; min-height: 64px; height: 25vw; - max-height: 128px + max-height: 128px; } diff --git a/content/doc/book/installing/offline.adoc b/content/doc/book/installing/offline.adoc index 8f67d62f1c39..65d950438896 100644 --- a/content/doc/book/installing/offline.adoc +++ b/content/doc/book/installing/offline.adoc @@ -28,7 +28,7 @@ Offline plugin installations require additional effort due to dependency require The link:https://github.com/jenkinsci/plugin-installation-manager-tool[Plugin Installation Manager Tool] is the recommended tool for offline plugin installation. It downloads user specified plugins and all dependencies of the user specified plugins. The link:https://github.com/jenkinsci/plugin-installation-manager-tool[Plugin Installation Manager Tool] also reports available plugin updates and plugin security warnings. -It is included in the official link:https://github.com/jenkinsci/docker/blob/master/README.md#plugin-installation-manager-cli-preview[Jenkins Docker images]. +It is included in the official link:https://github.com/jenkinsci/docker/blob/master/README.md#preinstalling-plugins[Jenkins Docker images]. It is also used to install plugins as part of the link:/doc/book/installing/docker/[Docker install instructions]. Refer to the link:https://app.gitter.im/#/room/#jenkinsci_plugin-installation-manager-cli-tool:gitter.im[Gitter chat channel] for questions and answers diff --git a/content/doc/book/installing/windows.adoc b/content/doc/book/installing/windows.adoc index 85e8faea8cc9..251304f91af6 100644 --- a/content/doc/book/installing/windows.adoc +++ b/content/doc/book/installing/windows.adoc @@ -58,7 +58,9 @@ click on *Test Credentials* to test your domain credentials and click on *Next*. image:tutorials/windows-jenkins-logon-credentials.png[alt="Jenkins Service Logon Credentials",width=80%] -NOTE: If you get *Invalid Logon* Error pop-up while trying to test your credentials, +NOTE: The user account running Jenkins requires the `LogonAsService` permission to run Jenkins +as a service. +If you get *Invalid Logon* Error pop-up while trying to test your credentials, follow the steps explained <> to resolve it. Step 4: Port selection:: @@ -268,9 +270,9 @@ When installing a service to run under a domain user account, the account must h Perform the following steps below to edit the Local Security Policy of the computer you want to define the ‘logon as a service’ permission: . Logon to the computer with administrative privileges. -. Open the *Administrative Tools* and open the *Local Security Policy* +. Open the *Administrative Tools* and open the *Local Security Policy* or typing `secpol.msc` in the Run dialog (Win + R) and pressing Enter. . If the *Local Security Policy* is missing in your system, refer to the answer in the https://answers.microsoft.com/en-us/windows/forum/all/where-to-download-gpeditmsc-for-windows-10-home/c39bd656-8d4a-4374-be39-394c09deec4e[Where to download GPEdit.msc for Windows 10 Home?] question on Microsoft Community to troubleshoot -. Expand *Local Policy* and click on *User Rights Assignment* +. In the *Local Security Policy* window, Expand *Local Policy* and click on *User Rights Assignment* . In the right pane, right-click *Log on as a service* and select properties. . Click on the *Add User or Group…* button to add the new user. . In the *Select Users or Groups* dialogue, find the user you wish to enter and click *OK* diff --git a/content/doc/book/pipeline/development.adoc b/content/doc/book/pipeline/development.adoc index 2d875d395fb4..7ab628ccd46c 100644 --- a/content/doc/book/pipeline/development.adoc +++ b/content/doc/book/pipeline/development.adoc @@ -144,17 +144,17 @@ To use the "Replay" feature: . Select a previously completed run in the build history. + -image::pipeline/replay-previous-run.png[Previous Pipeline Run] +image::pipeline/replay-previous-run.png[alt = "Build history section of a Jenkins Pipeline showing all the previously executed builds. The history includes: Build #2 and Build #3, which ran successfully; Build #4 and Build #5, which failed; and Build #6, which ran successfully. Click on the latest successful build, which is Build #6 in this case."] + -. Click "Replay" in the left menu +. Click "Replay" in the left menu. + -image::pipeline/replay-left-bar.png[Replay Left-menu Button] +image::pipeline/replay-left-bar.png[alt = "Jenkins Classic UI sidebar for 'example-pipeline' build #6 showing options: Status, Changes, Console Output, Edit Build Information, Delete Build #6, Timings, Pipeline Overview, Pipeline Console, Restart from Stage, Replay, Pipeline Steps, Workspaces, and Previous Build."] + . Make modifications and click "Run". In this example, we changed "ruby-2.3" to "ruby-2.4". + -image::pipeline/replay-modified.png[Replay Left-menu Button] +image::pipeline/replay-modified.png[alt = "The replay section of the Jenkins 'example-pipeline' for build #6 displays the pipeline script, where the Ruby version has been changed from 2.3 to 2.4. A 'Pipeline Syntax' option and a blue 'Run' button is shown below the script."] + -. Check the results of changes +. Check the results of changes. Once you are satisfied with the changes, you can use Replay to view them again, copy them back to your Pipeline job diff --git a/content/doc/book/pipeline/docker.adoc b/content/doc/book/pipeline/docker.adoc index 7f99d5c74284..90ca1bf76ae7 100644 --- a/content/doc/book/pipeline/docker.adoc +++ b/content/doc/book/pipeline/docker.adoc @@ -32,12 +32,12 @@ Any tool that can be link:https://hub.docker.com[packaged in a Docker container] // Declarative // pipeline { agent { - docker { image 'node:20.18.0-alpine3.20' } + docker { image 'node:22.11.0-alpine3.20' } } stages { stage('Test') { steps { - sh 'node --version' + sh 'node --eval "console.log(process.platform,process.env.CI)"' } } } @@ -45,9 +45,9 @@ pipeline { // Script // node { /* Requires the Docker Pipeline plugin to be installed */ - docker.image('node:20.18.0-alpine3.20').inside { + docker.image('node:22.11.0-alpine3.20').inside { stage('Test') { - sh 'node --version' + sh 'node --eval "console.log(process.platform,process.env.CI)"' } } } @@ -61,8 +61,8 @@ When the Pipeline executes, Jenkins will automatically start the specified conta [Pipeline] { (Test) [Pipeline] sh [guided-tour] Running shell script -+ node --version -v16.13.1 ++ node --eval 'console.log(process.platform,process.env.CI)' +linux true [Pipeline] } [Pipeline] // stage [Pipeline] } @@ -173,7 +173,7 @@ pipeline { } stage('Front-end') { agent { - docker { image 'node:20.18.0-alpine3.20' } + docker { image 'node:22.11.0-alpine3.20' } } steps { sh 'node --version' @@ -192,7 +192,7 @@ node { } stage('Front-end') { - docker.image('node:20.18.0-alpine3.20').inside { + docker.image('node:22.11.0-alpine3.20').inside { sh 'node --version' } } @@ -210,7 +210,7 @@ Reusing an example from above, with a more custom `Dockerfile`: .Dockerfile [source] ---- -FROM node:20.18.0-alpine3.20 +FROM node:22.11.0-alpine3.20 RUN apk add -U subversion ---- @@ -245,9 +245,9 @@ video::Pi2kJ2RJS50[youtube, width=852, height=480] By default, Pipeline assumes that _any_ configured link:../../glossary/#agent[agent] is capable of running Docker-based Pipelines. For Jenkins environments that have macOS, Windows, or other agents that are unable to run the Docker daemon, this default setting may be problematic. -Pipeline provides a global option on the *Manage Jenkins* page and on the link:../../glossary/#folder[Folder] level, for specifying which agents (by link:../../glossary/#label[Label]) to use for running Docker-based Pipelines. +Pipeline provides a global option on the *Manage Jenkins* page and on the link:../../glossary/#folder[Folder] level, for specifying which agents (by link:../../glossary/#label[Label]) to use for running Docker-based Pipelines. To enable this option for Docker labels, the plugin:docker-workflow[*Docker Pipeline*] plugin must be installed. -image::pipeline/configure-docker-label.png[Configuring the Pipeline Docker Label] +image::pipeline/configure-docker-label.png[alt = "Navigate from Dashboard to Manage Jenkins then to System. In the 'Declarative Pipeline (Docker)' section set the Docker label, Docker Registry URL and Registry Credentials."] === Path setup for mac OS users diff --git a/content/doc/book/pipeline/getting-started.adoc b/content/doc/book/pipeline/getting-started.adoc index 91e9cda31384..e3dd532f5738 100644 --- a/content/doc/book/pipeline/getting-started.adoc +++ b/content/doc/book/pipeline/getting-started.adoc @@ -108,7 +108,8 @@ To create a basic Pipeline through the Jenkins classic UI: click *New Item* at the top left. + [.boxshadow] -image:pipeline/classic-ui-left-column.png[alt="Classic UI left column",width=30%] +image:pipeline/classic-ui-left-column.png[alt = "Jenkins Classic UI left column showing options: New Item, Build History, Project Relationship, Check File Fingerprint, Manage Jenkins and My Views.",width=35%] + . In the *Enter an item name* field, specify the name for your new Pipeline project. + *Caution:* Jenkins uses this item name to create directories on disk. It is @@ -118,8 +119,9 @@ image:pipeline/classic-ui-left-column.png[alt="Classic UI left column",width=30% open the Pipeline configuration page (whose *General* tab is selected). + [.boxshadow] -image:pipeline/new-item-creation.png[alt="Enter a name, click *Pipeline* and then click *OK*",width=100%] -. Click the *Pipeline* tab at the top of the page to scroll down to the +image:pipeline/new-item-creation.png[alt = "Jenkins New Item page with item name as 'example-pipeline' and 'Pipeline' option selected from the options for item type given as follows: Freestyle project, Pipeline, Multi-configuration project, Folder, Multibranch Pipeline and Organization Folder.",width=100%] + +. Click the *Pipeline* tab in the side panel of the page to scroll down to the *Pipeline* section. + *Note:* If instead you are defining your `Jenkinsfile` in source control, follow the instructions in link:#defining-a-pipeline-in-scm[In SCM] below. @@ -157,7 +159,7 @@ agent/node in the Jenkins environment) and workspace for the entire Pipeline. <3> `node` effectively does the same as `agent` (above). + [.boxshadow] -image:pipeline/example-pipeline-in-classic-ui.png[alt="Example Pipeline in the classic UI",width=100%] +image:pipeline/example-pipeline-in-classic-ui.png[alt = "Configure page of 'example-pipeline' with the Pipeline tab selected in the Jenkins Classic UI. The 'Hello World' script is written in the script section, and the 'Use Groovy Sandbox' option is checked.",width=100%] + *Note:* You can also select from canned _Scripted_ Pipeline examples from the *try sample Pipeline* option at the top right of the *Script* text area. Be @@ -167,14 +169,16 @@ field. . On this page, click *Build Now* on the left to run the Pipeline. + [.boxshadow] -image:pipeline/classic-ui-left-column-on-item.png[alt="Classic UI left column on an item",width=35%] +image:pipeline/classic-ui-left-column-on-item-build-now.png[alt = "Jenkins Classic UI sidebar for 'example-pipeline', showing options: Status, Changes, Build Now, Configure, Delete Pipeline, Full Stage View, Stages, Rename and Pipeline Syntax.",width=35%] + . Under *Build History* on the left, click *#1* to access the details for this particular Pipeline run. . Click *Console Output* to see the full output from the Pipeline run. The following output shows a successful run of your Pipeline. + [.boxshadow] -image:pipeline/hello-world-console-output.png[alt="*Console Output* for the Pipeline",width=70%] +image:pipeline/hello-world-console-output.png[alt = "Jenkins Classic UI for 'example-pipeline', showing the Console Output tab for build #1, executed by the admin user, with a successful finish status.",width=90%] + + *Notes:* @@ -186,7 +190,7 @@ image:pipeline/hello-world-console-output.png[alt="*Console Output* for the Pipe above, unlike ``Jenkinsfile``s you define through Blue Ocean (link:#through-blue-ocean[above]) or in source control (link:#defining-a-pipeline-in-scm[below]), ``Jenkinsfile``s entered into - the *Script* text area area of Pipeline projects are stored by Jenkins itself, + the *Script* text area of Pipeline projects are stored by Jenkins itself, within the Jenkins home directory. Therefore, for greater control and flexibility over your Pipeline, particularly for projects in source control that are likely to gain complexity, it is recommended that you use @@ -260,7 +264,7 @@ The same documentation is also linked as *Pipeline Syntax* in the side-bar for a configured Pipeline project. [.boxshadow] -image:pipeline/classic-ui-left-column-on-item.png[alt="Classic UI left column on an item",width=35%] +image:pipeline/classic-ui-left-column-on-item-pipeline-syntax.png[alt = "Jenkins Classic UI sidebar for 'example-pipeline', showing options: Status, Changes, Build Now, Configure, Delete Pipeline, Full Stage View, Stages, Rename and Pipeline Syntax.",width=35%] [[snippet-generator]] @@ -290,7 +294,7 @@ https://issues.jenkins.io/browse/JENKINS-40550 //// [.boxshadow] -image:pipeline/snippet-generator.png[alt="Snippet Generator",width=100%] +image:pipeline/snippet-generator.png[alt = "Jenkins Classic UI for 'example-pipeline', showing the Pipeline Syntax page with the Snippet Generator tab selected. The snippet generated for the stage named 'Deploy' is displayed in the script block.",width=100%] To access additional information and/or documentation about the step selected, click on the help icon (indicated by the red arrow in the image above). diff --git a/content/doc/book/pipeline/index.adoc b/content/doc/book/pipeline/index.adoc index 3ec62cda0782..a5a096b578d5 100644 --- a/content/doc/book/pipeline/index.adoc +++ b/content/doc/book/pipeline/index.adoc @@ -309,13 +309,13 @@ pipeline { // <1> } stage('Deploy') { steps { - sh 'make publish' // <7> + sh 'make publish' // } } } } // Script // -node { // <7> +node { // stage('Build') { // <3> sh 'make' // <5> } @@ -325,7 +325,7 @@ node { // <7> } if (currentBuild.currentResult == 'SUCCESS') { stage('Deploy') { - sh 'make publish' // <7> + sh 'make publish' // } } } @@ -348,8 +348,5 @@ plugin:workflow-durable-task-step[Pipeline: Nodes and Processes plugin]) that executes the given shell command. <6> `junit` is another Pipeline link:syntax#steps[step] (provided by the plugin:junit[JUnit plugin]) for aggregating test reports. -<7> `sh` is a Pipeline link:syntax#steps[step] (provided by the -plugin:workflow-durable-task-step[Pipeline: Nodes and Processes plugin]) that -executes the given shell command. Read more about Pipeline syntax on the link:syntax[Pipeline Syntax] page. diff --git a/content/doc/book/pipeline/jenkinsfile.adoc b/content/doc/book/pipeline/jenkinsfile.adoc index da9cfb2e8dde..4c21177eb947 100644 --- a/content/doc/book/pipeline/jenkinsfile.adoc +++ b/content/doc/book/pipeline/jenkinsfile.adoc @@ -98,7 +98,7 @@ link:http://groovy-lang.org[Groovy] syntax highlighting, create a new `Jenkinsfile` in the root directory of the project. -[role=declarative-pipeline] + The Declarative Pipeline example above contains the minimum necessary structure to implement a continuous delivery pipeline. The <>, which is required, instructs Jenkins to allocate an executor and @@ -111,8 +111,7 @@ The <>, and <> are also required for a valid Declarative Pipeline as they instruct Jenkins what to execute and in which stage it should be executed. -[role=scripted-pipeline] -==== + For more advanced usage with Scripted Pipeline, the example above `node` is a crucial first step as it allocates an executor and workspace for the Pipeline. In essence, without `node`, a Pipeline cannot do any work! From within `node`, @@ -121,6 +120,7 @@ project. Since the `Jenkinsfile` is being pulled directly from source control, Pipeline provides a quick and easy way to access the right revision of the source code +[role=scripted-pipeline] [pipeline] ---- // Script // @@ -133,7 +133,7 @@ node { <1> The `checkout` step will checkout code from source control; `scm` is a special variable which instructs the `checkout` step to clone the specific revision which triggered this Pipeline run. -==== + === Build @@ -291,7 +291,7 @@ Assuming everything has executed successfully in the example Jenkins Pipeline, each successful Pipeline run will have associated build artifacts archived, test results reported upon and the full console output all in Jenkins. -[role=scripted-pipeline] + A Scripted Pipeline can include conditional tests (shown above), loops, try/catch/finally blocks and even functions. The next section will cover this advanced Scripted Pipeline syntax in more detail. @@ -1137,8 +1137,7 @@ node { } ---- -[role=scripted-pipeline] -==== + Scripted Pipeline however relies on Groovy's built-in `try`/`catch`/`finally` semantics for handling failures during execution of the Pipeline. @@ -1150,7 +1149,6 @@ there has been a test failure or not. An alternative way of handling this, which preserves the early-exit behavior of failures in Pipeline, while still giving `junit` the chance to capture test reports, is to use a series of `try`/`finally` blocks: -==== === Using multiple agents diff --git a/content/doc/book/pipeline/multibranch.adoc b/content/doc/book/pipeline/multibranch.adoc index 5c2dcaa2d9da..62b9dd4780fc 100644 --- a/content/doc/book/pipeline/multibranch.adoc +++ b/content/doc/book/pipeline/multibranch.adoc @@ -35,7 +35,7 @@ To create a Multibranch Pipeline: * Click *New Item* on Jenkins home page. -image::pipeline/classic-ui-left-column.png[alt="Classic UI left column",width=30%] +image::pipeline/classic-ui-left-column.png[alt = "Jenkins Classic UI left column showing options: New Item, Build History, Project Relationship, Check File Fingerprint, Manage Jenkins and My Views.",width=35%] * Enter a name for your Pipeline, select *Multibranch Pipeline* and click *OK*. @@ -46,13 +46,15 @@ names which include spaces may uncover bugs in scripts which do not expect paths to contain spaces. ==== -image::pipeline/new-item-multibranch-creation.png["Enter a name, select *Multibranch Pipeline*, and click *OK*", role=center] +image::pipeline/new-item-multibranch-creation.png[alt = "Jenkins New Item page with item name as 'multibranch-example' and 'Multibranch Pipeline' option selected from the options for item type given as follows: Freestyle project, Pipeline, Multi-configuration project, Folder, Multi-branch Pipeline and Organization Folder.", role=center] -* Add a *Branch Source* (for example, Git) and enter the location of the - repository. +* Add a *Branch Source* (for example, Git). -image::pipeline/multibranch-branch-source.png["Add a Branch Source", role=center] -image::pipeline/multibranch-branch-source-configuration.png["Add the URL to the project repository", role=center] +image::pipeline/multibranch-branch-source.png[alt = "Configure page of 'multibranch-example' pipeline. In the 'Branch Sources' section 'Git' is selected from the 'Add Source' dropdown menu.", role=center, width=45%] + +* Enter the location of the Git Repository. + +image::pipeline/multibranch-branch-source-configuration.png[alt = "Configure page of 'multibranch-example' pipeline. Branch Source configuration section for 'Git' branch source option is opened with options to add project repository link, Credentials, Behaviors and Property Strategy.", role=center] * *Save* the Multibranch Pipeline project. @@ -66,7 +68,7 @@ additions or deletions (unless using an < GitHub Organization* or *New Item -> Bitbucket Team* and follow the configuration steps for each item, +To create an _Organization Folder_ in Jenkins, go to: *New Item -> Organization Folder* or *New Item -> Bitbucket Team* and follow the configuration steps for each item, making sure to specify appropriate _Scan Credentials_ and a specific *owner* for the GitHub Organization or Bitbucket Team name, respectively. Other options available are: @@ -185,16 +177,16 @@ If your organization requires these items remain available for a longer period o It may be useful to keep items in order to examine build results of a branch after it's been removed, for example. [role="image-border"] -image::orphaned-item-strategy.png[scaledwidth="75%"] +image::orphaned-item-strategy.png[alt = "Orphaned Item Strategy section in Jenkins configuration page for organization folder, showing the 'discard old items' option as checked, with fields for 'Days to keep old items' and 'Max # of old items to keep', both with empty input boxes. Checkbox to 'Abort builds' is unchecked.", scaledwidth="75%", width=80%] === Icon and View Strategy -You may also configure an icon to use for the folder display. +You can also configure a custom icon for folder display by installing the plugin:custom-folder-icon[*Custom Folder Icon*] plugin. For example, it might be useful to display an aggregate health of the child builds. Alternately, you might reference the same icon you use in your GitHub organization account. [role="image-border"] -image::folder-icon.png[scaledwidth="75%"] +image::folder-icon.png[alt = "Appearance section in Jenkins configuration page for organization folder, showing icon field with 'Custom Folder Icon' option selected. This section includes an option to choose an image file for the icon, along with an Apply button to save your changes.", scaledwidth="75%", width=80%] == Example @@ -203,36 +195,36 @@ To demonstrate using an Organization Folder to manage repositories, we'll use the fictitious organization: CloudBeers, Inc.. Go to *New Item*. -Enter 'cloudbeers' for the item name. -Select *GitHub Organization* and click *OK*. +Enter 'CloudBeersInc' for the item name. +Select *Organization Folder* and click *OK*. [role="image-border"] -image::screenshot1.png[scaledwidth="75%"] +image::organization-folder-creation.png[alt = "Jenkins New Item page with item name as 'CloudBeersInc' and 'Organization Folder' option selected from the options for item type given as follows: Freestyle project, Pipeline, Multi-configuration project, Folder, Multi-branch Pipeline and Organization Folder.", scaledwidth="75%"] Optionally, enter a better descriptive name for the _Description_, such as 'CloudBeers GitHub'. In the _Repository Sources_ section, complete the section for "GitHub Organization". -Make sure the *owner* matches the GitHub Organization name exactly, in our case it must be: _cloudbeers_. +Make sure the *owner* matches the GitHub Organization name exactly, in our case it must be: _CloudBeersInc_. This defaults to the same value that was entered for the item name in the first step. -Next, select or add new "Scan credentials" - we'll enter our GitHub username and access token as the password. +Next, select or add new *Credentials* - we'll enter our GitHub username and access token as the password. [role="image-border"] -image::screenshot2.png[scaledwidth="75%"] +image::github-configuration-for-organization-folder.png[alt = "Projects section in the Jenkins configuration page for a GitHub Organization repository source includes fields to specify the API endpoint, credentials, and repository owner, which is set to 'CloudBeersInc'. Additionally, there are options to enable avatar display and define behaviors such as discovering branches, pull requests from origin, and pull requests from forks. Each behavior has a strategy dropdown for specific configurations, along with options for setting trust levels for pull requests from forks.", scaledwidth="75%", width=80%] After saving, the "Folder Computation" will run to scan for eligible repositories, followed by multibranch builds. [role="image-border"] -image::screenshot3.png[scaledwidth="75%"] +image::organization-repositories-scan.png[alt = "Jenkins Build Queue and Build Executor Status view. The Build Queue section shows 'No builds in the queue'. The Build Executor Status section displays ongoing builds under the 'Built-In Node' with progress indicators. Three jobs are actively running: 'PR-demo repository (main branch) from the CloudBeersInc organization', 'community-docs repository (main branch) from the CloudBeersInc organization', and 'multibranch-demo repository (main branch) from the CloudBeersInc organization'. Each has a blue progress bar. Below, the 'docker-ssh-jenkins-agent' is listed as idle with a status of '1 Idle' at the bottom.", scaledwidth="75%"] Refresh the page after the job runs to ensure the view of repositories has been updated. [role="image-border"] -image::screenshot4.png[scaledwidth="75%"] +image::organization-folder-repositories.png[alt = "Jenkins dashboard view for the 'CloudBeersInc' organization. The status section shows the repository count as 'Repositories (3)' with a table listing three repositories: 'community-docs', 'multibranch-demo', and 'PR-demo'. Each repository entry includes columns labeled 'S' for status of last build, 'W' for weather status of recent aggregated builds, 'Name', and 'Description'. The 'multibranch-demo' repository contains a description stating, 'Simple demonstration of how to use multibranch pipelines'. Icon size options (S, M, L) are available below the table.", scaledwidth="75%"] A this point, you're finished with basic project configuration and can now explore your imported repositories. You can also investigate the results of the jobs run as part of the initial _Folder Computation_. [role="image-border"] -image::screenshot5.png[scaledwidth="75%"] +image::PR-demo-branches.png[alt = "Jenkins dashboard view for a job named 'PR-demo' under the 'CloudBeersInc' organization folder. The page lists four branches with the names: main, stephenc-patch-1, stephenc-patch-2, and stephenc-patch-3. The main and stephenc-patch-1 branches show successful builds with a green check mark and last success time of 2 min 39 sec and 2 min 34 sec respectively. The stephenc-patch-2 branch has an unstable status indicated by an orange exclamation mark with last success time of 2 min 34 sec, while the stephenc-patch-3 branch has a failed status indicated by a red cross mark.", scaledwidth="75%"] == Continuous Delivery with Pipeline @@ -333,7 +325,7 @@ to be broken. [[throttled-concurrent]] .Throttled stage concurrency with Pipeline -image::stage-concurrency.png[scaledwidth="90%"] +image::stage-concurrency.png[alt = "A graph depicting time on the x-axis and commits on the y-axis. Three red dots represent individual commits, each having three stages: Build, Selenium Test, and Deploy. The first commit and third commit have Deploy stages, while the second commit lacks a Deploy stage. A downward dotted line connects the Deploy stage of the first commit to the Deploy stage of the third commit, which is positioned slightly ahead on the x-axis.", scaledwidth="90%"] Consider a simple pipeline with three stages. A naive implementation of this pipeline can sequentially trigger each stage on every commit. Thus, the @@ -423,7 +415,7 @@ helpful metrics like average run time by stage and by build, and a user-friendly interface for interacting with input steps. .Pipeline Stage View plugin -image::workflow-big-responsive.png[scaledwidth="90%"] +image::pipeline-workflow-big-responsive.png[alt = "Jenkins Stage View displaying the status of multiple pipeline stages across five builds. The stages include 'Test', 'Re-test', 'Deploy', 'Deploy Again', 'Keep Deploying', 'Final Deploy', and 'Clean Up'. Each build is timestamped and labeled (#12 to #8). Builds #8 was successful till the 'Deploy Again' stage and then Failed. Build #9 and #10 are fully successful with green cells showing their individual stage durations in milliseconds. Build #11 has failed across all stages, with red striped cells labeled 'failed' and corresponding durations. Build #12 mostly failed except for the initial 'Test' and 'Re-test' stage, which succeeded. The top row summarizes average stage times, with the full pipeline run time averaging ~523ms.", scaledwidth="90%"] The only prerequisite for this plugin is a pipeline with defined stages in the flow. There can be as many stages as you desired and they can be in a linear @@ -458,6 +450,6 @@ in its "Usage" list. [[fingerprinting]] .Fingerprint of a WAR -image::fingerprinting.png[scaledwidth="90%"] +image::fingerprinting.png[alt = "A page displaying the fingerprint details of an app.war file. The section labeled 'This file has been used in the following places' identifies it as fingerprint #6, indicating that it was created or modified in the 'fingerprint' named pipeline's #6 build. The page shows the MD5 hash of the file and the duration since it was created and tracked. This information is located under the 'See Fingerprint' tab of that pipeline build.", scaledwidth="90%"] Visit the link:/doc/book/using/fingerprints/[fingerprint documentation] to learn more. diff --git a/content/doc/book/pipeline/running-pipelines.adoc b/content/doc/book/pipeline/running-pipelines.adoc index 70f4ade99643..564726fdac80 100644 --- a/content/doc/book/pipeline/running-pipelines.adoc +++ b/content/doc/book/pipeline/running-pipelines.adoc @@ -53,7 +53,7 @@ This is an inherent part of Declarative Pipelines and is available automatically Once your Pipeline has completed, whether it succeeds or fails, you can go to the side panel for the run in the classic UI and click on "Restart from Stage". -image::pipeline/restart-stages-sidebar.png[Restart from Stage link] +image::pipeline/restart-stages-sidebar.png[alt = "Jenkins Classic UI sidebar for 'example-pipeline' build #1 showing options: Status, Changes, Console Output, Edit Build Information, Delete Build #1, Timings, Pipeline Overview, Pipeline Console, Restart from Stage, Replay, Pipeline Steps, Workspaces, and Previous Build."] You will be prompted to choose from a list of top-level stages that were executed in the original run, in the order they were executed. Stages which were skipped due to an earlier failure will not be available to be restarted, but @@ -61,7 +61,7 @@ stages which were skipped due to a `when` condition not being satisfied will be group of `parallel` stages, or a group of nested `stages` to be run sequentially will also not be available - only top-level stages are allowed. -image::pipeline/restart-stages-dropdown.png[Choose the stage to restart] +image::pipeline/restart-stages-dropdown.png[alt = "Jenkins Classic UI to restart build #1 from a selected stage. The section displays a dropdown menu labeled 'Stage Name' with the selected option 'Fetch' and a blue button labeled 'Run' to initiate the restart."] Once you choose a stage to restart from and click submit, a new build, with a new build number, will be started. All stages before the selected stage will be skipped, and the Pipeline will start executing at the selected stage. From @@ -73,7 +73,7 @@ Restarting stages can also be done in the Blue Ocean UI. Once your Pipeline has or fails, you can click on the node which represents the stage. You can then click on the `Restart` link for that stage. -image::pipeline/pipeline-restart-stages-blue-ocean.png[Click on Restart link for stage] +image::pipeline/pipeline-restart-stages-blue-ocean.png[alt = "Jenkins pipeline visualization in Blue Ocean Dashboard showing the stages of a successful pipeline run. The stages include Start, Build, Some Tests, Browser Tests (with Chrome, Firefox, Internet Explorer, and Safari sub-stages), Testing Some Other Things, Static Analysis, and Deploy. Each stage is marked with a green checkmark indicating successful completion. At the bottom, there is a Deploy / final stage with a message log and options to restart the deployment and download logs."] include::doc/book/blueocean/_blue-ocean-status.adoc[] diff --git a/content/doc/book/pipeline/shared-libraries.adoc b/content/doc/book/pipeline/shared-libraries.adoc index 49b3d87a2f70..c970e999a754 100644 --- a/content/doc/book/pipeline/shared-libraries.adoc +++ b/content/doc/book/pipeline/shared-libraries.adoc @@ -91,21 +91,23 @@ Other directories under the root are reserved for future enhancements. === Global Shared Libraries There are several places where Shared Libraries can be defined, depending on -the use-case. _Manage Jenkins » System » Global Pipeline Libraries_ -as many libraries as necessary can be configured. +the use-case. +Navigate to *_Manage Jenkins » System » Global Trusted Pipeline Libraries_* to configure as many libraries as necessary. -image::pipeline/add-global-pipeline-libraries.png["Add a Global Pipeline Library", role=center] +image::pipeline/add-global-pipeline-libraries.png[alt = "Jenkins System Configuration page, accessed by navigating from Dashboard to Manage Jenkins then to System, displaying sections for Global Trusted Pipeline Libraries and Global Untrusted Pipeline Libraries. Each section provides options to add sharable libraries.", role=center, width=60%] Since these libraries will be globally usable, any Pipeline in the system can utilize functionality implemented in these libraries. -These libraries are considered "trusted:" they can run any methods in Java, -Groovy, Jenkins internal APIs, Jenkins plugins, or third-party libraries. This -allows you to define libraries which encapsulate individually unsafe APIs in a -higher-level wrapper safe for use from any Pipeline. Beware that **anyone able to -push commits to this SCM repository could obtain unlimited access to Jenkins**. -You need the _Overall/RunScripts_ permission to configure these libraries -(normally this will be granted to Jenkins administrators). +These libraries may be marked “trusted“, meaning they can run any methods in Java, +Groovy, Jenkins internal APIs, Jenkins plugins, or third-party libraries. +This allows you to define libraries that encapsulate individually unsafe APIs in a +higher-level wrapper that is safe for use from any pipeline. +Beware that **anyone able to push commits to this SCM repository could obtain unlimited access to Jenkins**. +You need the _Overall/RunScripts_ permission to configure these libraries (normally this will be granted to Jenkins administrators). + +If you only have _Overall/Manage_ permission, you can still configure global libraries, +but only “untrusted” ones that run in the Groovy sandbox just like typical Pipeline scripts. === Folder-level Shared Libraries @@ -113,8 +115,7 @@ Any Folder created can have Shared Libraries associated with it. This mechanism allows scoping of specific libraries to all the Pipelines inside of the folder or subfolder. -Folder-based libraries are not considered "trusted:" they run in the Groovy -sandbox just like typical Pipelines. +Folder-scoped libraries are always “untrusted”. === Automatic Shared Libraries @@ -132,7 +133,7 @@ classes or global variables defined by any such libraries. To access other shared libraries, the `Jenkinsfile` needs to use the `@Library` annotation, specifying the library's name: -image::pipeline/configure-global-pipeline-library.png["Configuring a Global Pipeline Library", role=center] +image::pipeline/configure-global-pipeline-library.png[alt = "Jenkins System Configuration page accessed by navigating from Dashboard to Manage Jenkins then to System, displaying options to configure a Global Trusted Pipeline Library. It includes fields for the library name, default version, checkboxes for 'Allow the default version to be overridden' and 'Include @Library changes in job recent changes' are checked, and a dropdown to select the retrieval method (Modern SCM or Legacy SCM) is shown.", role=center] [source,groovy] ---- @@ -284,7 +285,7 @@ specifically updated to support a new API for checking out an arbitrary named version (**Modern SCM** option). As of this writing, the latest versions of the Git and Subversion plugins support this mode. -image::pipeline/global-pipeline-library-modern-scm.png["Configuring a 'Modern SCM' for a Pipeline Library", role=center] +image::pipeline/global-pipeline-library-modern-scm.png[alt = "Jenkins System Configuration page accessed by navigating from the Dashboard to Manage Jenkins, then to System, showing settings for adding a Global Trusted Pipeline Library. It includes options as follows: the library name is set to 'my-shared-library', the default version to 'main', and checkboxes for 'Allow default version to be overridden' and 'Include @Library changes in job recent changes' are checked. The retrieval method is set to Modern SCM, with the source code management field set to 'Git' including options such as project repository, credentials, and behaviors like branch discovery.", role=center] ==== Legacy SCM @@ -295,7 +296,7 @@ branch/tag/ref may be configured for that particular SCM plugin. This ensures that during checkout of the library's source code, the SCM plugin will expand this variable to checkout the appropriate version of the library. -image::pipeline/global-pipeline-library-legacy-scm.png["Configuring a 'Legacy SCM' for a Pipeline Library", role=center] +image::pipeline/global-pipeline-library-legacy-scm.png[alt = "Jenkins System Configuration page accessed by navigating from the Dashboard to Manage Jenkins, then to System, showing settings for adding a Global Trusted Pipeline Library. It includes options as follows: the library name is set to 'my-shared-library', the default version to 'Stable', and checkboxes for 'Allow default version to be overridden','Include @Library changes in job recent changes' and 'Cache fetched versions on the controller for quick retrieval' are checked. The 'Cache refresh time in minutes' is set to 37. The retrieval method is set to Legacy SCM, with the source code management field set to 'Subversion'. The repository URL is parameterized as svn://svn.example.com/pipeline-library/branches/${library.my-shared-library.version}. No credentials are selected. Additional options include the local module directory set to . (current directory), repository depth set to 'infinity' and options to 'Ignore externals' and 'Cancel process on externals fail' are enabled.", role=center] ==== Dynamic retrieval diff --git a/content/doc/book/platform-information/support-policy-servlet-containers.adoc b/content/doc/book/platform-information/support-policy-servlet-containers.adoc index c1025dec571b..074f6297e2b2 100644 --- a/content/doc/book/platform-information/support-policy-servlet-containers.adoc +++ b/content/doc/book/platform-information/support-policy-servlet-containers.adoc @@ -37,22 +37,22 @@ a|The versions of Winstone and Jetty bundled in the Jenkins link:/doc/book/insta We do not regularly test compatibility, and we may drop support at any time. We consider patches that do not put Level 1 support at risk and do not create maintenance overhead. a| - * Tomcat 9, based on Servlet API 4.0 (Jakarta EE 8) with `javax.servlet` imports. (*Weekly 2.474, LTS 2.462.2, and older*) - * WildFly 26, based on Servlet API 4.0 (Jakarta EE 8) with `javax.servlet` imports. (*Weekly 2.474, LTS 2.462.2, and older*) - * Other servlet containers that are based on Servlet API 4.0 (Jakarta EE 8) with `javax.servlet` imports. (*Weekly 2.474, LTS 2.462.2, and older*) - * Jetty 11 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.475 and newer*) - * Tomcat 10 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.475 and newer*) - * WildFly 27 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.475 and newer*) - * Other servlet containers that are based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.475 and newer*) + * Tomcat 9, based on Servlet API 4.0 (Jakarta EE 8) with `javax.servlet` imports. (*Weekly 2.474, LTS 2.462.3, and older*) + * WildFly 26, based on Servlet API 4.0 (Jakarta EE 8) with `javax.servlet` imports. (*Weekly 2.474, LTS 2.462.3, and older*) + * Other servlet containers that are based on Servlet API 4.0 (Jakarta EE 8) with `javax.servlet` imports. (*Weekly 2.474, LTS 2.462.3, and older*) + * Jetty 11 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.475, LTS 2.479.1, and newer*) + * Tomcat 10 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.475, LTS 2.479.1, and newer*) + * WildFly 27 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.475, LTS 2.479.1, and newer*) + * Other servlet containers that are based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.475, LTS 2.479.1, and newer*) | **Level 3:** Unsupported | These versions are known to be incompatible or to have severe limitations. We do not support the listed servlet containers. a| - * Jetty 11 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.474, LTS 2.462.2, and older*) - * Tomcat 10 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.474, LTS 2.462.2, and older*) - * WildFly 27 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.474, LTS 2.462.2, and older*) - * Other servlet containers that are based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.474, LTS 2.462.2, and older*) + * Jetty 11 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.474, LTS 2.462.3, and older*) + * Tomcat 10 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.474, LTS 2.462.3, and older*) + * WildFly 27 or later, based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.474, LTS 2.462.3, and older*) + * Other servlet containers that are based on Servlet API 5.0 (Jakarta EE 9) or later with `jakarta.servlet` imports. (*Weekly 2.474, LTS 2.462.3, and older*) |=== diff --git a/content/doc/book/platform-information/upgrade-java-to-17.adoc b/content/doc/book/platform-information/upgrade-java-to-17.adoc index 2fa976eeb601..c8b507130d9a 100644 --- a/content/doc/book/platform-information/upgrade-java-to-17.adoc +++ b/content/doc/book/platform-information/upgrade-java-to-17.adoc @@ -14,7 +14,7 @@ As with any upgrade, we recommend: . link:https:/doc/book/system-administration/backing-up/#jenkins_home[Backing up `JENKINS_HOME`]. . Testing the upgrade with your backup. -. Only after all required tests pass, performing the upgrade on your production instance. +. Only after all required tests pass, performing the upgrade on your production controller. == Upgrading Jenkins @@ -45,5 +45,5 @@ All agents must be running on the same JVM version as the controller, due to how If you're upgrading your Jenkins controller to run on Java 17, you must upgrade the JVM on your agents. Validating the version of each agent can be done with the plugin:versioncolumn[Versions Node Monitors] plugin. -This plugin provides information about the JVM version of each agent on the node management screen of your Jenkins instance. +This plugin provides information about the JVM version of each agent on the node management screen of your Jenkins controller. This plugin can also be configured to automatically disconnect any agent with an incorrect JVM version. diff --git a/content/doc/book/resources/managing/Config-logger.png b/content/doc/book/resources/managing/Config-logger.png new file mode 100644 index 000000000000..d8259e3e0599 Binary files /dev/null and b/content/doc/book/resources/managing/Config-logger.png differ diff --git a/content/doc/book/resources/managing/Example-logger.png b/content/doc/book/resources/managing/Example-logger.png new file mode 100644 index 000000000000..e4c501103aff Binary files /dev/null and b/content/doc/book/resources/managing/Example-logger.png differ diff --git a/content/doc/book/resources/managing/Log-recorder.png b/content/doc/book/resources/managing/Log-recorder.png new file mode 100644 index 000000000000..189749f8f204 Binary files /dev/null and b/content/doc/book/resources/managing/Log-recorder.png differ diff --git a/content/doc/book/resources/managing/SystemLog.png b/content/doc/book/resources/managing/SystemLog.png new file mode 100644 index 000000000000..085e59998b60 Binary files /dev/null and b/content/doc/book/resources/managing/SystemLog.png differ diff --git a/content/doc/book/resources/managing/change-system-timezone-user-defined-timezone-2.png b/content/doc/book/resources/managing/change-system-timezone-user-defined-timezone-2.png index cc0c1732f65b..604961985deb 100644 Binary files a/content/doc/book/resources/managing/change-system-timezone-user-defined-timezone-2.png and b/content/doc/book/resources/managing/change-system-timezone-user-defined-timezone-2.png differ diff --git a/content/doc/book/resources/managing/change-system-timezone-user-defined-timezone.png b/content/doc/book/resources/managing/change-system-timezone-user-defined-timezone.png index eb3b41545c6a..49b13e4d912e 100644 Binary files a/content/doc/book/resources/managing/change-system-timezone-user-defined-timezone.png and b/content/doc/book/resources/managing/change-system-timezone-user-defined-timezone.png differ diff --git a/content/doc/book/resources/managing/inprocess-script-approval-pipeline.png b/content/doc/book/resources/managing/inprocess-script-approval-pipeline.png index 92eee6244cb4..ad26b3278999 100644 Binary files a/content/doc/book/resources/managing/inprocess-script-approval-pipeline.png and b/content/doc/book/resources/managing/inprocess-script-approval-pipeline.png differ diff --git a/content/doc/book/resources/managing/manage-inprocess-script-approval.png b/content/doc/book/resources/managing/manage-inprocess-script-approval.png index 65af120749ea..3f22893c927b 100644 Binary files a/content/doc/book/resources/managing/manage-inprocess-script-approval.png and b/content/doc/book/resources/managing/manage-inprocess-script-approval.png differ diff --git a/content/doc/book/resources/managing/unchecked-groovy-sandbox-on-pipeline.png b/content/doc/book/resources/managing/unchecked-groovy-sandbox-on-pipeline.png index 13897e8361de..7d012cb2944e 100644 Binary files a/content/doc/book/resources/managing/unchecked-groovy-sandbox-on-pipeline.png and b/content/doc/book/resources/managing/unchecked-groovy-sandbox-on-pipeline.png differ diff --git a/content/doc/book/resources/pipeline-as-code/PR-demo-branches.png b/content/doc/book/resources/pipeline-as-code/PR-demo-branches.png new file mode 100644 index 000000000000..c7ce46d91ce7 Binary files /dev/null and b/content/doc/book/resources/pipeline-as-code/PR-demo-branches.png differ diff --git a/content/doc/book/resources/pipeline-as-code/fingerprinting.png b/content/doc/book/resources/pipeline-as-code/fingerprinting.png index bb5e008df747..df0eb234c20c 100644 Binary files a/content/doc/book/resources/pipeline-as-code/fingerprinting.png and b/content/doc/book/resources/pipeline-as-code/fingerprinting.png differ diff --git a/content/doc/book/resources/pipeline-as-code/folder-computation-build-trigger-schedule.png b/content/doc/book/resources/pipeline-as-code/folder-computation-build-trigger-schedule.png deleted file mode 100644 index b671d78cf58e..000000000000 Binary files a/content/doc/book/resources/pipeline-as-code/folder-computation-build-trigger-schedule.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline-as-code/folder-computation-log.png b/content/doc/book/resources/pipeline-as-code/folder-computation-log.png deleted file mode 100644 index 0f1089d70d54..000000000000 Binary files a/content/doc/book/resources/pipeline-as-code/folder-computation-log.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline-as-code/folder-computation-main.png b/content/doc/book/resources/pipeline-as-code/folder-computation-main.png deleted file mode 100644 index a0eec2c274f3..000000000000 Binary files a/content/doc/book/resources/pipeline-as-code/folder-computation-main.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline-as-code/folder-icon.png b/content/doc/book/resources/pipeline-as-code/folder-icon.png index 9f9a5b58dcd2..7df966154f20 100644 Binary files a/content/doc/book/resources/pipeline-as-code/folder-icon.png and b/content/doc/book/resources/pipeline-as-code/folder-icon.png differ diff --git a/content/doc/book/resources/pipeline-as-code/github-configuration-for-organization-folder.png b/content/doc/book/resources/pipeline-as-code/github-configuration-for-organization-folder.png new file mode 100644 index 000000000000..647d2f427159 Binary files /dev/null and b/content/doc/book/resources/pipeline-as-code/github-configuration-for-organization-folder.png differ diff --git a/content/doc/book/resources/pipeline-as-code/github-organization-build-triggers-settings.png b/content/doc/book/resources/pipeline-as-code/github-organization-build-triggers-settings.png new file mode 100644 index 000000000000..4b6706d57dc2 Binary files /dev/null and b/content/doc/book/resources/pipeline-as-code/github-organization-build-triggers-settings.png differ diff --git a/content/doc/book/resources/pipeline-as-code/organization-folder-creation.png b/content/doc/book/resources/pipeline-as-code/organization-folder-creation.png new file mode 100644 index 000000000000..42ad4fbb5497 Binary files /dev/null and b/content/doc/book/resources/pipeline-as-code/organization-folder-creation.png differ diff --git a/content/doc/book/resources/pipeline-as-code/organization-folder-repositories.png b/content/doc/book/resources/pipeline-as-code/organization-folder-repositories.png new file mode 100644 index 000000000000..bd85021f97a1 Binary files /dev/null and b/content/doc/book/resources/pipeline-as-code/organization-folder-repositories.png differ diff --git a/content/doc/book/resources/pipeline-as-code/organization-repositories-scan.png b/content/doc/book/resources/pipeline-as-code/organization-repositories-scan.png new file mode 100644 index 000000000000..9d63306a07b6 Binary files /dev/null and b/content/doc/book/resources/pipeline-as-code/organization-repositories-scan.png differ diff --git a/content/doc/book/resources/pipeline-as-code/orphaned-item-strategy.png b/content/doc/book/resources/pipeline-as-code/orphaned-item-strategy.png index 6c23e0c47c59..606ab1098fe5 100644 Binary files a/content/doc/book/resources/pipeline-as-code/orphaned-item-strategy.png and b/content/doc/book/resources/pipeline-as-code/orphaned-item-strategy.png differ diff --git a/content/doc/book/resources/pipeline-as-code/pipeline-workflow-big-responsive.png b/content/doc/book/resources/pipeline-as-code/pipeline-workflow-big-responsive.png new file mode 100644 index 000000000000..36d9ddf996fe Binary files /dev/null and b/content/doc/book/resources/pipeline-as-code/pipeline-workflow-big-responsive.png differ diff --git a/content/doc/book/resources/pipeline-as-code/scan-organization-log.png b/content/doc/book/resources/pipeline-as-code/scan-organization-log.png new file mode 100644 index 000000000000..5b6e25058000 Binary files /dev/null and b/content/doc/book/resources/pipeline-as-code/scan-organization-log.png differ diff --git a/content/doc/book/resources/pipeline-as-code/screenshot1.png b/content/doc/book/resources/pipeline-as-code/screenshot1.png deleted file mode 100644 index a83001741c52..000000000000 Binary files a/content/doc/book/resources/pipeline-as-code/screenshot1.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline-as-code/screenshot2.png b/content/doc/book/resources/pipeline-as-code/screenshot2.png deleted file mode 100644 index c639cf7732cd..000000000000 Binary files a/content/doc/book/resources/pipeline-as-code/screenshot2.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline-as-code/screenshot3.png b/content/doc/book/resources/pipeline-as-code/screenshot3.png deleted file mode 100644 index 1becafbe95e0..000000000000 Binary files a/content/doc/book/resources/pipeline-as-code/screenshot3.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline-as-code/screenshot4.png b/content/doc/book/resources/pipeline-as-code/screenshot4.png deleted file mode 100644 index a2f699b0fc96..000000000000 Binary files a/content/doc/book/resources/pipeline-as-code/screenshot4.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline-as-code/screenshot5.png b/content/doc/book/resources/pipeline-as-code/screenshot5.png deleted file mode 100644 index 08f519acd194..000000000000 Binary files a/content/doc/book/resources/pipeline-as-code/screenshot5.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline-as-code/stage-concurrency.png b/content/doc/book/resources/pipeline-as-code/stage-concurrency.png index 4206768bdce3..28a776b21a8f 100644 Binary files a/content/doc/book/resources/pipeline-as-code/stage-concurrency.png and b/content/doc/book/resources/pipeline-as-code/stage-concurrency.png differ diff --git a/content/doc/book/resources/pipeline-as-code/workflow-big-responsive.png b/content/doc/book/resources/pipeline-as-code/workflow-big-responsive.png deleted file mode 100644 index d035f9116afb..000000000000 Binary files a/content/doc/book/resources/pipeline-as-code/workflow-big-responsive.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline/add-global-pipeline-libraries.png b/content/doc/book/resources/pipeline/add-global-pipeline-libraries.png index 20159dfabd64..c63a3633a72f 100644 Binary files a/content/doc/book/resources/pipeline/add-global-pipeline-libraries.png and b/content/doc/book/resources/pipeline/add-global-pipeline-libraries.png differ diff --git a/content/doc/book/resources/pipeline/classic-ui-left-column-on-item-build-now.png b/content/doc/book/resources/pipeline/classic-ui-left-column-on-item-build-now.png new file mode 100644 index 000000000000..db71fe13e065 Binary files /dev/null and b/content/doc/book/resources/pipeline/classic-ui-left-column-on-item-build-now.png differ diff --git a/content/doc/book/resources/pipeline/classic-ui-left-column-on-item-pipeline-syntax.png b/content/doc/book/resources/pipeline/classic-ui-left-column-on-item-pipeline-syntax.png new file mode 100644 index 000000000000..413cddf75f7d Binary files /dev/null and b/content/doc/book/resources/pipeline/classic-ui-left-column-on-item-pipeline-syntax.png differ diff --git a/content/doc/book/resources/pipeline/classic-ui-left-column-on-item.png b/content/doc/book/resources/pipeline/classic-ui-left-column-on-item.png deleted file mode 100644 index 7190f46a9417..000000000000 Binary files a/content/doc/book/resources/pipeline/classic-ui-left-column-on-item.png and /dev/null differ diff --git a/content/doc/book/resources/pipeline/classic-ui-left-column.png b/content/doc/book/resources/pipeline/classic-ui-left-column.png index 1a3d33ff1445..dbb1815873b7 100644 Binary files a/content/doc/book/resources/pipeline/classic-ui-left-column.png and b/content/doc/book/resources/pipeline/classic-ui-left-column.png differ diff --git a/content/doc/book/resources/pipeline/configure-docker-label.png b/content/doc/book/resources/pipeline/configure-docker-label.png index 96ab3487ef29..9653337c467d 100644 Binary files a/content/doc/book/resources/pipeline/configure-docker-label.png and b/content/doc/book/resources/pipeline/configure-docker-label.png differ diff --git a/content/doc/book/resources/pipeline/configure-global-pipeline-library.png b/content/doc/book/resources/pipeline/configure-global-pipeline-library.png index 4c80d465b929..953da598eb84 100644 Binary files a/content/doc/book/resources/pipeline/configure-global-pipeline-library.png and b/content/doc/book/resources/pipeline/configure-global-pipeline-library.png differ diff --git a/content/doc/book/resources/pipeline/example-pipeline-in-classic-ui.png b/content/doc/book/resources/pipeline/example-pipeline-in-classic-ui.png index eb100a4416d2..c531d947465e 100644 Binary files a/content/doc/book/resources/pipeline/example-pipeline-in-classic-ui.png and b/content/doc/book/resources/pipeline/example-pipeline-in-classic-ui.png differ diff --git a/content/doc/book/resources/pipeline/global-pipeline-library-legacy-scm.png b/content/doc/book/resources/pipeline/global-pipeline-library-legacy-scm.png index ed22a5178717..e5ff6e9761e6 100644 Binary files a/content/doc/book/resources/pipeline/global-pipeline-library-legacy-scm.png and b/content/doc/book/resources/pipeline/global-pipeline-library-legacy-scm.png differ diff --git a/content/doc/book/resources/pipeline/global-pipeline-library-modern-scm.png b/content/doc/book/resources/pipeline/global-pipeline-library-modern-scm.png index 39ed40be5a51..a8ae45245d5b 100644 Binary files a/content/doc/book/resources/pipeline/global-pipeline-library-modern-scm.png and b/content/doc/book/resources/pipeline/global-pipeline-library-modern-scm.png differ diff --git a/content/doc/book/resources/pipeline/hello-world-console-output.png b/content/doc/book/resources/pipeline/hello-world-console-output.png index 64d97322ac7a..12696757f8ca 100644 Binary files a/content/doc/book/resources/pipeline/hello-world-console-output.png and b/content/doc/book/resources/pipeline/hello-world-console-output.png differ diff --git a/content/doc/book/resources/pipeline/multibranch-branch-indexing.png b/content/doc/book/resources/pipeline/multibranch-branch-indexing.png index 9213df493b8b..41c30218659f 100644 Binary files a/content/doc/book/resources/pipeline/multibranch-branch-indexing.png and b/content/doc/book/resources/pipeline/multibranch-branch-indexing.png differ diff --git a/content/doc/book/resources/pipeline/multibranch-branch-source-configuration.png b/content/doc/book/resources/pipeline/multibranch-branch-source-configuration.png index 61f3a5708589..f01ef0cde2d1 100644 Binary files a/content/doc/book/resources/pipeline/multibranch-branch-source-configuration.png and b/content/doc/book/resources/pipeline/multibranch-branch-source-configuration.png differ diff --git a/content/doc/book/resources/pipeline/multibranch-branch-source.png b/content/doc/book/resources/pipeline/multibranch-branch-source.png index b26fb7ddf83f..3c2eb23923d9 100644 Binary files a/content/doc/book/resources/pipeline/multibranch-branch-source.png and b/content/doc/book/resources/pipeline/multibranch-branch-source.png differ diff --git a/content/doc/book/resources/pipeline/new-item-creation.png b/content/doc/book/resources/pipeline/new-item-creation.png index 44a55ca5d749..a452ace63ba9 100644 Binary files a/content/doc/book/resources/pipeline/new-item-creation.png and b/content/doc/book/resources/pipeline/new-item-creation.png differ diff --git a/content/doc/book/resources/pipeline/new-item-multibranch-creation.png b/content/doc/book/resources/pipeline/new-item-multibranch-creation.png index 182d32eb1992..c93cafbe2453 100644 Binary files a/content/doc/book/resources/pipeline/new-item-multibranch-creation.png and b/content/doc/book/resources/pipeline/new-item-multibranch-creation.png differ diff --git a/content/doc/book/resources/pipeline/replay-left-bar.png b/content/doc/book/resources/pipeline/replay-left-bar.png index c41b8fc26a4e..7ec7033c4775 100644 Binary files a/content/doc/book/resources/pipeline/replay-left-bar.png and b/content/doc/book/resources/pipeline/replay-left-bar.png differ diff --git a/content/doc/book/resources/pipeline/replay-modified.png b/content/doc/book/resources/pipeline/replay-modified.png index 04bff7593fc8..d5d3efce457b 100644 Binary files a/content/doc/book/resources/pipeline/replay-modified.png and b/content/doc/book/resources/pipeline/replay-modified.png differ diff --git a/content/doc/book/resources/pipeline/replay-previous-run.png b/content/doc/book/resources/pipeline/replay-previous-run.png index fd90e736815c..d52935114450 100644 Binary files a/content/doc/book/resources/pipeline/replay-previous-run.png and b/content/doc/book/resources/pipeline/replay-previous-run.png differ diff --git a/content/doc/book/resources/pipeline/restart-stages-dropdown.png b/content/doc/book/resources/pipeline/restart-stages-dropdown.png index 5bed927be814..7b965cad2fa8 100644 Binary files a/content/doc/book/resources/pipeline/restart-stages-dropdown.png and b/content/doc/book/resources/pipeline/restart-stages-dropdown.png differ diff --git a/content/doc/book/resources/pipeline/restart-stages-sidebar.png b/content/doc/book/resources/pipeline/restart-stages-sidebar.png index 0a713d83a894..822df77b96b2 100644 Binary files a/content/doc/book/resources/pipeline/restart-stages-sidebar.png and b/content/doc/book/resources/pipeline/restart-stages-sidebar.png differ diff --git a/content/doc/book/resources/pipeline/snippet-generator.png b/content/doc/book/resources/pipeline/snippet-generator.png index d68b526e592f..e67a86164e09 100644 Binary files a/content/doc/book/resources/pipeline/snippet-generator.png and b/content/doc/book/resources/pipeline/snippet-generator.png differ diff --git a/content/doc/book/resources/scaling-jenkins-on-kubernetes/Build-job.png b/content/doc/book/resources/scaling-jenkins-on-kubernetes/Build-job.png new file mode 100644 index 000000000000..7a726568141d Binary files /dev/null and b/content/doc/book/resources/scaling-jenkins-on-kubernetes/Build-job.png differ diff --git a/content/doc/book/resources/scaling-jenkins-on-kubernetes/Kubernetes-cloud.png b/content/doc/book/resources/scaling-jenkins-on-kubernetes/Kubernetes-cloud.png new file mode 100644 index 000000000000..d15529c51979 Binary files /dev/null and b/content/doc/book/resources/scaling-jenkins-on-kubernetes/Kubernetes-cloud.png differ diff --git a/content/doc/book/resources/scaling-jenkins-on-kubernetes/Pod-template.png b/content/doc/book/resources/scaling-jenkins-on-kubernetes/Pod-template.png new file mode 100644 index 000000000000..00f39f34ae49 Binary files /dev/null and b/content/doc/book/resources/scaling-jenkins-on-kubernetes/Pod-template.png differ diff --git a/content/doc/book/resources/tutorials/multibranch-pipeline/run-icon.png b/content/doc/book/resources/tutorials/multibranch-pipeline/run-icon.png index a1ca6c2f57ff..37f54122915f 100644 Binary files a/content/doc/book/resources/tutorials/multibranch-pipeline/run-icon.png and b/content/doc/book/resources/tutorials/multibranch-pipeline/run-icon.png differ diff --git a/content/doc/book/resources/tutorials/python/build-stage-overview.png b/content/doc/book/resources/tutorials/python/build-stage-overview.png index 2b3755615065..02b7cc6f7f26 100644 Binary files a/content/doc/book/resources/tutorials/python/build-stage-overview.png and b/content/doc/book/resources/tutorials/python/build-stage-overview.png differ diff --git a/content/doc/book/resources/tutorials/python/deliver-stage-added.png b/content/doc/book/resources/tutorials/python/deliver-stage-added.png index 78b3d21a549a..1ba2c1a8cbe6 100644 Binary files a/content/doc/book/resources/tutorials/python/deliver-stage-added.png and b/content/doc/book/resources/tutorials/python/deliver-stage-added.png differ diff --git a/content/doc/book/resources/tutorials/python/deliver-stage-output.png b/content/doc/book/resources/tutorials/python/deliver-stage-output.png index e4a9396d54c6..27514fb411b1 100644 Binary files a/content/doc/book/resources/tutorials/python/deliver-stage-output.png and b/content/doc/book/resources/tutorials/python/deliver-stage-output.png differ diff --git a/content/doc/book/resources/tutorials/python/first-build-details.png b/content/doc/book/resources/tutorials/python/first-build-details.png index 081e849fadd5..a87e27229f24 100644 Binary files a/content/doc/book/resources/tutorials/python/first-build-details.png and b/content/doc/book/resources/tutorials/python/first-build-details.png differ diff --git a/content/doc/book/resources/tutorials/python/first-job-success.png b/content/doc/book/resources/tutorials/python/first-job-success.png index f2b8b83a1d71..279c54181b9b 100644 Binary files a/content/doc/book/resources/tutorials/python/first-job-success.png and b/content/doc/book/resources/tutorials/python/first-job-success.png differ diff --git a/content/doc/book/resources/tutorials/python/pipeline-overview.png b/content/doc/book/resources/tutorials/python/pipeline-overview.png index 975aa82ef485..b8f188d7dcab 100644 Binary files a/content/doc/book/resources/tutorials/python/pipeline-overview.png and b/content/doc/book/resources/tutorials/python/pipeline-overview.png differ diff --git a/content/doc/book/resources/tutorials/python/pipeline-runs.png b/content/doc/book/resources/tutorials/python/pipeline-runs.png index 4e894391d134..724429983b7a 100644 Binary files a/content/doc/book/resources/tutorials/python/pipeline-runs.png and b/content/doc/book/resources/tutorials/python/pipeline-runs.png differ diff --git a/content/doc/book/resources/tutorials/python/test-stage-added.png b/content/doc/book/resources/tutorials/python/test-stage-added.png index ed9fd9558edb..5567e192125b 100644 Binary files a/content/doc/book/resources/tutorials/python/test-stage-added.png and b/content/doc/book/resources/tutorials/python/test-stage-added.png differ diff --git a/content/doc/book/resources/tutorials/python/test-stage-output.png b/content/doc/book/resources/tutorials/python/test-stage-output.png index fafedeaf55e9..11adc1f99d0e 100644 Binary files a/content/doc/book/resources/tutorials/python/test-stage-output.png and b/content/doc/book/resources/tutorials/python/test-stage-output.png differ diff --git a/content/doc/book/resources/tutorials/python/test-stage-visible-pipeline-overview.png b/content/doc/book/resources/tutorials/python/test-stage-visible-pipeline-overview.png index 8dcf492f77af..6dc52d8f0d19 100644 Binary files a/content/doc/book/resources/tutorials/python/test-stage-visible-pipeline-overview.png and b/content/doc/book/resources/tutorials/python/test-stage-visible-pipeline-overview.png differ diff --git a/content/doc/book/resources/tutorials/windows-finish-install.png b/content/doc/book/resources/tutorials/windows-finish-install.png index 0787ea152651..7dfe7b068cfc 100644 Binary files a/content/doc/book/resources/tutorials/windows-finish-install.png and b/content/doc/book/resources/tutorials/windows-finish-install.png differ diff --git a/content/doc/book/resources/using/change-time-zone.png b/content/doc/book/resources/using/change-time-zone.png index cc23aa61297e..727831d4a027 100644 Binary files a/content/doc/book/resources/using/change-time-zone.png and b/content/doc/book/resources/using/change-time-zone.png differ diff --git a/content/doc/book/resources/using/jenkins-server-timezone.png b/content/doc/book/resources/using/jenkins-server-timezone.png index dbb32ba02369..abd0176ea616 100644 Binary files a/content/doc/book/resources/using/jenkins-server-timezone.png and b/content/doc/book/resources/using/jenkins-server-timezone.png differ diff --git a/content/doc/book/scaling/scaling-jenkins-on-kubernetes.adoc b/content/doc/book/scaling/scaling-jenkins-on-kubernetes.adoc index b57f042cb625..a349bf04d468 100644 --- a/content/doc/book/scaling/scaling-jenkins-on-kubernetes.adoc +++ b/content/doc/book/scaling/scaling-jenkins-on-kubernetes.adoc @@ -190,7 +190,7 @@ IP: 172.17.0.4 Now, we are ready to fill in the Kubernetes plugin configuration. In order to do that, open the Jenkins UI and navigate to “Manage Jenkins -> Nodes and Clouds -> Clouds -> Add a new cloud -> Kubernetes and fill in the `Kubernetes URL` and `Jenkins URL` appropriately, by using the values which we have just collected in the previous step. -image::kubernetes-plugin-configuration.png[kubernetes-plugin-configuration] +image::Kubernetes-cloud.png[kubernetes-plugin-configuration] In addition to that, in the `Kubernetes Pod Template` section, we need to configure the image that will be used to spin up the agents. If you have some custom requirements for your agents, you can build one more dockerfile with the appropriate changes the same way we did for the Jenkins controller. @@ -199,13 +199,13 @@ On the other hand, if you don’t have unique requirements for your agents, you Kubernetes Pod Template Name - can be any and will be shown as a prefix for unique generated agents' names, which will be run automatically during builds Docker image - the docker image name that will be used as a reference to spin up a new Jenkins agents. -image::pod-template-configuration.png[pod-template-configuration] +image::Pod-template.png[pod-template-configuration] == Using Jenkins Agents Now all the configuration seems to be in place and we are ready for some tests. Let’s create two different build plans. -image::build-jobs.png[image] +image::Build-job.png[build-job-image] Now let’s trigger the execution for both of the builds. You should see that both build plans appear in the `Build Queue` box almost immediately. diff --git a/content/doc/book/system-administration/index.adoc b/content/doc/book/system-administration/index.adoc index 4916f901fde9..41399d02a794 100644 --- a/content/doc/book/system-administration/index.adoc +++ b/content/doc/book/system-administration/index.adoc @@ -19,7 +19,7 @@ Users not involved with system-level tasks will find this chapter of limited use Individual sections may assume knowledge of information from previous sections, but such assumptions will be explicitly called out and cross-referenced. -If you are a Jenkins administrator and want to know more about managing Jenkins nodes and instances, see +If you are a Jenkins administrator and want to know more about managing Jenkins nodes and deployments, refer to <>. For an overview of content in the Jenkins User Handbook, see diff --git a/content/doc/book/system-administration/reverse-proxy-configuration-with-jenkins/reverse-proxy-configuration-apache.adoc b/content/doc/book/system-administration/reverse-proxy-configuration-with-jenkins/reverse-proxy-configuration-apache.adoc index e1f122762b87..759dc7af19a3 100644 --- a/content/doc/book/system-administration/reverse-proxy-configuration-with-jenkins/reverse-proxy-configuration-apache.adoc +++ b/content/doc/book/system-administration/reverse-proxy-configuration-with-jenkins/reverse-proxy-configuration-apache.adoc @@ -51,6 +51,9 @@ The following Apache modules must be installed : a2enmod proxy a2enmod proxy_http a2enmod headers +# Required for websocket +a2enmod proxy_wstunnel +a2enmod rewrite ---- A typical set up for mod_proxy would look like this: @@ -62,6 +65,12 @@ ProxyPassReverse /jenkins http://localhost:8081/jenkins ProxyRequests Off AllowEncodedSlashes NoDecode +# Required for Jenkins websocket agents +RewriteEngine on +RewriteCond %{HTTP:Upgrade} websocket [NC] +RewriteCond %{HTTP:Connection} upgrade [NC] +RewriteRule ^/jenkins/?(.*) "ws://localhost:8081/jenkins/$1" [P,L] + # Local reverse proxy authorization override # Most unix distribution deny proxy by default # See /etc/apache2/mods-enabled/proxy.conf in Ubuntu @@ -242,6 +251,12 @@ NameVirtualHost *:443 ProxyPassReverse / http://www.example.com/ RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "443" + + # Required for Jenkins websocket agents + RewriteEngine on + RewriteCond %{HTTP:Upgrade} websocket [NC] + RewriteCond %{HTTP:Connection} upgrade [NC] + RewriteRule ^/?(.*) "ws://localhost:8080/$1" [P,L] ---- @@ -256,17 +271,25 @@ The following Apache modules must be installed : a2enmod rewrite a2enmod proxy a2enmod proxy_http +# Required for Jenkins websocket agents +a2enmod proxy_wstunnel ---- A typical mod_rewrite configuration would look like this: [source] ---- +# Required for Jenkins websocket agents +RewriteCond %{HTTP:Upgrade} websocket [NC] +RewriteCond %{HTTP:Connection} upgrade [NC] +RewriteRule ^/jenkins/?(.*) "ws://localhost:8081/jenkins/$1" [P,L] + # Use last flag because no more rewrite can be applied after proxy pass # NE makes sure slashes are not re-encoded. # Apache does not re-encode spaces though, we ask Apache to encode it again with the B flag # BNP tells apache to use %20 instead of + to re-encode the space RewriteRule ^/jenkins(.*)$ http://localhost:8081/jenkins$1 [P,L,NE,B=\,BNP] + ProxyPassReverse /jenkins http://localhost:8081/jenkins ProxyRequests Off diff --git a/content/doc/book/system-administration/viewing-logs.adoc b/content/doc/book/system-administration/viewing-logs.adoc index 3d29c6fbe28d..60ef05d0d18e 100644 --- a/content/doc/book/system-administration/viewing-logs.adoc +++ b/content/doc/book/system-administration/viewing-logs.adoc @@ -57,22 +57,22 @@ This page shows you how to do this. First, select the "System Log" from the "Manage Jenkins" page: -image::logging-manage-screen.png["Manage Jenkins"] +image::SystemLog.png["Manage Jenkins"] From there, you can create a custom log recorder, which helps you group relevant logs together while filtering out the noise. -image::logging-log-recorders.png["Log Recorders"] +image::Log-recorder.png["Log Recorders"] Choose a name that makes sense to you. -image::logging-enter-name.png["Enter log recorder name"] +image::Example-logger.png["Enter log recorder name"] You'll be then asked to configure loggers and their levels whose output you'd like to collect. Depending on which part of Jenkins you monitor, you'll need to specify different loggers. Tell us the symptom of your problem in the users list and we should be able to tell you where you need to look. Also, this is really just a wrapper around the java.util.logging package, so if you program in Java, you might be able to guess where to look. -image::logging-logger-config.png["Specify loggers"] +image::Config-logger.png["Specify loggers"] Once the set up is complete, Jenkins will start collecting data. The collected logs are available from the web UI. diff --git a/content/doc/book/using/using-credentials.adoc b/content/doc/book/using/using-credentials.adoc index 43e6038363e3..c81cf8aa8b29 100644 --- a/content/doc/book/using/using-credentials.adoc +++ b/content/doc/book/using/using-credentials.adoc @@ -93,18 +93,18 @@ To add new global credentials to your Jenkins controller: . If required, ensure you are logged in to Jenkins (as a user with the *Credentials > Create* permission). . From the Jenkins home page (i.e. the Dashboard of the Jenkins classic UI), - click *Manage Jenkins > Manage Credentials*. + click *Manage Jenkins > Credentials*. + -image:../../../images/using/manage.png[image,title="Manage_credentials"] +image:../../../images/using/manage_credentials.png[image,title="Manage_credentials"] -. Under *Stores scoped to Jenkins* on the right, click on *Jenkins*. +. Under *Stores scoped to Jenkins* on the right, click on *System*. + -image:../../../images/using/store.png[image,title="Store_scoped"] +image:../../../images/using/Stores_scoped_to_Jenkins.png[image,title="Store_scoped"] . Under *System*, click the *Global credentials (unrestricted)* link to access this default domain. + -image:../../../images/using/system_global_credentials.png[image,title="System_global_credentials"] +image:../../../images/using/global_credentials.png[image,title="System_global_credentials"] . Click *Add Credentials* on the left. + *Note:* If there are no credentials in this default domain, you could also diff --git a/content/doc/developer/extensibility/_chapter.yml b/content/doc/developer/extensibility/_chapter.yml index d0c321908057..cef7d6cca1e1 100644 --- a/content/doc/developer/extensibility/_chapter.yml +++ b/content/doc/developer/extensibility/_chapter.yml @@ -1,5 +1,6 @@ --- sections: +- access-modifier-annotation guides: - action-for-all-projects - serialization-of-anonymous-classes \ No newline at end of file diff --git a/content/doc/developer/extensibility/access-modifier-annotation.adoc b/content/doc/developer/extensibility/access-modifier-annotation.adoc new file mode 100644 index 000000000000..b283626508b7 --- /dev/null +++ b/content/doc/developer/extensibility/access-modifier-annotation.adoc @@ -0,0 +1,58 @@ +--- +title: Access Modifier Annotation (@Restricted) +layout: developer +--- + +All public classes, as well as their public methods and fields are available to plugins with a dependency on the component defining a class (Jenkins core or a plugin). +Sometimes, these need to be public for technical reasons, but should not be available for other plugins to use. +For example, Stapler web methods (`#doConfigSubmit`, `doCheckName`, `doFillJobItems`, and similar) need to be public to be invoked by Stapler, but they're often not stable API -- parameters may be added or removed depending on the needs of the UI. + +The access modifier annotation jenkinsdoc:component:access-modifier-annotation:org.kohsuke.accmod.Restricted[`@Restricted`] helps solve this problem, by preventing compliant plugins from calling methods annotated to be inaccessible by default. +Multiple different modes are available, depending on the `value` of the annotation. +The most commonly modes are the following: + +* `@Restricted(NoExternalUse.class)` allows access to the annotated element from the same component, but not any others. + This is the most common way to use this annotation in Jenkins. +* `@Restricted(DoNotUse.class)` prohibits all programmatic use. This could be used for code only reflectively invoked, e.g., from Jelly views. + As this reduces testability, `NoExternalUse.class` is often used instead, even if the only calls are from test code. +// TODO Confirm that test code is affected by these annotations. +* `@Restricted(Beta.class)` can be used to designate elements as being in _beta_. + What this means exactly is implementation-dependent, but the general idea is to ensure callers are prepared to quickly adapt to incompatible changes in the code. + +Look for jenkinsdoc:component:access-modifier-annotation:org.kohsuke.accmod.AccessRestriction[`AccessRestriction`] implementations for a complete list. + +Any calls to annotated elements violating the access restrictions will result in compilation failures. + + +== Suppressing failures + +Sometimes it's necessary to suppress failures. +The most common reason is the intentional use of `@Restricted(Beta.class)` APIs. +Support for this is part of the plugin parent POM: Set the property `useBeta` to `true` to allow use of `@Restricted(Beta.class)` annotated elements. + +NOTE: This will suppress failures for use of _any_ `Beta.class` API called in the project. +As a result, code changes may introduce more uses of `Beta.class` APIs than intended. + +There are multiple options to suppress other access modifier restrictions, from most to least responsible: + +. You can use the jenkinsdoc:component:access-modifier-suppressions:org.kohsuke.accmod.restrictions.suppressions,SuppressRestrictedWarnings[`SuppressRestrictedWarnings`] annotation from the `access-modifier-suppressions` library to specifically declare which classes's restrictions should be suppressed. +. You can set the property `access-modifier-checker.failOnError` in your `pom.xml` to check for violations, but not fail the build. +. You can set the property `access-modifier-checker.skip` in your `pom.xml` to skip the checks altogether. + +WARNING: Code is usually annotated `@Restricted` for a reason. +Use at your own risk! + + +== Understanding the implementation + +=== In the dependency + +Jenkins core and plugins have a dependency on `access-modifier-annotation`. +The jenkinsdoc:component:access-modifier-annotation:org.kohsuke.accmod.Restricted[`@Restricted`] annotation is itself annotated jenkinsdoc:component:annotation-indexer:org.jvnet.hudson.annotation_indexer.Indexed[`@Indexed`], which means the https://javadoc.jenkins.io/component/annotation-indexer/org/jvnet/hudson/annotation_indexer/package-summary.html[Annotation Indexer] library will create a file listing all classes with a `@Restricted` annotated element in `META-INF/services/annotations/org.kohsuke.accmod.Restricted`. + +=== In the dependent + +Jenkins plugins are set up to run jenkinsdoc:component:access-modifier-checker:org.kohsuke.accmod.impl.EnforcerMojo[`EnforcerMojo`] during the build after compilation. +This reads all classes specified in the various `META-INF/services/annotations/org.kohsuke.accmod.Restricted` files in its dependencies and notes all annotated elements. +Then, all generated class files are inspected for calls to prohibited elements from the previous step. +If any are are found, unless `access-modifier-checker.skip` is set, the build is failed. diff --git a/content/doc/developer/extensibility/action-for-all-projects.adoc b/content/doc/developer/extensibility/action-for-all-projects.adoc index a79705413f65..8d13bbf881cd 100644 --- a/content/doc/developer/extensibility/action-for-all-projects.adoc +++ b/content/doc/developer/extensibility/action-for-all-projects.adoc @@ -9,7 +9,7 @@ This could be used for example to show information about the job, such as statis In this example, we'll add a link called _Statistics_ that will link to a page that shows some information about the project. -## Create the action +== Create the action The action will be fairly basic: It will expect a reference to an `jenkinsdoc:Project[]` as constructor argument, and has getters returning the number of build steps and post-build steps this project has. @@ -77,7 +77,7 @@ Similarly, the `index.jelly` view we create for it in the resource directory cor ---- -## Add the action to all projects +== Add the action to all projects `jenkinsdoc:TransientActionFactory[]` can be used to add any number of actions to a given instance of an `jenkinsdoc:Actionable[]` subtype. `TransientActionFactory` defines: @@ -107,7 +107,7 @@ public class SampleActionFactory extends TransientActionFactory { <1> This will only apply to `Project` instances. <2> The factory could create different action depending on the `Project`, in this case, it is not needed. -## Restrict access +== Restrict access To only show the project information to people who otherwise would be able to obtain it by viewing the job configuration, we can set up the action so the link is only shown to those with the `Item.CONFIGURE` permission.footnote:[Another option would be to only create the action for those with the correct permission. That approach would currently work for Jobs, but other objects in Jenkins use caching for actions so the transient actions are not recreated on every request. Of course, the chosen approach requires more sophisticated permission checks.] diff --git a/content/doc/developer/extensibility/serialization-of-anonymous-classes.adoc b/content/doc/developer/extensibility/serialization-of-anonymous-classes.adoc index 787545a4fc5c..0cbff801f7f0 100644 --- a/content/doc/developer/extensibility/serialization-of-anonymous-classes.adoc +++ b/content/doc/developer/extensibility/serialization-of-anonymous-classes.adoc @@ -34,7 +34,7 @@ To fix code like this: int stuff(FilePath workspace, final String arg) throws IOException, InterruptedException { return workspace.act(new MasterToSlaveFileCallable() { @Override - Integer invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { + public Integer invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { return countThings(f, arg); } }); @@ -43,6 +43,21 @@ int stuff(FilePath workspace, final String arg) throws IOException, InterruptedE just use a "convert anonymous to member" refactoring in your IDE, or manually: +[source,java] +---- +private record ThingCounter(String arg) implements ControllerToAgentFileCallable { + @Override + public Integer invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { + return countThings(f, arg); + } +} +int stuff(FilePath workspace, String arg) throws IOException, InterruptedException { + return workspace.act(new ThingCounter(arg)); +} +---- + +or prior to Jenkins 2.485: + [source,java] ---- private static final class ThingCounter extends MasterToSlaveFileCallable { @@ -51,7 +66,7 @@ private static final class ThingCounter extends MasterToSlaveFileCallable...` content. * Most controls support `help.html` as overall help for the `Describable`. -* The help message can be overridden in jelly with the `help` attribute, but please use the convention 'help-fieldName.html' as much as possible. +* The help message can be overridden in jelly with the `help` attribute, but please use the convention `help-fieldName.html` as much as possible. + +* It is also possible to use localized help files, with the language specific suffix, so `help-fieldName.html` gets `help-fieldName_de.html` for the german version. [source, xml] ---- diff --git a/content/doc/developer/handling-requests/actions.adoc b/content/doc/developer/handling-requests/actions.adoc index 9127e5eb5c35..d80e7af820a4 100644 --- a/content/doc/developer/handling-requests/actions.adoc +++ b/content/doc/developer/handling-requests/actions.adoc @@ -7,7 +7,7 @@ references: url: https://wiki.jenkins.io/display/JENKINS/Web+Method --- -## Changes in Jenkins 2.138.4 and Jenkins 2.154 +== Changes in Jenkins 2.138.4 and Jenkins 2.154 Web methods need to provide some indication that they are intended for Stapler routing: @@ -32,7 +32,7 @@ When the SECURITY-595 fix prevents access to a URL, a warning message is written WARNING: New Stapler routing rules result in the URL "/example" no longer being allowed. If you consider it safe to use, add the following to the whitelist: "method hudson.model.Hudson doExample". Learn more: https://www.jenkins.io/redirect/stapler-routing ---- -Administrators can follow the instructions to make the method or field work on their specific instance, but ideally the component is changed to prevent the problem in the first place: +Administrators can follow the instructions to make the method or field work on their specific controller, but ideally the component is changed to prevent the problem in the first place: * Add any of the indicators listed in the previous section that would make your method routable. * Annotate the web method `@StaplerDispatchable`. diff --git a/content/doc/developer/handling-requests/stapler-accessible-type.adoc b/content/doc/developer/handling-requests/stapler-accessible-type.adoc index 5a381b612dde..66deaf61c686 100644 --- a/content/doc/developer/handling-requests/stapler-accessible-type.adoc +++ b/content/doc/developer/handling-requests/stapler-accessible-type.adoc @@ -9,7 +9,7 @@ references: Before Jenkins 2.138.4 and 2.154, most objects in Jenkins were accessible through the basic Stapler routing rules discussed in link:../routing[Routing Requests]. Starting in Jenkins 2.138.4 and 2.154, this is further restricted to address several security issues. -## Identifying problems +== Identifying problems When the SECURITY-595 fix prevents access to a URL, a warning message is written to the Jenkins log that looks similar to the following: @@ -19,7 +19,7 @@ WARNING: New Stapler routing rules result in the URL "/example" no longer being Administrators can follow the instructions to make the method or field work on their specific instance, but ideally the component is changed to prevent the problem in the first place. -### Known problematic code patterns +=== Known problematic code patterns The following code patterns are known to result in problems related to routing getters and fields: @@ -30,7 +30,7 @@ The following code patterns are known to result in problems related to routing g In a chain of getter/field accesses like `/foo/bar/baz/`, every element needs to appear relevant to Stapler. * Types that only provide Jelly/Groovy views, even `index.jelly`, but don't have methods or fields that appear routable. -## Solving the problem +== Solving the problem Starting from Jenkins 2.138.4 and 2.154, Jenkins recognizes the following annotations: diff --git a/content/doc/developer/plugin-development/choosing-jenkins-baseline.adoc b/content/doc/developer/plugin-development/choosing-jenkins-baseline.adoc index 90ebf78e84d3..cc4abf90184d 100644 --- a/content/doc/developer/plugin-development/choosing-jenkins-baseline.adoc +++ b/content/doc/developer/plugin-development/choosing-jenkins-baseline.adoc @@ -13,7 +13,7 @@ You need to balance compatibility and features: In particular, the LTS Release Line is based on slightly older releases to provide a more stable experience for conservative users. * *Building against recent Jenkins versions* allows you to use recently added core features and API from your plugin. You will also use that newer version for `mvn hpi:run`, so it may be easier to test your plugin with newer Jenkins releases. -* *Do not use versions no longer supported by the update center*, which is currently anything older than 2.421 for weekly releases, and 2.414.1 for LTS releases. +* *Do not use versions no longer supported by the update center*, which is currently anything older than 2.427 for weekly releases, and 2.414.3 for LTS releases. Note that the lowest supported version changes about every week (weekly release) or every month (LTS release), so these specific versions will be a bad choice soon. * *Prefer an LTS version over weekly versions.* ** If you are based on the _currently active_ LTS line, @@ -36,8 +36,8 @@ Something around 1 year old that does not have too many detached plugins makes a ## Currently recommended versions -At the moment, the Jenkins releases *2.440.3 and 2.452.4* make good core dependencies. -You could also consider *2.462.1* if there are specific reasons, like new features, to want something newer. +At the moment, the Jenkins releases *2.452.4 and 2.462.3* make good core dependencies. +You could also consider *2.479.1* if there are specific reasons, like new features, to want something newer. ## Changing the minimum required version @@ -46,6 +46,6 @@ Set the `jenkins.version` property in `pom.xml` to the version you need to depen [source,xml] ---- - 2.452.4 + 2.462.3 ---- diff --git a/content/doc/developer/plugin-development/dependency-management.adoc b/content/doc/developer/plugin-development/dependency-management.adoc index 487f101124dc..bc417834f816 100644 --- a/content/doc/developer/plugin-development/dependency-management.adoc +++ b/content/doc/developer/plugin-development/dependency-management.adoc @@ -92,9 +92,9 @@ To use the Jenkins plugin BOM in your plugin: io.jenkins.tools.bom - bom-2.440.x + bom-2.452.x - 3435.v238d66a_043fb_ + 3761.vd922730f0fd2 import pom diff --git a/content/doc/developer/plugin-development/pipeline-integration.adoc b/content/doc/developer/plugin-development/pipeline-integration.adoc index eb851db20053..3a3f481b474e 100644 --- a/content/doc/developer/plugin-development/pipeline-integration.adoc +++ b/content/doc/developer/plugin-development/pipeline-integration.adoc @@ -452,10 +452,18 @@ NOTE: See the https://github.com/jenkinsci/workflow-basic-steps-plugin/blob/mast The metastep is `step`. -To add support for use of a `Builder` or `Publisher` from a pipeline, depend on Jenkins `1.577+`, typically `1.580.1`. -Then implement `SimpleBuildStep`, following the guidelines in https://javadoc.jenkins.io/jenkins/tasks/SimpleBuildStep.html[its Javadoc]. +To add support for use of a `Builder` or `Publisher` from a pipeline, +implement `SimpleBuildStep`, following the guidelines in https://javadoc.jenkins.io/jenkins/tasks/SimpleBuildStep.html[its Javadoc]. Also prefer ``@DataBoundSetter``s to a sprawling `@DataBoundConstructor` (see <>). +Note that if a freestyle `Builder` merely ran some external build tool, +it should _not_ be translated this way. +User pipelines should run that tool from `sh` steps +(directly, or indirectly in the middle of some longer script), +and in many cases there is no need for any special Jenkins plugin at all. +If there is some special behavior in Jenkins itself which would benefit from a plugin, +typically this would be implemented as a block-scoped Pipeline step. + ==== Mandatory workspace context Note that a `SimpleBuildStep` is designed to work also in a freestyle project, and thus assumes that a diff --git a/content/doc/developer/publishing/releasing-cd.adoc b/content/doc/developer/publishing/releasing-cd.adoc index 8af30be7d329..db533d98bafc 100644 --- a/content/doc/developer/publishing/releasing-cd.adoc +++ b/content/doc/developer/publishing/releasing-cd.adoc @@ -306,6 +306,18 @@ mvn -Dset.changelist \ Check that `MAVEN_TOKEN` and `MAVEN_USERNAME` appear under Repository secrets. +=== No release has been triggered after merging a pull request + +Ensure that the pull request has a label indicating it was of interest to users (e.g., `enhancement` rather than `chore`). + +See the complete list of label categories at https://github.com/jenkinsci/.github/blob/master/.github/release-drafter.yml and the list of "interesting" categories at https://github.com/jenkins-infra/interesting-category-action/blob/main/action.yaml#L13. + +You can use the `developer` label to release a pull request even if its not interesting to end users, e.g. it is a dependency of a downstream pull request or it fixes tests for Plugin Compatibility Testing. + +If you add an "interesting" label on a pull request already merged then merge another pull request (even with an uninteresting label), you will get a release since the workflow will see that there has been at least one interesting pull request since the last release. + +Finally, if you manually trigger the CD action and the build is passing on the primary branch, it will publish a new release regardless of any labels. + === The upload to the Maven repository fails with "401 Unauthorized" Unauthorized means that the credentials were invalid, or not sent by Maven. diff --git a/content/doc/developer/publishing/usage-statistics.adoc b/content/doc/developer/publishing/usage-statistics.adoc index 80bf4727e563..5d98648de230 100644 --- a/content/doc/developer/publishing/usage-statistics.adoc +++ b/content/doc/developer/publishing/usage-statistics.adoc @@ -6,7 +6,7 @@ layout: developersection == Overview Anonymous usage statistics are collected from Jenkins controllers that have not opted out from this. -They help us identify trends in Jenkins use and configuration, like the popularity of plugins and average number of plugins installed on instances. +They help us identify trends in Jenkins use and configuration, like the popularity of plugins and average number of plugins installed on controllers. Those usage statistics are encrypted on individual Jenkins controllers and sent to the Jenkins project infrastructure, where they are stored. Decryption and anonymization is done in one step using the https://github.com/jenkins-infra/usage-log-decrypter[Usage Log Decrypter] to ensure no private data, like private-source plugin usage information, is published. diff --git a/content/doc/developer/security/csp.adoc b/content/doc/developer/security/csp.adoc index 7331787a42f1..d44f389d7cec 100644 --- a/content/doc/developer/security/csp.adoc +++ b/content/doc/developer/security/csp.adoc @@ -27,6 +27,8 @@ Inline `