Bamboo Data Center 10.0 (rc5) Early Access Program release

We are pleased to announce the availability of the new version of Bamboo Data Center 10.0 Early Access Program (EAP) release (rc5).

This EAP release allows partners and customers who have written in-house apps to update their apps before the public release of Bamboo 10.0.

Due no earlier than Aug 14, 2024, Bamboo 10.0 is our next platform release and will contain breaking changes.

Important things to note about this EAP release:

  • Do not use this EAP release in production environments. For all production use and testing of Bamboo, use the latest official release 9 instead.
  • The general availability release is still underway and may contain some minor API changes. However, this EAP release is intended to contain a complete picture of Bamboo 10.0’s API.

Using the EAP

EAP is available for download as a zip archive for Windows x64 and tar.gz archive for Linux. For installation instructions, refer to documentation.

Overview of changes in the EAP

Please read this post to learn about important changes that were released in the previous eap version (rc3)

Removal of Guava from API

Guava usage removed from public API in bamboo-api and bamboo-core packages

Created new classes to replace usage of Guava API

  • com.atlassian.bamboo.utils.collection.multimap.ImmutableListMultimap
  • com.atlassian.bamboo.utils.collection.multimap.ImmutableMultimap
  • com.atlassian.bamboo.utils.collection.multimap.ImmutableSetMultimap
  • com.atlassian.bamboo.utils.collection.multimap.LinkedSetMultimap
  • com.atlassian.bamboo.utils.collection.multimap.ListMultimap
  • com.atlassian.bamboo.utils.collection.multimap.Multimap
  • com.atlassian.bamboo.utils.collection.multimap.SetMultimap
  • com.atlassian.bamboo.utils.collection.multimap.TreeMultimap
  • com.atlassian.bamboo.utils.ByteSource
  • com.atlassian.bamboo.utils.Throwables
  • com.atlassian.bamboo.utils.Validations

Class com.atlassian.bamboo.utils.Validations was created to replace usage of static methods from com.google.common.base.Preconditions.

Usage of com.google.common.base.Predicate was replaced with java.util.function.Predicate

Usage of com.google.common.base.Function was replaced with java.util.function.Function.

Class com.atlassian.bamboo.util.CallableResultCache was marked as internal and cannot be used by plugins anymore.

Updated atlassian-spring with removal of Guava API usage.

Bundled atlassian-whitelist plugin

Bundled atlassian-whitelist plugin and use API from it for Git/Github/Bitbucket Server/Bitbucket Cloud test connection validation of remote URL.

2 Likes

We have an app using resources (custom js and css files), these resources not loaded at first run, after restarting bamboo the resources enabled and works as expected, can not see any useful logs on browser console or in the application logs, really apricated for suggestions

<web-resource name="Common Web Resources" key="resources-common">
        <dependency>com.atlassian.auiplugin:ajs</dependency>
        <dependency>com.atlassian.auiplugin:aui-help</dependency>
        <dependency>com.atlassian.auiplugin:dialog2</dependency>
        <transformation extension="js">
            <transformer key="jsI18n"/>
        </transformation>
        <resource type="download" name="images/" location="images/"/>

        <resource type="download" name="common.js" location="common/common.js"/>
        <resource type="download" name="admin.css" location="common/admin.css"/>

        <context>test.plugins.test.common</context>
    </web-resource>

calling it with

 $webResourceManager.requireResourcesForContext("test.plugins.test.common")
1 Like

Hello

The com.atlassian.plugin.web.model.WebPanel is still defined in webfragment-7.0.2, but deprecated.

However, at runtime using the deprecated class fails to resolve:

Caused by: java.lang.ClassNotFoundException: com.atlassian.plugin.web.model.WebPanel not found by ch.mibex.bamboo.sonar4bamboo [128]
        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1591) ~[org.apache.felix.framework-7.0.5.jar:?]
        at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[org.apache.felix.framework-7.0.5.jar:?]
        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1976) ~[org.apache.felix.framework-7.0.5.jar:?]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?]
        ... 140 more

