Nexus 업그레이드

어느날 문득

사내에 Nexus를 사용중이다
강력해보이는 Noti를 보고 예전부터 미루고 미루던 Nexus를 업그레이드 하기로 했다
절차가 생각보다 복잡해져서 기록을 남긴다

nexus-notification

Upgrade Path 확인

find-your-upgrade-path를 보고 업그레이드 절차를 확인해보았다.

upgrade-path

  1. nexus3:3.70.0 으로 업그레이드
  2. DB 이관
  3. Java 업그레이드
  4. nexus3:3.71.0 로 업그레이드

1. nexus3:3.70.0 으로 업그레이드

윈도우 PC에 Docker Desktop으로 sonatype/nexus3:3.38.0​을 사용하고 있었다.

냅다 image를 3.70.0으로 올려 실행했다.

다행히 별 이상없이 실행되었다.

docker rm nexus
docker run --name nexus -d --restart=always -p 0**0:8081 -p 0**0:5000 -v D:/docker/nexus/data:/nexus-data -u root sonatype/nexus3:3.70.0

2. DB 이관

주의사항을 대충 흘겨버리고 여기 절차를 따라 진행했다.

OrientDB를 어떤 데이터베이스로 변경할까 심고끝에 H2 데이터베이스로 내마음대로 결정했다.

migration-procedure

2-1. DB 백업

Export databases for backup Task를 실행하였다.

backup-run

2-2. Nexus Repository 중단

# docker 쉘로 접속
docker exec -it nexus bash

# docker 내부의 nexus 실행파일 경로 이동
$ cd /opt/sonatype/nexus

# docker 내부의 nexus 중단
$ exec ./bin/nexus stop

2-3. nexus-db-migrator 다운로드

여기에서 다운로드 받는다

2-4. nexus-db-migrator 이동

백업파일이 있는 곳으로 이동한다

backup-location

2-5. nexus-db-migrator 실행

다시 한 번 쉘로 접속하여 migrator를 실행한다.

# docker 쉘로 접속
docker exec -it nexus bash

# 백업파일이 있는 곳으로 이동
$ cd /nexus-data/backup

# migrator 실행
$ java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator-*.jar --migration_type=h2

생각보다 migration은 빨리 끝났다.

migration-1

migration-2

2-6. nexus.mv.db 파일 이동

migration 결과로 생성된 nexus.mv.db 파일을 /nexus-data/db 폴더로 옮겨주었다.

$ cp /nexus-data/backup/nexus.mv.db /nexus-data/db

2-7. nexus.properties 수정

nexus.properties 파일을 열어 nexus.datastore.enabled=true 를 추가해주자.

$ vi /nexus-data/etc/nexus.properties

2-8. Nexus를 재시작

귀찮아서 그냥 Docker Desktop으로 Nexus를 재시작 해주었다.

반쯤 쫄아서 로그를 보니 뭔가를 막 하고 있는것 같았다.

restore-log

Nexus에 접속하여 DataStore가 있는지 확인해보았으나 아직 메뉴가 보이지 않았다.

check-menu

뭐지? 마이그레이션이 안되었나 싶어 Support - System Information 으로 이동하여 OrientDB가 사용중인지 확인해 보았다.

nexus.orient.enabledtrueOrientDB이라는 뜻인데 다행히 false로 되어있었다.

orient

3. Java 업그레이드

Docker로 구동중이라 jdk17 이미지로 다시 시작해주었다.

alpineubi 이미지가 있는데 사내에서 사용하는거라 nexus3:3.70.0-java17-alpine을 선택해주었다.

다만 보안이 중요한 곳이라면 ubi를 사용하길 추천한다고함.

docker rm nexus
docker run --name nexus -d --restart=always -p 0**0:8081 -p 0**0:5000 -v D:/docker/nexus/data:/nexus-data -u root sonatype/nexus3:3.70.0-java17-alpine

4. nexus3:3.71.0 로 업그레이드

sonatype/nexus3:3.71.0-java17-alpine 으로 다시 시작해주었다.

그래도 DataStore가 보이지 않았다. 😱😱😱😱😱😱

Stackoverflow 나만 그런게 아니었다. 😱😱😱😱😱😱

docker rm nexus
docker run --name nexus -d --restart=always -p 0**0:8081 -p 0**0:5000 -v D:/docker/nexus/data:/nexus-data -u root sonatype/nexus3:3.71.0-java17-alpine

5. nexus3:3.78 로 업그레이드

이왕 이렇게 된거 최신버전으로 올려보자!!

이제부터는 java17이 기본이라 tag명이 좀 더 간결해졌다.

그리고 속도가 훨씬 빨라졌다. 기분탓이 아니다.

docker rm nexus
docker run --name nexus -d --restart=always -p 0**0:8081 -p 0**0:5000 -v D:/docker/nexus/data:/nexus-data -u root sonatype/nexus3:3.78.1-alpine

이제야 DataStore가 나온다. 😍😍😍😍😍😍

datastores

번외

백업 Task가 변경되었다.

원래는 Export databases for backup 를 사용중이었는데

Backup H2 Databases 를 사용해야 한다.

백업된 파일도 35메가에서 8메가로 5배 정도 줄었다.

backup

잘가라 OrientDB

old-artifacts

태그:

카테고리:

업데이트: