olrlobt

[INFRA] Jenkins 설치하기 본문

Infra

[INFRA] Jenkins 설치하기

olrlobt 2024. 3. 30. 23:08

CI/CD

지속적 통합(Continuous Integration, CI)과 지속적 배포(Continuous Deployment, CD)를 의미한다. CI/CD는 소프트웨어 개발의 효율성을 높이고, 배포 주기를 단축하며, 고품질의 소프트웨어를 빠르게 시장에 출시하기 위해 설계되었다.

 

지속적 통합 (CI)

지속적 통합(CI)은 자동화된 빌드 및 테스트가 수행된 후, 개발자가 코드 변경 사항을 중앙 리포지토리에 정기적으로 병합하는 DevOps 소프트웨어 개발 방식이다. 지속적 통합의 핵심 목표는 버그를 신속하게 찾아 해결하고, 소프트웨어 품질을 개선하고, 새로운 소프트웨어 업데이트를 검증 및 릴리스하는 데 걸리는 시간을 단축하는 것이다. 이로써 개발자는 자신의 변경사항이 다른 부분에 어떤 영향을 미치는지 즉각적인 피드백을 받을 수 있다.

 

지속적 배포 (CD)

지속적 배포(CD)는 소프트웨어를 자동으로 고객에게 배포하는 과정이다. CI 과정을 통해 생성된 소프트웨어 빌드 결과물을 자동화된 배포 파이프라인을 통해 테스트, 스테이징, 프로덕션 환경으로 이동된다. CD는 고객에게 더 빠르게 새로운 기능을 제공하고, 소프트웨어 배포 과정에서 발생할 수 있는 인적 오류를 줄이는 데 목적이 있다.

 

CD는 종종 지속적인 전달(Continuous Delivery)과 지속적인 배포(Continuous Deployment) 두 가지 의미로 혼합하여 쓰인다.  지속적인 전달은 소프트웨어가 언제든지 배포할 수 있게 준비하는 과정을 자동화한 것으로 프로덕션 환경으로의 배포는 사람이 수동으로 결정하고 실행한다. 그리고 지속적인 배포는 지속적인 전달에서 한 단계 더 나아간 것으로, 프로덕션 환경으로의 배포까지 자동화된 것을 의미한다.


Jenkins

젠킨스는 지속적 통합(Continuous Integration, CI)과 지속적 배포(Continuous Deployment, CD)를 위한 오픈 소스 자동화 서버이다. 코드 변경 사항을 자동으로 빌드, 테스트하고 배포하는 과정을 자동화해 주고, 이를 통해 개발자들은 더 빠르게 피드백을 받을 수 있어서 개발 주기를 단축시키는 중요한 역할을 한다.

 

젠킨스는 1,000개 이상의 플러그인을 지원하여 Github, GitLab, Maven 등의 다양한 개발, 테스트, 배포 도구와의 통합을 지원하는 생태계를 가지고 있다. 특히 Docker, Kubernetes 같은 컨테이너 오케스트레이션 도구와의 통합을 통해 복잡한 빌드 및 배포 프로세스를 자동화하여 관리할 수 있으며, JUnit , Selenium, SonarQube등 다양한 테스트 및 코드 품질 관리 도구와의 통합도 지원하여, 코드 품질 지표를 모니터링하고 코드 품질을 향상할 수 있다.

 

또한, 젠킨스의 마스터-슬레이브 아키텍처는 빌드 프로세스의 확장성과 유연성을 제공한다. 예를 들어, 보안상의 이유로 특정 작업을 특정 PC에서만 수행해야 하는 경우가 있을 수 있는데, 이러한 상황에서 마스터 서버에 설치된 젠킨스는 슬레이브 노드에 작업을 할당하여 실행하도록 명령할 수 있다. 이러한 방식을 통해 리소스를 효율적으로 분배하여 빌드 시간을 단축시키고, 전체적인 빌드 프로세스의 확장성과 관리 용이성을 높일 수 있다. 

 

 

Jenkins 설치

이 포스팅에서는 Jenkins를 Docker 이미지로 실행하는 방법을 소개한다.

 

Jenkins는 Java 기반의 애플리케이션이기 때문에, Jenkins를 네이티브로 설치하기 위해서는 JDK 설치가 선행되어야 한다. 하지만, Jenkins를 도커 컨테이너로 실행할 경우, Jenkins 이미지에 이미 Java가 포함되어 있기 때문에 별도의 설치를 진행할 필요가 없다. 

 

$ docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins:lts

 

  • -d : 백그라운드에서 컨테이너를 실행한다.
  • -p 8080:8080 : 호스트의 8080 포트와 컨테이너의 8080 포트를 연결한다. Jenkins 웹 인터페이스에 접속하는 데 사용된다.
  • -v jenkins_home:/var/jenkins_home : Jenkins 데이터를 호스트의 지속적인 볼륨에 저장하여 컨테이너를 재시작하거나 업데이트해도 정보가 유지되도록 한다.
  • --name jenkins : 컨테이너에 jenkins라는 이름을 할당한다.
  • jenkins/jenkins:lts :  Jenkins의 공식 롱텀 서포트(LTS) 버전을 사용한다.

 

여기서 LTS는 Long Term Support의 약자로 장기간 지원받는 버전이라는 뜻이다.

그리고 Dockerhub에 있는 jenkins/jenkins의 설명을 보면 JDK17을 사용하는 것을 알 수 있다.

 