The new com.atlassian.plugin.web.api.model.WebPanel does work on Bamboo 10, but isn’t available in still supported 9.x releases. This prevents us from having the app work across versions, supporting all still supported Bamboo versions and Bamboo 10.

So, my question:

  • Any chance to still export the deprecated edition of the class?
  • Or is there a way declare different versions of theweb-panel in the atlassian-plugin.xml. Or reference a factory for the instance. This way we could instantiate

Hi @artucismet , did this issue continue later on? Changes in the atlassian-plugin.xml do require a plugin re-installation, at minimum.

Hello @RomanStoffel, the team is investigating this issue. Thanks for the report.

Here the test I made, after a clean setup of atlassian-bamboo-10.0.0-rc5-x64, and uploading the app, A servet screen in the app is broken (custom js and css files not load properly)., even re-install the plugin not fix the problem. After stop bamboo and start it again, the UI coming back as usual, also I clear the plugin cache and still the UI is working good. Just until restart Bamboo UI is broken after restart bamboo everything works fine.

1 Like

Here is a sample example that , JS alert work on previous versions but not work on Bamboo rc5
https://bitbucket.org/artuci/refapp-canary/src/master/

1 Like

Hey, I just created a bamboo instance from the docker image, and I cannot log in. There is an infinite redirect happening:

Any idea?

Hello @chrschommer,

This is an expected issue and will be documented in the upcoming Bamboo 10.0.0 release notes. Bamboo 10.0.0 uses a new login URI from userlogin!doDefault.action to userlogin.action.

As official Bamboo 10.0.0 Docker images are still to be published, you can retrieve a Bamboo 9.6.x image and copy the contents of the following file to your Bamboo 10.0.0 custom image:

  • /opt/atlassian/etc/seraph-config.xml.j2

Here’s the relevant part:

<security-config>
    <parameters>
        <init-param>
        {%- set bamboo_version_parts = bamboo_version.split('.') %}
        {%- if bamboo_version_parts[0]|int >= 10 %}
            {%- set login_url = '/userlogin.action?os_destination=${originalurl}' %}
        {%- else %}
            {%- set login_url = '/userlogin!doDefault.action?os_destination=${originalurl}' %}
        {%- endif %}

That should do the trick.

The official code is here

Sincerely,

Eduardo Alvarenga
Atlassian Support APAC

[Support for Server products ended on Feb. 15th, 2024|Atlassian Server end of support information | Atlassian]. Migrate to stay supported.

Hey Eduaordo,

thanks for your reply.

I would like to avoid building custom Bamboo images … this was primarily the reason we switched to Atlassian images.

Is there a plan to ship another rc with the change before release?

Hi @chrschommer,

We understand your concern. Luckly the issue is not present on the latest atlassian/bamboo:10.0.0-rc5-jdk17 image.

So you can understand, the docker image’s entrypoint script creates the /opt/atlassian/bamboo/atlassian-bamboo/WEB-INF/seraph-config.xml file during the container startup. That file is created based on a Jinja2 template in /opt/atlassian/etc/seraph-config.xml.j2.

Can you validate your Docker setup and make sure there’s nothing blocking /opt/atlassian/bamboo/atlassian-bamboo/WEB-INF/classes/seraph-config.xml from being created/modified inside the container?

Here’s the expected file format:

$ docker run --name bamboo10 -d -it --rm atlassian/bamboo:10.0.0-rc5-jdk17 && docker exec -it bamboo10 bash -c "head -10 /opt/atlassian/bamboo/atlassian-bamboo/WEB-INF/classes/seraph-config.xml" && docker rm -f bamboo10 
d1b30ac44dfadbec9f9cf61700febebd74e57318670931e209f644ef1f91fabb
<!--  ================================================================ -->
<!--  The Seraph security configuration.                               -->
<!--  ================================================================ -->

<security-config>
    <parameters>
        <init-param>
            <param-name>login.url</param-name>
            <param-value>/userlogin.action?os_destination=${originalurl}</param-value>
        </init-param>
