Search code examples
docker-composesonarqubeupgrade

Exception when upgrading SonarQube from 8.2 to 9.9 LTS


I am trying to upgrade my SonarQube from 8.2 to 9.9 version using Docker Compose.

I am using PostgreSQL as database and have taken the data backup from 8.2 also, now I created new folder and copied all the backup data and attaching to new SonarQube.

But when I start the container, I get the following error in Docker logs and the container is not starting:

2023.04.15 12:28:05 INFO  web[][o.s.s.p.LogServerVersion] SonarQube Server / 9.9.0.65466 / ce743843018827cb30c05735e7971523de34bb48
2023.04.15 12:28:05 INFO  web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://db:5432/sonar
2023.04.15 12:28:05 INFO  web[][c.z.h.HikariDataSource] HikariPool-1 - Starting...
2023.04.15 12:28:05 INFO  web[][c.z.h.p.HikariPool] HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@123456
2023.04.15 12:28:05 INFO  web[][c.z.h.HikariDataSource] HikariPool-1 - Start completed.
2023.04.15 12:28:07 INFO  web[][o.s.s.p.ServerFileSystemImpl] SonarQube home: /opt/sonarqube
2023.04.15 12:28:07 INFO  web[][o.s.s.u.SystemPasscodeImpl] System authentication by passcode is disabled
2023.04.15 12:28:07 WARN  web[][o.s.c.a.AnnotationConfigApplicationContext] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@12345-org.sonar.server.platform.DatabaseServerCompatibility': Initialization of bean failed; nested exception is Current version is too old. Please upgrade to Long Term Support version firstly.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@123456-org.sonar.server.platform.DatabaseServerCompatibility': Initialization of bean failed; nested exception is Current version is too old. Please upgrade to Long Term Support version firstly.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:628)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
    at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:187)
    at org.sonar.server.platform.platformlevel.PlatformLevel.start(PlatformLevel.java:80)
    at org.sonar.server.platform.platformlevel.PlatformLevel2.start(PlatformLevel2.java:103)
    at org.sonar.server.platform.PlatformImpl.start(PlatformImpl.java:196)
    at org.sonar.server.platform.PlatformImpl.startLevel2Container(PlatformImpl.java:169)
    at org.sonar.server.platform.PlatformImpl.init(PlatformImpl.java:77)
    at org.sonar.server.platform.web.PlatformServletContextListener.contextInitialized(PlatformServletContextListener.java:43)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4764)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5222)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:265)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:430)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.sonar.server.app.EmbeddedTomcat.start(EmbeddedTomcat.java:72)
    at org.sonar.server.app.WebServer.start(WebServer.java:55)
    at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:97)
    at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:81)
    at org.sonar.server.app.WebServer.main(WebServer.java:104)
Caused by: org.sonar.api.utils.MessageException: Current version is too old. Please upgrade to Long Term Support version firstly.
2023.04.15 12:28:07 INFO  web[][c.z.h.HikariDataSource] HikariPool-1 - Shutdown initiated...
2023.04.15 12:28:07 INFO  web[][c.z.h.HikariDataSource] HikariPool-1 - Shutdown completed.
2023.04.15 12:28:08 INFO  web[][o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000
2023.04.15 12:28:08 INFO  web[][o.s.p.ProcessEntryPoint] Hard stopping process
2023.04.15 12:28:08 INFO  app[][o.s.a.SchedulerImpl] Process[Web Server] is stopped
2023.04.15 12:28:08 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ElasticSearch]: 143
2023.04.15 12:28:08 INFO  app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped
2023.04.15 12:28:08 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped
2023.04.15 12:28:09 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp

Here is my Docker Compose file:

version: "3.3"
services:
  sonarqube:
          #    image: sonarqube:8.9-community       
    build:
      context: ./sonarqube/
    container_name: sonarqube
    restart: always
    depends_on:
      - db
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - /home/ubuntu/sonar/sonar_bk/sonarqube_data:/opt/sonarqube/data
      - /home/ubuntu/sonar/sonar_bk/sonarqube_extensions:/opt/sonarqube/extensions
      - /home/ubuntu/sonar/sonar_bk/sonarqube_logs:/opt/sonarqube/logs
  db:
    image: postgres:12
    container_name: postgres
    restart: always
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
     - /home/ubuntu/sonar/sonar_bk/postgresql:/var/lib/postgresql
     - /home/ubuntu/sonar/sonar_bk/postgresql_data:/var/lib/postgresql/data

networks:
  sonarnet:
    driver: bridge

Here I am using PostgreSQL 12 as my previous configuration is configured with 12 only and using Docker version 23.

I used Dockerfile from sonarqube 9.9 github repo.

How can I sort it out? Thanks in advance.


Solution

  • According to Sonarqube's documentation, you can't just upgrade from an older version to the latest. You have to first upgrade through all previous latest LTS versions before reaching your target.

    See https://docs.sonarqube.org/latest/setup-and-upgrade/upgrade-the-server/before-you-upgrade/#migration-path

    I think in your case, you would have to first upgrade to 8.9LTS before upgrading to 9.9LTS.