Spring

[Jenkins] docker 이미지를 nexus3 에 배포 시 오류케이스

IT-PAPA 2023. 4. 20. 06:00
반응형

아래와 같이 Jenkins로 pipline 빌드 시 docker 이미지를 nexus3에 배포하려고 할 때 오류가 계속 발생하여 며칠 해결 끝에 원인을 알아냈다.

아래 오류로 구글링하여도, 최신버전을 깔라고 하느니, docker를 다시 깔라고 하느니 이상한 헛소리에 너무 지쳤었다.

나는 최신버전인 상태인데, 역시 안정적인 버전으로 깔고해야했었나라고 자책도 했지만, 역시 내 성격에 허락되지 않는 일이었다.

jenkins에서 docker 이미지를 nexus repository로 배포할 때 겪었던 몇 가지 오류 케이스를 공유하겠다.

 

1-1. 오류메세지

invalid reference format

+ docker tag springboot:v10 private-repository:28081/repository/docker-hosted/springboot:v10
+ docker push private-repository:28081/repository/docker-hosted/springboot:v10
invalid reference format
Build step 'Execute shell' marked build as failure
Finished: FAILURE

 

1-2. 원인

docker push 할 때 문법에 안 맞다고 하는 메시지이다. 매우 간단한 오류이지만 진짜 문법이 안 맞는 거였다면, 쉽게 해결했을 것이다.

하지만 내 경우에는 정확하게는 문법오류는 아니었다.

 

1-3. 해결방법

정확하게는 문법에 안 맞기보다는 nexus 사설 레파지토리에 push 할 건데, nexus webpage port를 사용한 것이 나의 실수였다.

아래와 같이 nexus에 docker 이미지를 push 하려는 서버의 daemon.json을 생성하여, nexus 사설 레파지토리 주소를 지정하고 재기동해주자!

nexus 사설 repository 사용 시 hosted 타입의 repository에 http 연결 설정

nexus 사설 repository 사용 시 아래와 같이 설정
nexus 사설 repository 사용 시 위와 같이 설정

 

Client server에서 아래와 같이 nexus 사설 레파지토리 설정

sudo vi /etc/docker/daemon.json

sudo systemctl restart docker //docker 서비스 재시작
sudo docker-compose restart //nexus docker 재시작
// /etc/docker/daemon.json 내용
{
  "insecure-registries": [
    "private-repository:5000" //nexus 사설 repository 주소
  ]
}

 

2-1. 오류메시지

denied: Deploying to groups is a PRO-licensed feature. See https://links.sonatype.com/product-nexus-repository
Build step 'Execute shell' marked build as failure

+ docker tag springboot:v10 private-repository:5000/repository/docker-hosted/springboot:v10
+ docker push private-repository:5000/repository/docker-hosted/springboot:v10
The push refers to repository [private-repository:5000/repository/docker-hosted/springboot]
a0a455b9b6f3: Preparing
fd30db1afef5: Preparing
e017d39c755a: Preparing
03ee828ef0e4: Preparing
b0d4c4485e7e: Preparing
denied: Deploying to groups is a PRO-licensed feature. See https://links.sonatype.com/product-nexus-repository
Build step 'Execute shell' marked build as failure
Finished: FAILURE

 

2-2. 원인

nexus에서 group으로 지정된 타입은 최근 버전에서는 pro 라이선스에서만 레파지토리 사용가능하다는 구글링 내용이 있었다. 이게 무슨 개 똥같은 소리지... group 타입으로 사용할 수 있는 방법이 있긴하겠지만, 필자는 도저히 힘이 나지 않아 구글링하는 걸 멈추고 쉬운 방법으로 택했다.

group 타입의 docker 레파지토리
group 타입의 docker 레파지토리
nexus 사설 repository 사용 시 위와 같이 설정
도커도 설치된 nexus 버전
도커도 설치된 nexus 버전

 

2-3. 해결방법

필자는 group 타입의 docker 레파지토리를 사용하지 않고, hosted 타입의 레파지토리를 사용하여, push를 시도하였을 때 드디어 이미지를 업로드할 수 있었다.

+ docker tag springboot:v10 private-repository:5000/springboot:v10
+ docker push private-repository:5000/springboot:v10
The push refers to repository [private-repository:5000/springboot]
10740e85ba53: Preparing
fd30db1afef5: Preparing
e017d39c755a: Preparing
03ee828ef0e4: Preparing
b0d4c4485e7e: Preparing
b0d4c4485e7e: Layer already exists
03ee828ef0e4: Layer already exists
e017d39c755a: Layer already exists
fd30db1afef5: Layer already exists
10740e85ba53: Pushed
v10: digest: sha256:7ad00168efe98396f322b8befc13af56e5b34a77df294cbd8aa9ec5c5b34341e size: 1373
Finished: SUCCESS

docker 이미지 push 성공한 케이스
docker 이미지 push 성공한 케이스

728x90
반응형
LIST