IT

[CI/CD] Jenkins 에 Docker 연결

뽀리님 2023. 12. 18. 16:18

Jenkins로 Gradle 빌드 => Dockerfile로 도커 이미지를 빌드 후 Docker Hub에 Push하고

Spring Boot Server에서 도커 이미지를 Pull해서 실행하게 하기 위해 필요하다.

 

✔ Jenkins, Docker Hub 연결

Jenkins 대시보드 > Jenkins 관리 > 플러그인 관리 > 설치 가능 > Docker 검색 > Docker, Docker Pipeline 플러그인 설치 재실행

 

 

✔ Docker Hub Credentials 등록

Jenkins 대시보드 > Jenkins 관리 > Manage Credentials > Credentials에 접속한다.
Store Jenkins에 Domain이 (global)인 화살표를 눌러 Global credentials (unrestricted)로 이동한다.
왼쪽 메뉴의 Add credentials를 눌러 credentials를 추가한다.

  • Kind
    Username with password
  • Username
    본인의 Docker Hub ID
  • Password
    본인의 Docker Hub Password
  • ID
    docker-hub -> 마음대로 지어도 된다. 다만 Pipeline Script 작성 시 credentialsId로 사용되니 식별할 수 있도록 하자.
  • OK를 눌러 키를 생성

Jenkins Container 내부에 Docker 설치

Jenkins Pipeline에서 Docker 명령어를 사용할 수 있도록 Jenkins Container 내부에 Docker를 설치해야 한다.

  • Jenkins Container에 접속
$ docker exec -it jenkins bash
  • Docker 설치
$ docker run -d -p 8080:8080 -p 50000:50000 -v /jenkins:/var/jenkins -v /home/ubuntu/.ssh:/root/.ssh -v /var/run/docker.sock:/var/run/docker.sock --name jenkins -u root jenkins/jenkins:lts

 

Jenkins Container를 가동할 때 위에 처럼 외부 Docker volume을 연결해놓아서 아래처럼 docker.sock 권한 변경만 하면 Container 내부에서 docker 명령어가 사용 가능하다고 하는데 Pipeline Script를 작성하고 Build했더니 docker 명령어 사용 부분에서 command not found 에러가 발생하여 그냥 Container 내부에도 Docker를 설치하였다.
Container 내부에 sudo, vi, wget이 설치되어 있지 않아 차례대로 설치 후 Docker를 설치해야 한다.

  • docker.sock 권한 변경$ sudo chmod 666 /var/run/docker.sock

 

 

 

<정리>

Spring Boot 로 작성된 소스를 GitHub 레파지토리에 커밋을 하면 WebHook 이 걸려있는 젠킨스가, 코드파이프라인에 따라 Gradle 빌드후 -> 도커 이미지 빌드 -> 도커 허브에 이미지 푸쉬 -> 허브에 있는 도커 이미지를 가지고 쿠버네티스로 배포

 

하는 과정까지 정리했다