[Docker Container Jenkins - 1] 도커 컨테이너로 젠킨스 사용하기

2019. 11. 28. 10:31Engineering/Container&Kubernetes

Contents

1. CI/CD 란?

2. Jenkins 란?

3. Docker Container로 Jenkins 사용하기

 


 

CI/CD 개념과 CI/CD 위한 개발 도구인 Jenkins 대해 알아보고, Docker Container 활용해 Jenkins 실제로 사용해볼 있는 환경구축합니다.


 

1. CI(Continuous Integration) / CD(Continuous Deployment) 란?

CI/CD 대해 설명해 놓은 아래 글을 참고 하시기 바랍니다.

https://www.redhat.com/ko/topics/devops/what-is-ci-cd

 

글에서는 CI/CD 아래와 같이 소개 합니다.

어플리케이션 개발 단계를 자동화하여 어플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법.

 

풀어서 정리하자면,

어플리케이션에 대한 소스 변경 내용 업데이트, 이에 따른 소스 빌드, 배포를 포함하는 일련의 프로세스들을 자동화하는 것이 CI/CD 입니다.

 

CI/CD 구성되지 않았던 이전의 소스 빌드/배포 과정과

CI/CD구성이 적용된 소스/빌드 배포 과정을 비교하여 이해하는 것이

CI/CD 가장 피부에 와닿게 이해할 방법인 같습니다.

 

아래 블로그가 이런 관점에서 CI/CD 장점을 설명하고 있습니다.

https://kingbbode.tistory.com/35

 

 

 

그렇다면, 보통 의미의 구분없이 사용 되는 CI CD 차이점 무엇일까요?


 CI(Continuous Integration): 서로 다른 개발자가 변경한 코드를 정기적으로 빌드/테스트/공유레포지토리에 병합 하는 과정을 자동화 관리

CD(Continuous Deployment or Delivery) : 개발자의 변경 사항을 프로덕션 환경에 배포하는 과정을 자동화 관리

 

 

CI/CD 각각 'Integration' 'Deployment(Delivery)'라는 키워드에 집중하여 용어의 차이점을 이해하시면 같습니다.
 

 

개인적으로는 CI/CD 의미 구분이 굳이 필요한가 의문이 듭니다.

이상적으로는 CI CD 하나의 배포 흐름으로 통합 되어야 한다고 봅니다.

이러한 경우에는 용어의 구분이 사실상 의미가 없을 같습니다.

 

 

설명이 너무 길어진 같으니, 바로 Jenkins 대한 내용으로 넘어가도록 하겠습니다.

 

 

2. Jenkins 란?

Jenkins CI/CD 관리(빌드, 테스트, 배포) 돕는 개발 도구 입니다.

 

본래 Sun 마이크로시스템 내부에서 허드슨(Hudson)이라는 프로젝트로 시작하였고,

외부로 확산되며 Jenkins라는 이름을 갖게 되었다고 합니다.

 

다양한 언어 또는 SCM(ex. Gitlab, Github) 도구 지원을 위한 플러그인들이 제공되고 있어,

Jenkins 도입하는 사례가 많아지고 있습니다.

 

 

3. Docker Container로 Jenkins 사용하기

그럼 실제로 Jenkins 사용해 봅시다.

Jenkins 사용을 위해서는 Jenkins 서비스를 제공하는 서버가 필요합니다.

 

글에서는 Docker Container Jenkins서버를 띄우고, 사용하는 방법을 소개하겠습니다.

설명 순서는 아래와 같습니다.

  1) Jenkins Docker Container 실행

  2) Jenkins 초기 비밀번호 확인 

  3) Jenkins 웹 접속 및 초기 설정

 

 

가장 먼저 1) Jenkins Docker Container를 실행 해보겠습니다.

이미 Docker hubJenkins 이미지가 업로드 되어 있습니다.

따라서 Docker 사용하고 계시다면, 아주 손쉽게 Jenkins 서버를 Docker 컨테이너로 실행할 있습니다.

아래와 같은 명령줄 하나로 말이죠.

 

$ docker run -itd --name [CONTAINER_NAME] -p [HOST_PORT]:8080 jenkins/jenkins:lts

 

 

