Introduction
The CloudBees CI release 2.277.1.2 includes JENKINS-56109: Change Jenkins configuration UI from tables to divs. Jenkins core changed its layout form from 'table' to 'div' in 2.264.
Motivation
Jenkins’s jelly framework generated a lot of of tables, which sometimes do not render correctly when changing the window’s size. These tables are very mobile hostile. The UI it generates is also not in line with modern UIs. See JENKINS-56109 for more details.
Expected symptoms of regressions
All plugins which are tier 1, or tier 2 are expected to work properly. However, there might be tier 3 plugins which might not work correctly.
The main symptoms are tables not rendering correctly or form submission failures. In case that an affected plugin is configurable under Manage Jenkins » Configure System, you might not be able to save the Jenkins Global Configuration until the affected plugin is either updated, or disabled - depending on if there is already a plugin release compatible with the change. In the same way, if the plugin is configurable at Job level, jobs might not be able to be reconfigurable until the problem is fixed by either, disabling the plugin or updating the plugin to a compatible version.
Some plugins are known to be broken. The Jenkins Community is tracking the status of these plugins using this EPIC.
Some plugins are broken only in some edge cases. For example Ansible Jenkins plugin (1.1) causes form rendering issue when used via the PostBuildScript plugin (3.0.0) but not on its own. Also, Multijob Plugin (1.36) causes form rendering issues when used via the PostBuildScript plugin (3.0.0) but not on its own.
Apart from the effort from the Jenkins community, the CloudBees support team has gone through the full plugin list provided by the community and has verified the status of each plugin, providing a PR to fix the underlaying issue when possible.
The Appendix A of this document contains the status of each of the plugins which are impacted by this change and its current status at 23rd of April 2021.
Environment
This change is present since the 2.277.1 line in all products listed below. And issues might be seen when you upgrade from a version prior to CloudBees CI 2.277.1.
-
CloudBees CI (CloudBees Core) on modern cloud platforms - Managed controller - 2.277.1
-
CloudBees CI (CloudBees Core) on modern cloud platforms - Operations Center - 2.277.1
-
CloudBees CI (CloudBees Core) on traditional platforms - Client controller - 2.277.1
-
CloudBees CI (CloudBees Core) on traditional platforms - Operations Center - 2.277.1
-
CloudBees Jenkins Distribution - 2.277.1
-
CloudBees Jenkins Enterprise - 1.11.45
Resolution
As a general rule, to avoid any issues related to this change, and any other problem in the March release, it is suggested to:
-
Make sure Beekeeper is configured to upgrade CAP plugins. For this, ensure that the option Manage Jenkins » Beekeeper Upgrade Assistant » CAP Configuration » Allow automatic upgrades of plugins on restart is enabled
-
Upgrade all the plugins listed under Manage Jenkins » Manage Plugins (Updates tab)
-
Run the Groovy script from the Appendix B under Manage Jenkins » Script Console and check if there is still any plugin with a specific issue.
The Build Name and Description Setter is a special case that is resolved by an update of the core version of the product to version 2.332.3 or greater. |
Appendix A. Plugins known to be incompatible with the tabs to divs change at the time of release
Plugin | Status | Provided PR | Comments |
---|---|---|---|
analysis-core |
OBSOLETE |
INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin and the Static Analysis Model and Parsers Library. |
|
app-detector |
INCOMPATIBLE |
There is not currently a fix. |
|
artifactory |
COMPATIBLE |
Compatible since 3.9.1 |
|
authorize-project |
COMPATIBLE |
Compatible since 1.4.0 |
|
aws-sqs |
INCOMPATIBLE |
||
build-timeout |
COMPATIBLE |
Compatible since 1.33 |
|
checkstyle |
INCOMPATIBLE |
INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin and the Static Analysis Model and Parsers Library. |
|
coverity |
OBSOLETE |
JENKINS-62855 As per https://plugins.jenkins.io/coverity/ This plugin is no longer maintained. The functionality has been migrated onto the new Synopsys Coverity Jenkins plugin. |
|
createjobadvanced |
COMPATIBLE |
Compatible since 1.9.0 |
|
custom-tools-plugin |
COMPATIBLE |
Compatible since 0.8 |
|
cvs |
COMPATIBLE |
Compatible since 2.18 |
|
deployit-plugin |
INCOMPATIBLE |
Not compatible until PR is merged and released by the maintainer. |
|
dry |
OBSOLETE |
INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin and the Static Analysis Model and Parsers Library. |
|
findbugs |
OBSOLETE |
INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin |
|
fortify |
COMPATIBLE |
Compatible since 20.2.35 |
|
fstrigger |
COMPATIBLE |
Compatible since 0.40 |
|
gerrit-trigger |
COMPATIBLE |
Compatible since 2.32.1 |
|
github-sqs-plugin |
INCOMPATIBLE |
JENKINS-65729. Not compatible until PR is merged and released by the maintainer |
|
gitlab-plugin |
COMPATIBLE |
Compatible since 1.5.20 |
|
google-container-registry-auth |
INCOMPATIBLE |
There is not currently a fix. |
|
hp-application-automation-tools |
COMPATIBLE |
Compatible since 6.8 |
|
http_request |
COMPATIBLE |
Compatible since 1.8.27 |
|
job-direct-mail |
INCOMPATIBLE |
There is not currently a fix. |
|
join |
INCOMPATIBLE |
JENKINS-64639 Not compatible until PR is released by the maintainer |
|
mask-passwords |
COMPATIBLE |
Compatible since 3.0 |
|
multi-slave-config-plugin |
OBSOLETE |
Last time it was releases was 5 years ago. This plugin should not be used |
|
multiple-scms |
OBSOLETE |
This plugin has been marked as deprecated. In general, this means that this plugin is either obsolete, no longer being developed, or may no longer work |
|
neoload-jenkins-plugin |
COMPATIBLE |
Compatible since 2.2.10 |
|
notification |
COMPATIBLE |
Compatible since 1.14 |
|
openstack-cloud |
COMPATIBLE |
Compatible since 2.57 |
|
ownership |
COMPATIBLE |
Compatible since 0.13.0 |
|
perforce |
OBSOLETE |
This plugin is deprecated. It was superseded by P4 plugin |
|
performance |
COMPATIBLE |
Compatible since 3.20 |
|
performance-signature-dynatrace |
COMPATIBLE |
Compatible since 3.2.1 |
|
performance-signature-dynatracesaas |
COMPATIBLE |
Compatible since 3.2.1 |
|
performance-signature-ui |
COMPATIBLE |
Compatible since 3.2.1 |
|
performance-signature-viewer |
COMPATIBLE |
Compatible since 3.2.1 |
|
plot |
COMPATIBLE |
Compatible since 2.1.9 |
|
pmd |
OBSOLETE |
INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin |
|
PrioritySorter |
COMPATIBLE |
Compatible since 4.0.0 |
|
publish-over-dropbox |
COMPATIBLE |
Compatible since 1.3.0 |
|
publish-over-ftp |
COMPATIBLE |
Compatible since 1.16 |
|
publish-over-ssh |
COMPATIBLE |
Compatible since 1.21 |
|
rebuild |
COMPATIBLE |
Compatible since 1.32 |
|
scriptler |
COMPATIBLE |
Compatible since 3.2 |
|
tasks |
OBSOLETE |
INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin |
|
teamconcert |
COMPATIBLE |
Compatible since 2.2.1 |
|
tfs |
INCOMPATIBLE |
There is not currently a fix. JENKINS-64241, and Distribution of this plugin has been suspended due to unresolved security vulnerabilities |
|
vsphere-cloud |
COMPATIBLE |
Compatible since 2.25 |
|
warnings |
OBSOLETE |
INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin |
|
xldeploy-plugin |
COMPATIBLE |
Compatible since 10.0.0 |
|
android-emulator |
COMPATIBLE |
Compatible since 3.1.3 |
|
locks-and-latches |
OBSOLETE |
This plugin has been marked as deprecated. In general, this means that this plugin is either obsolete, no longer being developed, or may no longer work |
Appendix B. Health check Groovy script
import hudson.util.VersionNumber def plugins = [ 'analysis-core': [version: null, status: 'obsolete', fix: ''], 'app-detector': [version: null, status: 'incompatible', fix: ''], 'artifactory': [version: new VersionNumber('3.9.1'), status: 'incompatible', fix: ''], 'authorize-project': [version: new VersionNumber('1.4.0'), status: 'incompatible', fix: ''], 'aws-sqs': [version: null, status: 'incompatible', fix: ''], 'checkstyle': [version: null, status: 'incompatible', fix: ''], 'coverity': [version: null, status: 'obsolete', fix: ''], 'createjobadvanced': [version: new VersionNumber('1.9.0'), status: 'incompatible', fix: ''], 'custom-tools-plugin': [version: new VersionNumber('0.8'), status: 'incompatible', fix: ''], 'cvs': [version: new VersionNumber('2.18'), status: 'incompatible', fix: ''], 'deployit-plugin': [version: null, status: 'incompatible', fix: 'https://github.com/jenkinsci/xldeploy-plugin/pull/72'], 'dry': [version: null, status: 'obsolete', fix: ''], 'findbugs': [version: null, status: 'incompatible', fix: ''], 'fortify': [version: new VersionNumber('20.2.35'), status: 'incompatible', fix: ''], 'fstrigger': [version: new VersionNumber('0.40'), status: 'incompatible', fix: ''], 'gerrit-trigger': [version: new VersionNumber('2.32.1'), status: 'incompatible', fix: ''], 'github-sqs-plugin': [version: null, status: 'incompatible', fix: ''], 'gitlab-plugin': [version: new VersionNumber('1.5.20'), status: 'incompatible', fix: 'https://github.com/jenkinsci/gitlab-plugin/pull/1109'], 'google-container-registry-auth': [version: null, status: 'incompatible', fix: ''], 'hp-application-automation-tools-plugin': [version: new VersionNumber('6.8'), status: 'incompatible', fix: ''], 'http_request': [version: new VersionNumber('1.8.27'), status: 'incompatible', fix: ''], 'job-direct-mail': [version: null, status: 'incompatible', fix: ''], 'join': [version: null, status: 'incompatible', fix: 'https://github.com/jenkinsci/join-plugin/pull/16'], 'mask-passwords': [version: new VersionNumber('3.0'), status: 'incompatible', fix: ''], 'multi-slave-config-plugin': [version: null, status: 'obsolete', fix: ''], 'multiple-scms': [version: null, status: 'obsolete', fix: ''], 'neoload-jenkins-plugin': [version: new VersionNumber('2.2.10'), status: 'incompatible', fix: 'https://github.com/jenkinsci/neoload-plugin/pull/18'], 'notification': [version: new VersionNumber('1.14'), status: 'incompatible', fix: ''], 'openstack-cloud': [version: new VersionNumber('2.57'), status: 'incompatible', fix: ''], 'ownership': [version: new VersionNumber('0.13.0'), status: 'incompatible', fix: ''], 'perforce': [version: null, status: 'obsolete', fix: ''], 'performance': [version: new VersionNumber('3.20'), status: 'incompatible', fix: ''], 'performance-signature-dynatrace': [version: new VersionNumber('3.2.1'), status: 'incompatible', fix: ''], 'performance-signature-dynatracesaas': [version: new VersionNumber('3.2.1'), status: 'incompatible', fix: ''], 'performance-signature-ui': [version: new VersionNumber('3.2.1'), status: 'incompatible', fix: ''], 'performance-signature-viewer': [version: new VersionNumber('3.2.1'), status: 'incompatible', fix: ''], 'plot': [version: new VersionNumber('2.1.9'), status: 'incompatible', fix: ''], 'pmd': [version: null, status: 'incompatible', fix: ''], 'PrioritySorter': [version: new VersionNumber('4.0.0'), status: 'incompatible', fix: 'https://github.com/jenkinsci/priority-sorter-plugin/pull/53'], 'publish-over-dropbox': [version: new VersionNumber('1.3.0'), status: 'incompatible', fix: 'https://github.com/jenkinsci/publish-over-dropbox-plugin/pull/4'], 'publish-over-ftp': [version: new VersionNumber('1.16'), status: 'incompatible', fix: 'https://github.com/jenkinsci/publish-over-ftp-plugin/pull/9'], 'publish-over-ssh': [version: new VersionNumber('1.21'), status: 'incompatible', fix: ''], 'rebuild': [version: new VersionNumber('1.32'), status: 'incompatible', fix: ''], 'scriptler': [version: new VersionNumber('3.2'), status: 'incompatible', fix: ''], 'tasks': [version: null, status: 'incompatible', fix: ''], 'teamconcert': [version: new VersionNumber('2.2.1'), status: 'incompatible', fix: ''], 'tfs': [version: null, status: 'incompatible', fix: ''], 'vsphere-cloud': [version: new VersionNumber('2.25'), status: 'incompatible', fix: ''], 'warnings': [version: null, status: 'incompatible', fix: ''], 'xldeploy-plugin': [version: new VersionNumber('10.0.0'), status: 'incompatible', fix: 'https://github.com/jenkinsci/xldeploy-plugin/pull/72/files'], 'android-emulator': [version: new VersionNumber('3.1.3'), status: 'incompatible', fix: 'https://github.com/jenkinsci/android-emulator-plugin/pull/83/'], 'locks-and-latches': [version: null, status: 'obsolete', fix: ''] ] println "------------------------- Legend -------------------------" println "obsolete: The plugin should not be used anymore. No test was performed at all." println "incompatible: The plugin is not compatible and should be removed" println "------------------------- List of issues -------------------------" Jenkins.get().pluginManager.plugins.findAll({plugins.containsKey(it.shortName)}).each { def pluginIssue = plugins.get(it.shortName) if (pluginIssue.version == null || it.isOlderThan(pluginIssue.version)) { print "[WARNING] '${it.displayName}' status is ${pluginIssue.status}" if (pluginIssue.version) { print " but there is new version with a fix ${pluginIssue.version}" } else if (!pluginIssue.fix.isEmpty()) { print " but there is PR with the fix ${pluginIssue.fix}" } println() } } println "-------------------------"
Appendix C. List of all tabs to divs reported issue
All issues that were reported and related to tabs to divs are available in this table.