diff --git a/.mvn/jvm.config b/.mvn/jvm.config
new file mode 100644
index 0000000000000000000000000000000000000000..e93a5b43ee1cd1968d2d971e1486071f4fa1fe0f
--- /dev/null
+++ b/.mvn/jvm.config
@@ -0,0 +1 @@
+-Xmx800m
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 7bd3f7a8f7b30738a6187c17454f431a84f6e45f..7a2d5e0c53ec6c9a1dcaaedf21fada835c68ea8c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,3 +1,3 @@
# Contributing to Jenkins
-For information on contributing to Jenkins, check out the https://wiki.jenkins-ci.org/display/JENKINS/contributing and https://wiki.jenkins-ci.org/display/JENKINS/Extend+Jenkins wiki pages over at the official https://wiki.jenkins-ci.org . They will help you get started with contributing to Jenkins.
+For information on contributing to Jenkins, check out the https://wiki.jenkins-ci.org/display/JENKINS/Beginners+Guide+to+Contributing and https://wiki.jenkins-ci.org/display/JENKINS/Extend+Jenkins wiki pages over at the official https://wiki.jenkins-ci.org . They will help you get started with contributing to Jenkins.
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000000000000000000000000000000000000..cc03884ab9354f1dac934257d8fcf566ded8fee6
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,190 @@
+/*
+ * This Jenkinsfile is intended to run on https://ci.jenkins-ci.org and may fail anywhere else.
+ * It makes assumptions about plugins being installed, labels mapping to nodes that can build what is needed, etc.
+ *
+ * The required labels are "java" and "docker" - "java" would be any node that can run Java builds. It doesn't need
+ * to have Java installed, but some setups may have nodes that shouldn't have heavier builds running on them, so we
+ * make this explicit. "docker" would be any node with docker installed.
+ */
+
+// TEST FLAG - to make it easier to turn on/off unit tests for speeding up access to later stuff.
+def runTests = true
+
+// Only keep the 10 most recent builds.
+properties([[$class: 'jenkins.model.BuildDiscarderProperty', strategy: [$class: 'LogRotator',
+ numToKeepStr: '50',
+ artifactNumToKeepStr: '20']]])
+
+String packagingBranch = (binding.hasVariable('packagingBranch')) ? packagingBranch : 'jenkins-2.0'
+
+timestampedNode('java') {
+
+ // First stage is actually checking out the source. Since we're using Multibranch
+ // currently, we can use "checkout scm".
+ stage "Checkout source"
+
+ checkout scm
+
+ // Now run the actual build.
+ stage "Build and test"
+
+ // We're wrapping this in a timeout - if it takes more than 180 minutes, kill it.
+ timeout(time: 180, unit: 'MINUTES') {
+ // See below for what this method does - we're passing an arbitrary environment
+ // variable to it so that JAVA_OPTS and MAVEN_OPTS are set correctly.
+ withMavenEnv(["JAVA_OPTS=-Xmx1536m -Xms512m -XX:MaxPermSize=1024m",
+ "MAVEN_OPTS=-Xmx1536m -Xms512m -XX:MaxPermSize=1024m"]) {
+ // Actually run Maven!
+ // The -Dmaven.repo.local=${pwd()}/.repository means that Maven will create a
+ // .repository directory at the root of the build (which it gets from the
+ // pwd() Workflow call) and use that for the local Maven repository.
+ sh "mvn -Pdebug -U clean install ${runTests ? '-Dmaven.test.failure.ignore=true -Dconcurrency=1' : '-DskipTests'} -V -B -Dmaven.repo.local=${pwd()}/.repository"
+ }
+ }
+
+ // Once we've built, archive the artifacts and the test results.
+ stage "Archive artifacts and test results"
+
+ step([$class: 'ArtifactArchiver', artifacts: '**/target/*.jar, **/target/*.war, **/target/*.hpi', fingerprint: true])
+ if (runTests) {
+ step([$class: 'JUnitResultArchiver', healthScaleFactor: 20.0, testResults: '**/target/surefire-reports/*.xml'])
+ }
+}
+
+def debFileName
+def rpmFileName
+def suseFileName
+
+// Run the packaging build on a node with the "docker" label.
+timestampedNode('docker') {
+ // First stage here is getting prepped for packaging.
+ stage "packaging - docker prep"
+
+ // Docker environment to build packagings
+ dir('packaging-docker') {
+ git branch: packagingBranch, url: 'https://github.com/jenkinsci/packaging.git'
+ sh 'docker build -t jenkins-packaging-builder:0.1 docker'
+ }
+
+ stage "packaging - actually packaging"
+ // Working packaging code, separate branch with fixes
+ dir('packaging') {
+ deleteDir()
+
+ docker.image("jenkins-packaging-builder:0.1").inside("-u root") {
+ git branch: packagingBranch, url: 'https://github.com/jenkinsci/packaging.git'
+
+ try {
+ // Saw issues with unstashing inside a container, and not sure copy artifact plugin would work here.
+ // So, simple wget.
+ sh "wget -q ${currentBuild.absoluteUrl}/artifact/war/target/jenkins.war"
+ sh "make clean deb rpm suse BRAND=./branding/jenkins.mk BUILDENV=./env/test.mk CREDENTIAL=./credentials/test.mk WAR=jenkins.war"
+ } catch (Exception e) {
+ error "Packaging failed: ${e}"
+ } finally {
+ // Needed to make sure the output of the build can be deleted by later runs.
+ // Hackish, yes, but rpm builds as a numeric UID only user fail, so...
+ sh "chmod -R a+w target || true"
+ sh "chmod a+w jenkins.war || true"
+ }
+ dir("target/debian") {
+ def debFilesFound = findFiles(glob: "*.deb")
+ if (debFilesFound.size() > 0) {
+ debFileName = debFilesFound[0]?.name
+ }
+ }
+
+ dir("target/rpm") {
+ def rpmFilesFound = findFiles(glob: "*.rpm")
+ if (rpmFilesFound.size() > 0) {
+ rpmFileName = rpmFilesFound[0]?.name
+ }
+ }
+
+ dir("target/suse") {
+ def suseFilesFound = findFiles(glob: "*.rpm")
+ if (suseFilesFound.size() > 0) {
+ suseFileName = suseFilesFound[0]?.name
+ }
+ }
+
+ step([$class: 'ArtifactArchiver', artifacts: 'target/**/*', fingerprint: true])
+
+ // Fail the build if we didn't find at least one of the packages, meaning they weren't built but
+ // somehow make didn't error out.
+ if (debFileName == null || rpmFileName == null || suseFileName == null) {
+ error "At least one of Debian, RPM or SuSE packages are missing, so failing the build."
+ }
+ }
+
+ }
+
+}
+
+stage "Package testing"
+
+if (runTests) {
+ if (!env.BRANCH_NAME.startsWith("PR")) {
+ // NOTE: As of now, a lot of package tests will fail. See https://issues.jenkins-ci.org/issues/?filter=15257 for
+ // possible open JIRAs.
+
+ // Basic parameters
+ String artifactName = (binding.hasVariable('artifactName')) ? artifactName : 'jenkins'
+ String jenkinsPort = (binding.hasVariable('jenkinsPort')) ? jenkinsPort : '8080'
+
+ // Set up
+ String debfile = "artifact://${env.JOB_NAME}/${env.BUILD_NUMBER}#target/debian/${debFileName}"
+ String rpmfile = "artifact://${env.JOB_NAME}/${env.BUILD_NUMBER}#target/rpm/${rpmFileName}"
+ String susefile = "artifact://${env.JOB_NAME}/${env.BUILD_NUMBER}#target/suse/${suseFileName}"
+
+ timestampedNode("docker") {
+ stage "Load Lib"
+ dir('workflowlib') {
+ deleteDir()
+ git branch: packagingBranch, url: 'https://github.com/jenkinsci/packaging.git'
+ flow = load 'workflow/installertest.groovy'
+ }
+ }
+ // Run the real tests within docker node label
+ flow.fetchAndRunJenkinsInstallerTest("docker", rpmfile, susefile, debfile,
+ packagingBranch, artifactName, jenkinsPort)
+ } else {
+ echo "Not running package testing against pull requests"
+ }
+} else {
+ echo "Skipping package tests"
+}
+
+
+// This method sets up the Maven and JDK tools, puts them in the environment along
+// with whatever other arbitrary environment variables we passed in, and runs the
+// body we passed in within that environment.
+void withMavenEnv(List envVars = [], def body) {
+ // The names here are currently hardcoded for my test environment. This needs
+ // to be made more flexible.
+ // Using the "tool" Workflow call automatically installs those tools on the
+ // node.
+ String mvntool = tool name: "mvn3.3.3", type: 'hudson.tasks.Maven$MavenInstallation'
+ String jdktool = tool name: "jdk8_51", type: 'hudson.model.JDK'
+
+ // Set JAVA_HOME, MAVEN_HOME and special PATH variables for the tools we're
+ // using.
+ List mvnEnv = ["PATH+MVN=${mvntool}/bin", "PATH+JDK=${jdktool}/bin", "JAVA_HOME=${jdktool}", "MAVEN_HOME=${mvntool}"]
+
+ // Add any additional environment variables.
+ mvnEnv.addAll(envVars)
+
+ // Invoke the body closure we're passed within the environment we've created.
+ withEnv(mvnEnv) {
+ body.call()
+ }
+}
+
+// Runs the given body within a Timestamper wrapper on the given label.
+def timestampedNode(String label, Closure body) {
+ node(label) {
+ wrap([$class: 'TimestamperBuildWrapper']) {
+ body.call()
+ }
+ }
+}
diff --git a/README.md b/README.md
index 4ecfdb2c3738bd3ca3f83b442ecbb8b315e1e29c..501778372da7f1ab5613f35365efdb50a89d5279 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,32 @@
[![][ButlerImage]][website]
# About
-In a nutshell, Jenkins CI is the leading open-source continuous integration server. Built with Java, it provides over 1000 plugins to support building and testing virtually any project.
+In a nutshell, Jenkins is the leading open-source automation server.
+Built with Java, it provides over 1000 plugins to support automating virtually anything,
+so that humans can actually spend their time doing things machines cannot.
+
+# What to Use Jenkins for and When to Use It
+
+Use Jenkins to automate your development workflow so you can focus on work that matters most. Jenkins is commonly used for:
+
+- Building projects
+- Running tests to detect bugs and other issues as soon as they are introduced
+- Static code analysis
+- Deployment
+
+Execute repetitive tasks, save time, and optimize your development process with Jenkins.
# Downloads
Non-source downloads such as WAR files and several Linux packages can be found on our [Mirrors].
# Source
-Our latest and greatest source of Jenkins CI can be found on [GitHub]. Fork us!
+Our latest and greatest source of Jenkins can be found on [GitHub]. Fork us!
# Contributing to Jenkins
Follow [contributing](CONTRIBUTING.md) file.
# News and Website
-All information about Jenkins CI can be found on our [website]. Follow us on Twitter [@jenkinsci].
+All information about Jenkins can be found on our [website]. Follow us on Twitter [@jenkinsci].
# License
Jenkins is **licensed** under the **[MIT License]**. The terms of the license are as follows:
@@ -40,12 +53,12 @@ Jenkins is **licensed** under the **[MIT License]**. The terms of the license ar
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-[ButlerImage]: http://jenkins-ci.org/sites/default/files/jenkins_logo.png
+[ButlerImage]: https://jenkins.io/sites/default/files/jenkins_logo.png
[MIT License]: https://github.com/jenkinsci/jenkins/raw/master/LICENSE.txt
[Mirrors]: http://mirrors.jenkins-ci.org
[GitHub]: https://github.com/jenkinsci/jenkins
-[website]: http://jenkins-ci.org
-[@jenkinsci]: http://twitter.com/jenkinsci
+[website]: https://jenkins.io/
+[@jenkinsci]: https://twitter.com/jenkinsci
[Contributing]: https://wiki.jenkins-ci.org/display/JENKINS/contributing
[Extend Jenkins]: https://wiki.jenkins-ci.org/display/JENKINS/Extend+Jenkins
[wiki]: https://wiki.jenkins-ci.org
diff --git a/changelog.html b/changelog.html
index 6cd989313a62506745d9b20f2028aac35be4d1f2..dc712b3cc3ccc9cdc8c6580c723f1cce2fdf98c1 100644
--- a/changelog.html
+++ b/changelog.html
@@ -20,19 +20,20 @@ Some tips:
Changelog
-
+
-
+
Legend:
- major enhancement enhancement
- major bug fix bug fix
+ major enhancement enhancement
+ major bug fix bug fix
xxxxx
+
@@ -55,9 +56,745 @@ Upcoming changes
+
+ Provide an extension point for SCM decisions such as whether to poll a specific job's backing
+ repository for changes.
+ (Issue 36123)
+ Prevent stack overflow when using classes with complex generic type arguments
+ (e.g. hudson.model.Run or hudson.model.Job).
+ Regression in Groovy 2.4,
+ see GROOVY-7826 for more info.
+ (issue 34751)
+
+ Do not invoke PingFailureAnalyzer for agent=>master ping failures.
+ (issue 35190)
+
+ Adapt the Setup Wizard GUI to provide a similar user experience when upgrading Jenkins.
+ (issue 33663)
+
+
+ Improve extensibility of the Setup Wizard GUI:
+ InstallState and InstallStateFilter extension points.
+ (PR 2281 as supplimentary change for
+ issue 33663)
+
+ Improve User Experience in the New Item form. Submit button is always visible.
+ (issue 34244)
+
+ Do not throw exceptions if Jenkins.getInstance() returns null instance.
+ It was causing failures on Jenkins agents in the case of unexpected API usage by agents.
+ (issue 34857, regression in 2.4)
+
+ Replace jenkins.model.Jenkins.disableExceptionOnNullInstance by
+ jenkins.model.Jenkins.enableExceptionOnNullInstance to address the
+ behavior change.
+ (issue 34857)
+
+ Add a hudson.model.UpdateCenter.defaultUpdateSiteId system property,
+ which allows specifying an alternate default Update Site ID.
+ (issue 34674)
+
+ Allow setting of properties from context.xml and web.xml
+ in addition to setting system properties from the command line.
+ (issue 34755)
+
+ Remove the historical initialization of CVS changelog parser for jobs without explicit SCM definition.
+ Warning! This change may potentially cause a regression if a Jenkins plugin depends on this default behavior and injects changelogs without SCM.
+ (issue 4610)
+
+ Add the JOB_BASE_NAME environment variable to builds (job name without path).
+ (issue 25164)
+
+ Allow overriding Jenkins UpdateCenter by a custom implementation.
+ (issue 34733)
+
+ Allow overriding Jenkins PluginManager by a custom implementation.
+ (issue 34681)
+
+ Installation Wizard: Allow altering the list of suggested plugins from update sites.
+ (issue 34833)
+
+ Prevent hanging of the Installation Wizard if the default Update Site ID cannot be resolved.
+ In such case an error message will be displayed.
+ (issue 34675)
+
+ Prevent hanging of the Installation Wizard if the internet check is skipped for the default update site.
+ (issue 34705)
+
+ Do not fail with error when enabling a plugin, which has been already enabled.
+ It prevents errors in the new Installation Wizard, which installs plugins in parallel.
+ (issue 34710)
+
+ Plugin Manager was building incorrect list of bundled plugins for nested dependencies.
+ (issue 34748)
+
+ Prevent fatal failure of the updates check PeriodicWork if update site certificate is missing.
+ (issue 34745)
+
+ Pick up missing Downloadable items on restart if all update centers are up to date.
+ (issue 32886)
+
+ Allow starting non-AbstractProject (e.g. Pipeline) jobs from CLI.
+ (issue 28071)
+
+ Disable JSESSIONID in URLs when running in the JBoss web container.
+ It prevents Error 404 due to invalid links starting from Jenkins 1.556.
+ More info: WFLY-4782
+ (issue 34675)
+
+ Prevent RSS ID collisions for items with same name in different folders.
+ (issue 34767)
+
+ Prevent NoSuchMethodException in loginLink.jelly
+ when attempting to start a job using REST API.
+ (issue 31618)
+
+ Make ToolInstallers to follow HTTP 30x redirects.
+ (issue 23507)
+
+ Prevent NullPointerException in the parameter definition job property
+ if it gets initialized incorrectly.
+ (issue 34370)
+
+ Bundle Font Awesome and Google Fonts: Roboto dependencies
+ to prevent failures in the offline mode.
+ (issue 34628)
+
+ Internal: CLI commands disconnect-node and reload-configuration were extracted from the core to CLI.
+ (issue 34328 and
+ issue 31900)
+
+ Internal: Support latest source version to avoid compile time warnings with JDK7.
+ annotation-indexer and
+ sezpoz have been updated to 1.11.
+ (issue 32978)
+
+ Developer API: Switch Jenkins.getInstance() to @Nonnull.
+ (new system property)
+ (pull 2297)
+
+ Remoting, scalability: Ensure that the unexporter cleans up whatever it can each GC sweep.
+ (issue 34213)
+
+ Remoting: Force class load on UserRequest to prevent deadlocks on Windows nodes agents in the case of multiple classloaders.
+ (Controlled by hudson.remoting.RemoteClassLoader.force)
+ (issue 19445)
+
+ More detailed information about the new features in Jenkins 2.0 on the overview page.
+
+
+
+
+ New password-protected setup wizard shown on first run to guide users through installation of popular plugins and setting up an admin user.
+ (issue 30749,
+ issue 9598)
+
+ Plugin bundling overhaul: Bundled plugins are only installed if necessary when upgrading, all plugins can be uninstalled.
+ (issue 20617)
+
+ Redesigned job configuration form makes it easier to understand the option hierarchy, and to navigate the form.
+ (issue 32357)
+
+ Richer 'Create Item' form with job icons and job categories (once a threshold of three categories has been reached).
+ (issue 31162)
+
+
+ Upgrade wizard encourages installation of Pipeline related plugins when upgrading from 1.x.
+ (issue 33662)
+
+ Jenkins now requires Servlet 3.1. Upgraded embedded Winstone-Jetty to Jetty 9 accordingly.
+ This removes AJP support when using the embedded Winstone-Jetty container.
+ (issue 23378)
+
+ Bundled Groovy updated from 1.8.9 to 2.4.6.
+ (issue 21249)
+
+ Added option to prohibit anonymous access to security realm "Logged in users can do anything", enable by default.
+ (issue 30749)
+
+ Renamed 'slave' to 'agent' on the UI.
+ (issue 27268)
+
+ Improvements to inline documentation of numerous form fields in Jenkins global and job configuration.
+ (issue 33364)
+
+ Change default CSRF protection crumb name to Jenkins-Crumb for nginx compatibility.
+ (issue 12875)
+
+
+ Enforce correct icon size in list view.
+ (issue 33799)
+
+ CLI: Fixed NPE when non-existent run is requested.
+ (issue 33942)
+
+
+ Improve logging and error message when JNLP is already in use.
+ (issue 33453)
+
+ NullPointerException from BuildTrigger$DescriptorImpl.doCheck when using Build other projects in Promotion process of a CloudBees template, and perhaps other circumstances.
+ (issue 32525)
+
+ Improved the Build Other Projects help message.
+ (issue 32134)
+
+ Move periodic task log files from JENKINS_HOME/*.log to JENKINS_HOME/logs/tasks/*.log and rotate them periodically rather than overwrite every execution.
+ (issue 33068)
+
+ Fix documentation of proxy configuration.
+ (pull 2060)
+
+ Allow changing the directory used for the extraction of plugin archives via the --pluginroot CLI option (also controllable via the hudson.PluginManager.workDir system property / context parameter. Also document the --webroot CLI parameter in java -jar jenkins.war --help
+ (issue 32765)
+
+ Added support of default values in the enum.jelly form element.
+ (PR 1926)
+
+ Bytecode Compatibility Transformer computes the common super class without loading classes.
+ Fixes the ClassCircularityError exception in Ruby Runtime Plugin.
+ (issue 31019)
+
+ Extended Choice parameter definitions could not be saved since 1.637.
+ (issue 31458)
+
+ Display expected CRON run times even if a warning occurs.
+ (issue 29059)
+
+ Rework the online-node command implementation, no functional changes.
+ (issue 31776)
+