[CloudBees CI 2.277.1.2] JENKINS-56109: Change Jenkins configuration UI from tables to divs

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.

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.

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:
1. 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
2. Upgrade all the plugins listed under Manage Jenkins » Manage Plugins (Updates tab)
3. 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.

Appendix A. Plugins known to be incompatible with the tabs to divs change at the time of release

PluginStatusProvided PRComments
analysis-coreOBSOLETE 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.
authorize-projectCOMPATIBLE Compatible since 1.4.0
aws-sqsINCOMPATIBLE JENKINS-65834
build-name-setter-pluginINCOMPATIBLE JENKINS-65549
checkstyleINCOMPATIBLE 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.
coverityOBSOLETE 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.
createjobadvancedCOMPATIBLE Compatible since 1.9.0
custom-tools-pluginCOMPATIBLE Compatible since 0.8
cvsCOMPATIBLE Compatible since 2.18
deployit-pluginINCOMPATIBLEhttps://github.com/jenkinsci/xldeploy-plugin/pull/72Not compatible until PR is merged and released by the maintainer.
dryOBSOLETE 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.
findbugsOBSOLETE INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin
fortifyCOMPATIBLE Compatible since 20.2.35
fstriggerCOMPATIBLE Compatible since 0.40
gerrit-triggerCOMPATIBLE Compatible since 2.32.1
github-sqs-pluginINCOMPATIBLEhttps://github.com/jenkinsci/github-sqs-plugin/pull/20JENKINS-65729. Not compatible until PR is merged and released by the maintainer
gitlab-pluginCOMPATIBLEhttps://github.com/jenkinsci/gitlab-plugin/pull/1109Compatible since 1.5.20
google-container-registry-authINCOMPATIBLE There is not currently a fix.
hp-application-automation-toolsCOMPATIBLE Compatible since 6.8
http_requestCOMPATIBLEhttps://github.com/jenkinsci/http-request-plugin/pull/52Compatible since 1.8.27
joinINCOMPATIBLEhttps://github.com/jenkinsci/join-plugin/pull/16Not compatible. PR is merged but not released yet by the maintainer.
mask-passwordsCOMPATIBLE Compatible since 3.0
multi-slave-config-pluginOBSOLETE Last time it was releases was 5 years ago. This plugin should not be used
multiple-scmsOBSOLETE 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
notificationINCOMPATIBLE JENKINS-65747
openstack-cloudCOMPATIBLE Compatible since 2.57
ownershipCOMPATIBLE Compatible since 0.13.0
perforceOBSOLETE This plugin is deprecated. It was superseded by P4 plugin
performanceCOMPATIBLE Compatible since 3.20
performance-signature-dynatraceCOMPATIBLE Compatible since 3.2.1
performance-signature-dynatracesaasCOMPATIBLE Compatible since 3.2.1
performance-signature-uiCOMPATIBLE Compatible since 3.2.1
performance-signature-viewerCOMPATIBLE Compatible since 3.2.1
plotCOMPATIBLE Compatible since 2.1.9
pmdOBSOLETE INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin
PrioritySorterCOMPATIBLEhttps://github.com/jenkinsci/priority-sorter-plugin/pull/53Compatible since 4.0.0
publish-over-dropboxCOMPATIBLEhttps://github.com/jenkinsci/publish-over-dropbox-plugin/pull/4Compatible since 1.3.0
publish-over-ftpCOMPATIBLEhttps://github.com/jenkinsci/publish-over-ftp-plugin/pull/9Compatible since 1.16
rebuildCOMPATIBLE Compatible since 1.32
scriptlerCOMPATIBLE Compatible since 3.2
tasksOBSOLETE INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin
teamconcertINCOMPATIBLE There is not currently a fix.
tfsINCOMPATIBLE There is not currently a fix. JENKINS-64241, and Distribution of this plugin has been suspended due to unresolved security vulnerabilities
warningsOBSOLETE INFRA-2487 This plugin reached end-of-life. All functionality has been integrated into the Warnings Next Generation Plugin
xldeploy-pluginINCOMPATIBLEhttps://github.com/jenkinsci/xldeploy-plugin/pull/72/filesNot compatible until PR is merged and released by the maintainer.
neoload-jenkins-pluginINCOMPATIBLE JENKINS-65748 There is not currently a fix.

Appendix B. Health check Groovy script

import hudson.util.VersionNumber

def plugins = [
        'analysis-core': [version: null, status: 'obsolete', fix: ''],
        'authorize-project': [version: new VersionNumber('1.4.0'), status: 'incompatible', fix: ''],
        'aws-sqs': [version: null, status: 'incompatible', fix: ''],
        'build-name-setter-plugin': [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: ''],
        '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: ''],
        'notification': [version: null, 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'],
        '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: null, status: 'incompatible', fix: ''],
        'tfs': [version: null, status: 'incompatible', fix: ''],
        'warnings': [version: null, status: 'incompatible', fix: ''],
        'xldeploy-plugin': [version: null, status: 'incompatible', fix: 'https://github.com/jenkinsci/xldeploy-plugin/pull/72/files'],
        'neoload-jenkins-plugin': [version: null, status: 'incompatible', 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.

Have more questions?

0 Comments

Please sign in to leave a comment.