본문 바로가기

시스템/sonarqube

[sonarqube] 업그레이드 하기(9.4.0 -> 9.9.1)

반응형

업그레이드 전에


업그레이드 버전 사이에 LTS 버전이 있다면 LTS버전으로 먼저 업그레이드 후에 목적한 버전으로 업그레이드를 진행해야 한다.(LTS 버전은 최근을 기점으로 8.9 -> 9.9 이다.)

예를 들어

8.1 -> 9.4 로 업그레이드를 진행하려한다면 8.1 -> 8.9 LTS -> 9.8 순으로 해야합니다.

관련 내용 참조 : https://docs.sonarsource.com/sonarqube/9.9/setup-and-upgrade/upgrade-the-server/before-you-upgrade/#migration-path

 

Before you upgrade

This page contains some concepts and recommendations that you should familiarize yourself with before upgrading to another SonarQube version.

docs.sonarsource.com

 

 

 

 

 

요구사항


 

하드웨어

9.9 버전의 하드웨어 요구 사항은 엔터프라이즈 급 CPU 8Core, RAM 16G 이상을 요구하며 elasticsearch 가 사용하는 data 디렉토리의 경우 높은 I/O 를 요구 하므로 DISK 선택시 고려해야한다.

관련 내용 참조 : https://docs.sonarsource.com/sonarqube/9.9/requirements/prerequisites-and-overview/#hardware-requirements

 

Prerequisites and overview

The prerequisities for installing SonarQube.

docs.sonarsource.com

 

 

 

지원 플랫폼

11버전의 java 는 지원 되지 않으니 업그레이드 시 유의 해야한다.

지원되는 JAVA 버전
지원되는 DB 버전

관련 내용 참조 : https://docs.sonarsource.com/sonarqube/9.9/requirements/prerequisites-and-overview/#supported-platforms

 

Prerequisites and overview

The prerequisities for installing SonarQube.

docs.sonarsource.com

 

 

 

 

사전 작업


 

커널파라미터

9.4 버전 구축 시 적용했던 설정일지도 모르나 업그레이드에 앞서 한번더 점검한다. 설정은 root로 한다.

$ vim /etc/sysctl.d/99-sonar.conf 
vm.max_map_count=524288
fs.file-max=131072

 

적용 및 확인

$ sysctl -p
$ sysctl -a | grep "vm.max_map_count\|fs.file-max"
fs.file-max = 131072
vm.max_map_count = 524288

 

 

 

ulimit

sonarqube 는 sonar 계정으로 띄울 예정이다. 설정은 root로 한다.

$ vim /etc/security/limits.d/99-sonar.conf 
sonar - nofile 131072
sonar - nproc 8192

 

적용 및 확인

적용은 reboot 으로 하며 아래 내용으로 확인한다.

$ su - sonar
$ ulimit -aH
...
open files                      (-n) 131072
...
max user processes              (-u) 8192
...

 

 

 

 

업그레이드 작업


 

Linux(CentOS 8) 에서 작업 하며 postgres DB를 사용한다. 작업 후반 DB가 업데이트 되므로 작업 전에 DB는 백업을 하는 것이 좋다.

기존에 설치된 플러그인은 직접 다시 설치 해야한다.

 

 

다운로드

다운로드 참조 : https://binaries.sonarsource.com/?prefix=Distribution/sonarqube/

wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.1.69595.zip

 

 

압축해제

unzip sonarqube-9.9.1.69595.zip

 

 

java 설치

현재 사용중인 11버전이 지원되지 않아 17버전으로 설치해야한다.

yum install java-17-openjdk java-17-openjdk-devel

 

 

권한 조정

elasticsearch 는 root로 실행할 수 없으므로 sonar user를 생성하고 실행한다.

chown -R sonar. sonarqube-9.9.1.69595

 

 

sonar.properties 편집

postgres 에서 sonarqube가 사용할 DB와 user,password는 적절히 편집하도록 한다.

$ vim sonar.properties
sonar.jdbc.username=<sonarqube_user>
sonar.jdbc.password=<sonarqube_pass>
sonar.jdbc.url=jdbc:postgresql://localhost/<sonarqube_db>
sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.path.data=data
sonar.path.temp=temp

 

 

JAVA_HOME 설정

JAVA_HOME은 sonarqube 실행 스크립트에 넣어 사용한다. 

$ vim sonarqube-9.9.1.69595/bin/linux-x86-64/sonar.sh
#! /bin/sh
SONAR_JAVA_PATH="/usr/lib/jvm/java-17-openjdk-17.0.6.0.9-0.3.ea.el8.x86_64/bin/java"
...

 

 

실행

기존 sonarqube(9.4) 실행을 종료 후 업그레이드 버전(9.9)으로 프로세스를 실행한다.

주의할 점은 root가 아닌 sonar 유저로 실행해야한다.

$ su - sonar
$ sonarqube-9.9.1.69595/bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.

 

 

 

systemd 등록

# vim /usr/lib/systemd/system/sonarqube.service
[Unit]
Description=sonarqube
After=syslog.target
After=network.target

[Service]
Type=simple
Restart=on-failure
PIDFile=/sonarqube-9.9.1.69595/bin/linux-x86-64/SonarQube.pid
ExecStart=/sonarqube-9.9.1.69595/bin/linux-x86-64/sonar.sh start
ExecStop=/sonarqube-9.9.1.69595/bin/linux-x86-64/sonar.sh stop
RestartSec=10s
User=sonar
Group=sonar

[Install]
WantedBy=multi-user.target


# systemctl daemon-reload

 

 

web setup

웹을 실행하여 DB 업데이트를 진행하면 업그레이드 과정은 마무리 된다.

http://<sonarqube_IP>:9000/setup

 

 

 

 

관련 에러


2023.08.31 15:00:49 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ElasticSearch]: 1
2023.08.31 15:00:49 INFO  app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped
2023.08.31 15:00:49 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped
2023.08.31 15:46:18 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /sonarqube-9.9.1.69595/temp
2023.08.31 15:46:18 ERROR app[][o.s.application.App] Startup failure
java.lang.IllegalArgumentException: Unable to create shared memory :
        at org.sonar.process.sharedmemoryfile.AllProcessesCommands.<init>(AllProcessesCommands.java:103)
        at org.sonar.application.AppFileSystem.reset(AppFileSystem.java:63)
        at org.sonar.application.App.start(App.java:53)
        at org.sonar.application.App.main(App.java:81)
Caused by: java.io.FileNotFoundException: /sonarqube-9.9.1.69595/temp/sharedmemory (Permission denied)

 

temp 디렉토리의 권한 문제로 temp 디렉토리를 삭제 후 다시 만들고 권한을 부여한다.

$ rm -rf temp
$ touch temp
$ chown sonar. temp

 

반응형