[2.289.2.2] Upgrade/Installation to 2.289.2.2 on CloudBees CI on Traditional through .rpm fails on startup if a Java Option contains spaces

Issue

  • After upgrade CloudBees CI to version 2.289.2.2 or later using RPM, the service fails to start and shows the following:
cloudbees-core-cm[xxxx]: Error: Could not find or load main class <element>

Environment

Explanation

Any installation or upgrade to CloudBees CI on traditional platforms 2.289.2.2 through RPM fails in case the configuration file /etc/sysconfig/cloudbees-core-[cm|oc] contains a java option with spaces in JENKINS_JAVA_OPTIONS. A typical use case is the system property hudson.model.DirectoryBrowserSupport.CSP that usually contains spaces, for example:

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"sandbox allow-same-origin allow-scripts;style-src 'unsafe-inline' _;script-src 'unsafe-inline' _;\""

This would cause the service to fail to start with the following output in systemctl logs.

cloudbees-core-cm[xxxx]: Error: Could not find or load main class allow-same-origin
systemd[1]: cloudbees-core-cm.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Unit cloudbees-core-cm.service entered failed state.
systemd[1]: cloudbees-core-cm.service failed.
systemd[1]: Started cloudbees-core-cm.
systemd[1]: cloudbees-core-cm.service: main process exited, code=exited, status=2/INVALIDARGUMENT

Related Issue(s)

  • BEE-7072: Spaces in configuration for systemd break java startup.

Workaround / Resolution

Until a fix is available, the workaround is to remove the system property that contains spaces from the configuration file /etc/sysconfig/cloudbees-core-[cm|oc] and add that system property explicitly to the service script /usr/bin/cloudbees-core-[cm|oc].

Remove the system property from the Configuration File

  • Edit the /etc/sysconfig/cloudbees-core-cm on the Controller host (or /etc/sysconfig/cloudbees-core-oc for Operations Center)

  • Locate the line where the JENKINS_JAVA_OPTIONS=... are set:

    JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -D<optionName>=\"<value With Spaces>\""
    
  • Remove the system property that contains spaces (in this example -D<optionName>=\"<value With Spaces>\")

    JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
    

Add the system property to the Script File

  • Edit the /usr/bin/cloudbees-core-cm on the Controller host (or /usr/bin/cloudbees-core-oc for Operations Center)

  • Locate the line that execute the java command (this should be the last line of the file)

    $JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS -jar $JENKINS_WAR $PARAMS
    
  • Add the system property that contains spaces before -jar:

    $JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS -D<optionName>="<value With Spaces>" -jar $JENKINS_WAR $PARAMS
    

Restart the service

systemctl restart cloudbees-core-[cm|oc]

Have more questions?

0 Comments

Please sign in to leave a comment.