bamboo10

Hi @EduardoAlvarenga ,
I just created a new instance with version 10.0.0-rc5-jdk15 and checked the seraph.xml … it looks different:

    <parameters>
        <init-param>
            <param-name>login.url</param-name>
            <param-value>/userlogin!doDefault.action?os_destination=${originalurl}</param-value>
        </init-param>

Hello @chrschommer! Thanks for the feedback.

The login URI is not correct. You may investigate your previous docker environment as it may have some layers caching issues.

Kind regards,

Eduardo Alvarenga
Atlassian Support APAC

Sadly, I am still in the redirection loop:

for the jdk17 version
Screenshot 2024-08-07 at 14.03.58

Hello @chrschommer,

Apologies for overseeing your last message. I had the impression I saw /userlogin.action but you actually have /userlogin!doDefault.action which is not correct.

The userlogin!doDefault.action URI is not used in Bamboo 10.0.0. If you still see that page we recommend you investigate your local implementation for any caches, proxy configurations, etc.

Bamboo uses the value of the BAMBOO_VERSION docker environment variable to determine its version. If you are injecting variables in your container, that may be interfering with its decision towards the correct version to use.

Can you share how you are running your docker container? We’d be interested to find the exact docker run or the contents of the docker-compose file. Investigate the contents of your /opt/atlassian/bamboo/atlassian-bamboo/WEB-INF/classes/seraph-config.xml and validate if they are correct.

If you are running Bamboo behind a reverse Proxy, check its configuration as it may be modifying the requests.

If you still have questions, se we invite you to open a support ticket at https://support.atlassian.com

Best regards,

Eduardo Alvarenga
Atlassian Support APAC

Thanks for your help, I’ll check with our docker/kuberntes cluster when he is available again.

@chrschommer when deploying to kube, do you set data-center-helm-charts/src/main/charts/bamboo/values.yaml at main · atlassian/data-center-helm-charts · GitHub to true by any chance? If you do, it explains it.

It’s the old url in the template data-center-helm-charts/src/main/charts/bamboo/templates/configmap-server-config.yaml at main · atlassian/data-center-helm-charts · GitHub

Config file are typically generated in the image entrypoint, however, when running containers as non root (for example in OpenShift), templates can’t be generated, and in this case, they can be generated by Helm and mounted from a ConfigMap. The above template is not yet 10.x ready.

Any response to this

Here the test I made, after a clean setup of atlassian-bamboo-10.0.0-rc5-x64, and uploading the app, A servet screen in the app is broken (custom js and css files not load properly)., even re-install the plugin not fix the problem. After stop bamboo and start it again, the UI coming back as usual, also I clear the plugin cache and still the UI is working good. Just until restart Bamboo UI is broken after restart bamboo everything works fine.

It seems webresourcemanager caches not correctly invalidated after plugins are installed and requests for plugin webresources are not included in the batch when freshly installed until after a bamboo restart.

2 Likes

Hi,

We’re running into an issue when trying to access com.atlassian.crowd.service.cluster.ClusterService. This code

ClusterService locatedClusterService = ComponentLocator.getComponent(ClusterService.class);

results in this Exception in the log:

Caused by: java.lang.ClassNotFoundException: com.atlassian.crowd.service.cluster.ClusterService not found by de.resolution.usersync.app [123]
	at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1591) ~[org.apache.felix.framework-7.0.5.jar:?]
	at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[org.apache.felix.framework-7.0.5.jar:?]
	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1976) ~[org.apache.felix.framework-7.0.5.jar:?]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?]
	at de.resolution.usersync.impl.bamboo.BambooClusterNodeInformation.<init>(BambooClusterNodeInformation.java:29) ~[?:?]

Using the @ComponentImport - annotation instead of the ComponentLocator results in a similar error. Is that a known issue?

It’s working finde with Bamboo 9.

Kind Regards

Jörg

Hello @richard.white! We can confirm the issue and for now we are investigating a fix.

4 Likes