[프로젝트 수행] CI/CD - Dockerhub & Nexus 연동

Nam_JU·2022년 11월 17일
0

WebRTC-Project

목록 보기
7/18

지난 11/16일에는 CI/CD구축을 완료했다
Github Action + ArgoCD를 사용했었는데 오류 최소화를 위해 저장소는 DockerHub를 사용했다
쿠버네티스환경에서 미리 구축해놓은 Nexus를 적용시켜보는게 목표!



k8s 서버에서 nexus 직접 push 하기

githubAction을 사용하기 전에 Nexus가 제대로 서버와 연동이 되었는지 확인을 해야했음
테스트용도인 ubuntu:20.04 이미지를 dockerhub에서 다운받아 Nexus에 직접 push 해보도록 함

에러내용

  • 이미지를 다운받고 push를 해보는데 해당 에러가 떴다
kakao5@nexus:~/nexus$ sudo docker push 192.168.56.142:5443/ubuntu:1.0
The push refers to repository [192.168.56.142:5443/ubuntu]
Get "https://192.168.56.142:5443/v2/": x509: cannot validate certificate for 192.168.56.142 because it doesn't                     contain any IP SANs

해결방법

  • 경로: /etc/docker/daemon.json
  • insecure-registries : nexus 주소추가하기

## testImage pull (혹은 직접 만들어서 사용)
kakao5@nexus:~/nexus$ sudo docker pull ubuntu:20.04
20.04: Pulling from library/ubuntu
eaead16dc43b: Pull complete
Digest: sha256:450e066588f42ebe1551f3b1a535034b6aa46cd936fe7f2c6b0d72997ec61dbd
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04

## image check
kakao5@nexus:~/nexus$ sudo docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       20.04     680e5dfb52c7   3 weeks ago   72.8MB

## nexus-login
kakao5@nexus:~/nexus$ sudo docker login https://nexus.kakao.com:5443
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

## image-tagging
kakao5@nexus:~$ sudo docker tag ubuntu:20.04 nexus.kakao.com:5443/ubuntu:1.0
kakao5@nexus:~$ sudo docker image ls
REPOSITORY                    TAG       IMAGE ID       CREATED       SIZE
nexus.kakao.com:5443/ubuntu   1.0       680e5dfb52c7   3 weeks ago   72.8MB
ubuntu                        20.04     680e5dfb52c7   3 weeks ago   72.8MB
kakao5@nexus:~$ sudo docker push nexus.kakao.com:5443/ubuntu:1.0
The push refers to repository [nexus.kakao.com:5443/ubuntu]
f4462d5b2da2: Pushed
1.0: digest: sha256:b25ef49a40b7797937d0d23eca3b0a41701af6757afca23d504d50826f0b37ce size: 529
sudo docker tag ubuntu:20.04 nexus.kakao.com:5443/ubuntu:4.0

## nexus-push
sudo docker push nexus.kakao.com:5443/ubuntu:4.0

nexus 레파지토리에 제대로 이미지가 들어간 것을 확인



GithubAction에 Nexus 연동하기

nexus가 문제 없다는것을 확인했으니 이번에는 githubAction에 연동했던 Dockerhub를 Nexus로 변경해보자

name: webrtc-eyestalk Actions

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2
      -
        name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: kimnamju/webrtc-eyestalk
          tag-semver: |
            {{version}}
            {{major}}.{{minor}}
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      -   
        name: Nexus Repo Publish
        uses: sonatype-nexus-community/nexus-repo-github-action@master
        with:
          serverUrl: https://192.168.56.142:8443/repository/private-reg-local/
          username: admin
          password: pass123#
          format: docker
          repository: private-reg-local
          coordinates: groupId=com.example artifactId=app version=1.0.0
          assets: extension=py
          filename: ./app.py 
      -
        name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./Dockerfile
          platforms: linux/amd64
          push: true
          tags: ${{ steps.docker_meta.outputs.tags }}
          labels: ${{ steps.docker_meta.outputs.labels }}
  • 빌드 에러...

  • 에러 내용 : HttpHostConnectException: Connect to 192.168.56.142:8443 [/192.168.56.142] failed: Operation timed out (Connection timed out)

