카테고리 없음

Jenkins로 CI 적용하기 part 1

혹등고래1호기 2023. 3. 29. 16:08

이 글을 끝까지 읽으면 얻을 수 있는 이득 

1. CI란 무엇인가 왜 필요한 것인지

2. 젠킨스는 무엇인지

3. Docker를 이용해서 Jenkins설치하기

 

CI(Continuous Integration)란 무엇인가?

 

CI란 팀의 구성원들이 작업한 내용을 레파지토리에 정기적으로 통합하는 것을 의미한다.

하나의 프로젝트를 여러 명으로 구성된 한 팀이 작업을 하게 되고 분업과 협업을 하는 과정에서 각각의 할당된 작업이 있을 것이다. 

 

팀원은 본인이 작업한 내용을 GIT, SVN같은 버전 관리 시스템에 Sunmit하게 되는데 이렇게 submit된 소스코드들을 정기적으로 통합하는 것을 CI라고 하고 이것을 시행시켜주는 서버를 CI Tool이라고 한다. 젠킨스 또한 CI Tool에 속한다. 

 

CI 시스템을 구축하지 않은 경우에는 개발자들이 각자 개발한 소스코드를 Git에 커밋을 하면 품질관리를 거치지 않고 개발 막바지에 통합을 하여 테스트를 진행하게 되는데 만약 문제가 있는 소스코드를 커밋하였다면 개발 후반부에서야 문제점이 발견이 되는 문제점이 있다.

 

하지만 CI를 시스템을 구축하게 되면 CI 서버는 Git이나 다른 버전 관리 시스템에 커밋된 소스코드를 풀링하여 컴파일 , 단위 테스트 등의 과정을 수행하며 결함이 있는지 여부를 지속적으로 검증을 할 수 있게 된다. 

 

 

 

Jenkins란 무엇인가?

젠킨스는 스프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴이다. CI(Continuous Integration)툴 이라고 표현을 한다.

다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 레파지토리에 빈번히 업로드함으로 지속적 통합이 가능하도록 해준다.

 

젠킨스 탄생 이전 에는 일정시간마다 빌드를 실행하는 방법이 일반적이였다. 젠킨스는 서브버전, Git과 같은 버전 관리 시스템과 연동해서 소스의 커밋을 감지하면 자동적으로 자동화 테스트가 포함된 빌드가 작동하도록 도와주게 되어 편의성이 증가되었다.

 

이러한 기능을 수행하는 젠킨스는 컴파일 오류를 검출하고, 자동화 테스트를 수행하며, 정적 코드 분석으로 인한 코딩 규약 준수 여부를 체크하고 프로파일링 툴을 이용한 성능 변화 감시, 결합 테스트 환경에 대한 배포 작업의 큰 도움을 준다.

 

 

왜 Jenkins를 사용할까?

CI툴은 젠킨스 외에도 Buildkite, Github Actions, GitLab CI/CD, Bitbucket Pipelines, Circleci 등의 많은 툴 들이 존재한다. 이렇게 많은 툴 중에서 우리는 왜 젠킨스를 사용했을까? 그것은 젠킨스가 주는 아래의 이점과 같다.

 

1. 전 세계적으로 많은 유저들이 사용하고 있어서 많은 래퍼런스가 존재한다. 래퍼런스가 많은 만큼 문제가 발생하였을 때 문제를 해결하기 쉽다.

2. 웹 인터페이스를 제공하여 사용이 편리하다. 젠킨스 설치 이후에는 CLI가 아닌 GUI화면에서 편하게 이용할 수 있다.

3. Java 기반이라 JDK, Gradle, Maven의 설정을 편리하게 할 수 있어 Java 기반의 프로젝트를 진행하는 사용자들이 빌드 설정을 하기 간편하다.

 

Jenkins를 이용한 CI적용하기

 

본인 같은 경우는 젠킨스를 도커 컨테이너를 이용해서 상용할 예정이다. 

도커에 대해서 알아보고 싶다면 https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html 해당 글이 아주 잘 정리 되어 있으니 보시면 될 것 같다. 

 

1. 왜 Docker를 사용하는가? 

일반적으로 젠킨스 설치 방법을 찾아보면 아래와 같은 과정을 거쳐야 하지만 도커를 사용한다면 젠킨스 컨테이너만 받아와 사용하면 되기 때문에 이러한 이점을 이용해서 도커를 사용했다.

 

1. Jenkins 이미지  다운로드

 

먼저 Docker Hub에서 젠킨스 이미지를 다운로드 해야한다. 젠킨스는 LTS버전을 사용했다.

 

docker pull jenkins/jenkins:lts

 

다운로드가 잘 되었다면 docker images 명령어를 통해서 잘 다운로드 됬는지 확인을 먼저 해주도록 하자.

 

 

2. Jenkins 컨테이너 설치

설치가 됬다면 이제 Jenkins 컨테이너를 설치 해야한다.

 

docker run -d --name jenkins -p 8080:8080 jenkins/jenkins:jdk11

 

위의 명령어로 젠킨스 컨테이를 실행 시켜주자  포트를 8080으로 설정했으니  localhost8080 으로 접속하여 jenkins인터페이스에 접속을 한다. 

 

3. Jenkins 설정

 

 

접속을 하기 위해서는 관리자 패스워드를 등록을 해야하는데 아래의 명령어를 통해서 확인할 수 있다.

 

// jenkins 컨테이너에 접속
$ docker exec -it jenkins bash
// 초기 관리자 키 확인
$ cat /var/jenkins_home/secrets/initialAdminPassword

위의 명령어를 실행하면 키를 찾을 수 있고 키를 정상적으로 입력하면 젠킨스 초기 플러그인 설정이 나온다. 추천 플러그인들을 설치해주고넘어 가자

 

 

 

설치하는 과정에서 본인 같은 경우에는 설치를 실패하는 경우가 있어서 계속해서 Retry를 해서 모두 다운 받았는데 아쉽게도 이유는 잘 모르겠다.

 

 

계정을 만들어 주자 

 

 

유저 설정이 끝났으면 마지막으로 jenkins에 접속할 URL을 설정하는데 기본적으로 설정되어 있는 localhost:8080주소를 유지하도록 하였다.

 

앞서 만든 사용자 계정으로 젠킨스에 접속하게 되면 아래와 같은 화면이 나오게 된다. 아래와 같이 젠킨스가 웹 인터페이스를 제공하는 덕분에 우리는 CLI가 아닌 GUI를 통해서 CI/CD를 구축할 수 있다. 

 

 

 

2편에서 계속 ~