주의하실 것은 LTS 버전 이미지를 사용하는 것입니다.

아직 원인을 확인 해보진 않았지만, latest 버전 이미지 사용시 플러그인들이 정상적으로 설치되지 않습니다.

 

또한, Jenkins 컨테이너가 8080포트를 사용하므로 -p 옵션으로  포트포워딩 설정도 추가하였습니다.

설정으로 인해, Host 머신의 8080포트로 들어오는 요청은 Jenkins 컨테이너의 8080포트로 전달됩니다.

 

 

 

, 그럼 Jenkins 컨테이너가 정상적으로 실행 중인지 아래 명령어로 확인해 봅니다.

 

$ docker ps

 

Jenkins 컨테이너가 jenkins-eyoh라는 이름으로 정상적으로 동작(Up 상태)하고 있음을 확인할 있습니다.

 

 

Jenkins 컨테이너가 제대로 실행되면, 해당 Jenkins 서버의 초기 비밀번호 자동으로 생성됩니다.

Jenkins 서버에 접속하기 위해서는 2) Jenkins 초기 비밀번호 확인 필요합니다.

초기 비밀번호는 jenkins 컨테이너의 /var/jenkins_home/secrets/initialAdminPassword 에서 확인할 있습니다.

 

아래와 명령과 같은 방법으로 initialAdminPassword 파일을 직접 읽어 보셔도 되고,

$ docker exec [CONTAINER_NAME] cat /var/jenkins_home/secrets/initialAdminPassword

 

또는 아래와 같이 jenkins 컨테이너의 로그를 통해 비밀번호를 확인할 수도 있습니다. 

$ docker logs [CONTAINER_NAME]

 

위 명령어 실행 결과는 아래와 유사합니다. 

로그를 쭉 읽다 보시면 초기 비밀번호에 대한 친절한 안내를 확인할 수 있습니다. 

 

 

자, 그럼 여기까지 Jenkins 서버가 정상 작동 중 인것을 확인했고,

초기 비밀번호까지 학인했으니 Jenkins 웹에 접속할 준비가 완료되었습니다!

그럼 3) Jenkins 웹 접속 및 초기 설정 을 수행합시다.

 

Jenkins 컨테이너를 실행 중인 {IP:PORT} 통해 웹에 접근 가능합니다.

만약 local 머신에서 Jenkins 컨테이너를 띄웠고, local 머신에서 Jenkins웹에 접근하고자 한다면

localhost:{HOSTPORT} 브라우저 주소창에 입력하면 바로 접속 가능합니다.

 

 

글에서는 Jenkins 컨테이너를 실행중인 host 머신의 IP 211.252.86.170이며, host 포트를 58010으로 지정하였습니다.

따라서 211.252.86.170:58010 접속하였습니다.

 

 

정상적으로 Jenkins 웹에 접근하셨다면 아래와 같은 화면을 확인하실 있습니다.

그러면 위에서 확인한 초기 비밀번호를 입력하시고 다음으로 넘어갑니다.

 

다음은 Jenkins에서 사용할 플러그인들을 커스터마이즈 하는 단계입니다.

'Install Suggested plugins' 선택하여 기본적으로 필요한 플러그인들을 자동으로 설치하도록 합니다.

 

'Select plugins to install' 선택하여 본인이 원하는 플러그인들만 설치하시는 것도 가능합니다.

 

 

'Install suggested plugins' 선택하면, 플러그인 설치가 자동으로 이루어지며 아래와 같이 설치 진행상황을 확인하실 있습니다.

(Jenkins 컨테이너 이미지의 latest 버전 사용시 아래 사진처럼 대부분의 플러그인이 정상적으로 설치되지 않습니다. 따라서 lts 버전을 사용하시기 바랍니다.)

 

 

플러그인 설치가 모두 완료되면,

Admin 계정을 생성합니다.

 

 

다음, 생성한 Admin 계정으로 로그인 해봅니다.

환영 문구와 함께 Jenkins 홈화면에 정상적으로 진입한 것을 확인할 수 있습니다. 

 

이것으로 Jenkins 서버를 Container 띄우고, Jenkins 초기 설정을 모두 완료하였습니다.