Caught: com.sonatype.nexus.api.exception.RepositoryManagerException: Upload component was unable to complete
com.sonatype.nexus.api.exception.RepositoryManagerException: Upload component was unable to complete
	at com.sonatype.nexus.api.zz.fg.a(SourceFile:96)
	at com.sonatype.nexus.api.zz.fg.a(SourceFile:65)
	at com.sonatype.nexus.api.zz.ff.upload(SourceFile:157)
	at com.sonatype.nexus.api.zz.ff.upload(SourceFile:140)
	at com.sonatype.nexus.api.repository.v3.RepositoryManagerV3Client$upload.call(Unknown Source)
	at NexusPublisher.run(NexusPublisher.groovy:64)
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to 192.168.56.142:8443 [/192.168.56.142] failed: Operation timed out (Connection timed out)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(SourceFile:159)
	at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(SourceFile:359)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(SourceFile:381)
	at org.apache.http.impl.execchain.MainClientExec.execute(SourceFile:237)
	at org.apache.http.impl.execchain.ProtocolExec.execute(SourceFile:185)
	at org.apache.http.impl.execchain.RetryExec.execute(SourceFile:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(SourceFile:111)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(SourceFile:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(SourceFile:72)
	at org.apache.http.impl.client.CloseableHttpClient.execute(SourceFile:221)
	at org.apache.http.impl.client.CloseableHttpClient.execute(SourceFile:165)
	at com.sonatype.nexus.api.zz.fg.a(SourceFile:84)
	... 5 more
Caused by: java.net.ConnectException: Operation timed out (Connection timed out)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SourceFile:339)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(SourceFile:142)
	... 16 more


타임아웃 에러가 났다. 서버를 찾지 못한다는 뜻이다
구글을 뒤져도 nexus - github action자료는 정말 없었다. 유일하게 참고 할 수 있었던 자료는 아래의 링크인데 해당 자료를 토대로 오류를 찾아봐도 해결방법이 보이지 않았다
https://github.com/marketplace/actions/nexus-repository-publisher-for-github-actions



근본적인 문제점

당시에는 오류 내용에 관한 검색에만 몰두를 했었는데 이 에러의 원인이 대체 왜 일어났는지 파악하지 못했다. 그러다 다른 팀원의 조언을 얻고 문제점을 알게되었다.
우리가 구축한 Nexus는 프라이빗 레파지토리이다. 회사라고 가정하였을때 회사의 고유 자료를 저장하기 위한 저장소의 목적으로 설치했었다

그런데 GithubAction은 퍼블릭 CI 툴이다. 빌드를 GithubAction에서 하고 만든 이미지를 Nexus에 저장을 한다. 에러내용을 보면 서버를 찾지 못함.
우리가 yaml에 작성한 서버 url은? https://192.168.56.142:8443/repository/private-reg-local/ 사설망 주소이다. 네트워크에 대해 공부했음에도 이부분을 눈치채지 못함....
다른 CI툴을 사용하거나 Nexus를 포기해야 하는 사태에 직면했다. ㅎ... ㅠ

현재 WebRTC는 계속 코드가 수정중이고, 카메라와 채팅 기능이 컨테이너단에서 제대로 작동하지 않아 시간이 촉박한 상황이다. Nexus나 다른 CI툴을 변경할 여유가 없다고 판단되었다. 메인서비스가 작동을 못하면 다필요 없어

오류의 원인을 이미 배웠고 알고 있었음에도 바로 파악 하지 못한게 아쉽다.
Nexus를 염두하고 CI/CD를 구축했어야 하는데 당시에는 CI/CD만 초점을 두고 일단 구축하고 생각하자! 했던게 안일했던것 같다.


profile
개발기록

0개의 댓글