본문 바로가기
Web Development/MicroService Architecture

[MSA / Jenkins / Docker] Docker Desktop에 Jenkins 설치 방법 A to Z(feat. CI/CD)

by 감자맹고우 2023. 5. 3.
728x90
반응형

MSA 프로젝트를 진행하면서, 여러 개의 서비스를 일일히 실행하고 관리해야하는 번거로움을 탈피하기 위해서, 계획과는 다르게 Docker를 빠르게 도입하게 되었다. 그리고, 한번에 실행하고 관리할 수 있게 Docker-Compose까지 구축하게 되었다.
이를 통해서, IDE나 cmd로 각각의 서비스를 관리하는 번거로움에서 벗어날 수 있게 되었다. 그렇다면 문제가 해결된 것일까? 그렇지 않다!

 

하루는 팀원이 질문을 했다.
Q. 그러면, 코드 수정하거나 pull하고 나면 다시 빌드하고 컨테이너로 올려야 하는거에요? 전부 다?
A. 네...

 

불편하긴 했지만, 구축하면서 Docker에 익숙해졌던 나는 그냥 별 생각 없이 추가 서비스를 강행해서 개발하고 있었는데, 위의 질문을 받고 이건 아니다 싶었다. 그래서 CI/CD를 구축하는 거구나...

 

그렇게 생각이 든 나는, 개발하던 서비스를 후순위로 미루고 CI/CD를 최우선 구축하기로 계획을 수정했다. 구축에 많은 시간을 사용할 수는 없었기 때문에 자료도 많고 사용하기 쉬운 툴을 활용해야 했고, 그래서 대표적인 툴인 Jenkins를 활용하기로 결정했다.

 

그럼 Jenkins를 구축하려면 어떻게 해야할까?
우선, 설치해야한다. 설치방법은 여러가지가 있는데 나는 도커를 사용하기 때문에 도커를 사용하여 설치하기로 했다.

 

 

[ 설치 방법 ]

 

1. jenkins 도커 이미지 받기

 

공식 레퍼런스에서 제공하는 설치 방법대로 cmd창을 열고 아래의 명령어를 입력하면, jenkins 도커 이미지를 받는다.

docker pull jenkins/jenkins

 

결과는 아래와 같이, docker images를 입력했을 때 jenkins/jenkins 이미지가 추가된 것을 확인할 수 있다.

 

 

2. jenkins/jenkins 이미지를 컨테이너로 올리기 & docker 및 경로 마운트하기 *** & 포트 설정

 

이 과정이 정말 정말 중요한데, 컨테이너로 올리면서 jenkins 컨테이너 내부에서도 호스트의 docker를 사용할 수 있도록 마운트해주어야한다. 컨테이너 내부에서 docker를 따로 설치하는 것이 아니라 호스트에 이미 설치된 docker를 사용하도록 해야 동일한 docker를 사용하게 된다. 그 외에 c드라이브 등의 경로도 마운트해줄 것이다.

 

이를 위해서는 docker run으로 실행할 때 명령어에 해당 옵션들을 추가하면 된다.

최종 명령어는 아래와 같다.

docker run -d -v jenkins_home:/var/jenkins_home -v //var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v c:/:/c/ -p 7088:8080 -p 50000:50000 --restart=on-failure --name jenkins-server jenkins/jenkins:latest

 

옵션들을 설명하자면 -d는 detached mode로 실행하는 것이고, -v는 volume으로 컨테이너와 호스트머신의 디렉토리를 공유하는 의미이다. 즉 마운트하는 옵션인 것이다.

- /var/run/docker.sock : 호스트의 Docker 소켓을 Jenkins 컨테이너에 마운트
- /usr/bin/docker : 호스트의 Docker CLI를 Jenkins 컨테이너에 마운트
- c:/:/c/ : 호스트(Window) 의 C:/ 경로를 Jenkins 컨테이너의 /c/ 경로로 마운트

 

-p는 포트를 설정해주는 옵션으로 왼쪽이 호스트, 오른쪽이 컨테이너 포트이다. 이는 Docker나 Docker Compose 설정 시 봤던 것과 동일하다. 즉 호스트에서는 localhost:7088로 jenkins에 접속할 수 있게 된다.
포트가 2개인 이유는 Jenkins에서 2개를 사용하기 때문이다. 8080포트는 Jenkins에서 웹 인터페이스를 제공하는 포트이며, 50000포트는 에이전트 노드와 통신하는 포트이다.

 

에이전트 노드가 무엇인지 모르겠어서 ChatGPT에게 물어보니, 다음과 같이 대답해주었다.

Jenkins 에이전트(Agent) 또는 슬레이브(Slave) 노드는 Jenkins 서버에 의해 제어되는 원격 노드입니다. 이 에이전트 노드는 Jenkins 서버와 통신하며, Jenkins 서버에서 할당한 작업을 수행합니다.

지금은 간단하게 넘어가면 될 것 같다.

 

그 외의 옵션은 재시작과 네이밍 옵션이라서 생략하겠다.

아무튼, 이렇게 진행하고 나면 아래와 같이 Docker Desktop이나 cmd에서 docker ps 명령어를 통해 jenkins-server 컨테이너가 실행된 것을 확인할 수 있다.

 

 

반응형

 

3. jenkins 초기 비밀번호 입력

 

이제 jenkins 설치는 완료하였다.

그러나 사용하기 위해서는 몇 가지 초기 작업을 추가로 진행해야 한다.

우선 jenkins는 위에서 설명한대로 웹 인터페이스를 제공한다. 그리고 웹 인터페이스에서는 초기 설정을 위해 비밀번호를 요구하는데 이는 컨테이너를 처음 실행했을 때 출력된다. 그래서 로그를 살펴볼 것이다.

 

아래와 같이 명령어를 입력하자.

docker logs jenkins-server

 

아래와 같이 초기 비밀번호가 출력된다. 이것을 복사한다.

 

그리고 브라우저를 켜서 localhost:7088 ({호스트 IP주소:호스트 jenkins 웹 인터페이스 PORT}) 로 접속한다.

그러면 아래와 같이 로그인 창이 출력된다. 여기에 복사해두었던 초기 비밀번호를 붙여넣기 하면 된다.

 

 

4. 초기 설정 진행

 

이제 플러그인 설치와 초기 Admin 계정을 생성하면 된다. 이건 본인의 상황에 맞게 진행하면 되며, 복잡한게 싫다면 플러그인은 Install suggested plugins로 권장 플러그인 설치로 진행하면 된다. 어차피 나중에 필요한 플러그인은 별도로 설치할 수 있다.

 

 

모든 설치 과정을 완료하였다.
이제 Start using Jenkins 버튼을 클릭하여 Jenkins를 사용할 수 있다!

이어서 Jenkins 파이프라인을 생성하여 CI/CD를 구축해볼 것이다.

 

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글