참고로 내가 올리는 Spring boot 프로젝트 역시 JDK17을 사용하는데, 이 버전과 Jenkins 버전을 굳이 굳이 맞출 필요는 없다.

Dockehub Jenkins설명

 

 

나는 아래와 같은 명령어로 Jenkins를 도커에 올려주었다.

 

$ docker run -d --env JENKINS_OPTS=--httpPort=8080 
-v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Seoul -p 9000:8080 
-v /home/ubuntu/jenkins:/var/jenkins_home 
-v /var/run/docker.sock:/var/run/docker.sock
--name jenkins -u root jenkins/jenkins:lts

 

위 명령어를 그대로 사용하기 위해서는 개행 처리를 해 주어야 함에 유의하자.

 

나는 EC2 서버에 Jenkins를 올렸기 때문에 볼륨에 /home/ubuntu/jenkins 폴더를 연결해 주었고, 8080포트는 사용 중이기 때문에 9000으로 포트를 지정해 주었다.

-v /etc/localtime:/etc/localtime:ro :  해당 설정을 EC2의 시간과 Jenkins의 시간 설정을 동기화시켰다.

-e TZ=Asia/Seoul : 그리고 타임존을 설정하여 서울 시간으로 명시적으로 설정해 주었다.

이 두 설정은 같은 설정으로 보이지만, 시간 동기화와 타임존 설정이라는 다른 목적을 갖고 있으며, 일반적으로 함께 사용될 때 가장 정확한 시간 처리를 보장한다.

 

-v /var/run/docker.sock:/var/run/docker.sock : 그리고 EC2 도커 소켓 파일을 젠킨스 컨테이너 내부로 마운트 하여, 컨테이너 내부에서 EC2의 Docker를 제어할 수 있도록 해 주었다.

Jenkins 설치 완료, 초기 비밀번호

 

이렇게 설치를 진행하면 이미지가 없기 때문에 자동으로 pull 과정을 거쳐서 젠킨스가 실행되게 된다.

이때 나오는 하단의 비밀번호는 Jenkins의 초기 설정 비밀번호로 처음 Jenkins 초기 설정 마법사에 로그인하여 관리자 계정을 만들 때 사용된다.

 

이 초기설정 비밀번호는 Jenkins 파일 시스템 내에서 다시 확인이 가능하며, 아래의 명령어를 통해 확인할 수 있다.

$ docker exec <jenkins_container_name> cat /var/jenkins_home/secrets/initialAdminPassword

 

 

젠킨스가 성공적으로 잘 실행이 되었다면, 아래 명령어로 실행 중인지 확인할 수 있다.

$ docker ps

 

Jenkins 컨테이너

 

이제 설치한 도메인의 설정한 포트로 접근이 가능하다.

나의 경우에는 도메인:9000의 URL로 젠킨스에 접근해 주었다.

 

Jenkins 설치 마법사&#44; 초기 비밀번호 입력

 

그러면 위와 같이 초기 비밀번호를 입력하는 칸이 나오는데, 여기에 아까 확인했던 초기 비밀번호를 입력해 주면 된다.

Jenkins 설치&#44; 초기 플러그인 설정

 

그러면 위와 같이 초기 설정을 할 수 있는 화면이 나오고, 만약 초기 설정의 플러그인을 직접 선택을 할 것이라면 오른쪽을, 아니라면 왼쪽을 클릭하여 초기 설정 플러그인을 설치해 준다.

Jenkins 설치&#44; 초기 플러그인 커스텀 설정

 

만약 오른쪽을 클릭했다면 원하는 플러그인을 선택해 주어 초기 설정을 진행하자.

플러그인은 언제든지 젠킨스 내부에서 추가 설치하거나 삭제할 수 있다.

 

Jenkins 설치&#44; 초기 플러그인 설치 화면

 

설치가 다 끝나게 되면, 관리자를 설정하는 화면으로 전환된다.

 

Jenkins 설치&#44; 초기 관리자 설정 화면

 

해당 화면에서 Jenkins에 접속할 아이디와 비밀번호, Jenkins에서 사용할 이름과 이메일을 입력해 준다. 

 

Jenkins 설치&#44; 초기 접속 URL 설정

 

 

그리고 Jenkins에서 사용할 URL을 적어준다. 여기서는 사용하는 도메인과 포트의 조합으로 적어주자.

 

 

Jenkins 메인 화면

 

 

위와 같이 설정을 마치면 젠킨스 초기 화면에 접속할 수 있다!

 

만약 다음에 접속할 때 세션이 만료되거나, 다른 PC로 접속하게 될 경우 아래와 같은 화면으로 접속할 수 있는데, 이 전에 입력한 Username과 password로 접속하면 된다.

 

 

 

Jenkins 접속 화면


 

Jenkins 한글설정

 

Dashboard > Manage Jenkins > Plugins로 접속한다.

 

Jenkins 플러그인 추가

 

Avaliable plugins > Locale 검색 > Locale 선택 후 > Install

Jenkins Locale 플러그인 설치

해당 페이지에서 젠킨스의 모든 플러그인을 설치, 제거할 수 있다.

 

 

DashBoard > ManageJenkins > System

 

Jenkins locale 플러그인 적용

 

Locale > 'ko' 입력 > 체크박스 체크 > Apply

 

Jenkins locale ko 설정

 

한글 적용 완료 !!

 

Jenkins 한글 설정

Comments