직역하자면 지속적 통합이라는 뜻으로, 소프트웨어 개발에 빗대어 예를 들자면, 어떤 프로젝트에 참여하는 인원들이 서로의 로컬(Local) 작업 환경에서 작성한 코드들을 서로 연동시키기 위해서 하나의 보관함에 모으는 행위라고 보면 될 듯 하다.
지속적 배포 ....배달? 뭐 아무튼, 위의 CI 단계를 거친 작업물들이 계속적으로 한 곳으로 모이는 과정이라고 보면 된다.
이 과정 역시 소프트웨어 개발로 예를 들오면, CI 단계에서 빌드와 테스트 단계를 끝난 코드들이 CD과정을 통해 사용자들에게 보여줄 서버 같은 곳에 뿌려준다고 보면 된다.
(곰곰히 생각해보면, 어떤 기술적인 개념이라기 보다는 개발자의 '꾸준한 코드 배포 습관을 들이자' 는 취지로 만들어진 용어 같기도 하다.)
이제 이 글을 작성하게 된 계기를 말해야 될 것 같다.
일단 이번 블로그 만들기 프로젝트에서 나를 포함한 총 3명이 참가하게 되는데,
1) 각자가 다루는 파트가 크게 프론트(Front-end), 백(Back-end)으로 나뉘어져 있어서, 제대로 된 기능 구현을 하기 위해서는 두 파트의 코드가 통합되어야 하고,
2) 통합되었을 때 생겨나는 이슈들을 세 명 전부 파악할 수 있어야한다.
3) 그리고 개발을 하는 시간대가 전부다 다르기 때문에 각자의 코드를 항시 볼 수 있는 상태이어야 하고,
4) 각 파트의 어떤 코드들이 변경되었는 지도 파악할 수 있어야 한다.
5) 마지막으로 실제 상용화되는 서버를 제외한, 개발과 수정이 빈번히 일어날 수 있는 서버가 분리될 수 있는 환경이 있어야 한다.
그래서 우리는 5)와 3)을 해결하기 위해서 AWS(Amazon Web Service)라는 클라우드 서비스를 이용하기로 했고,
나머지 1), 2), 4)를 해결하기 위해 젠킨스(Jenkins)라는 CI / CD 툴을 사용하기로 했다.
(* 변경 이력을 자세히 확인하기 위해서는 젠킨스가 별도로 제공하는 플러그인을 연동시켜서 보고서 처럼 받아볼 수 있게 끔 설정이 필요하다. )
자바 런타임 환경 기반의 오픈소스 소프트웨어로써, 모든 작업들에 대한 자동 Build, Test, Deliver(=Deploy) 이 가능하다.
젠킨스에 대한 대략적인 설명은 공식홈페이지에 나온 정의를 통해 확인할 수 있고,
이번 글의 초점은 젠킨스 설치 및 CI/CD 구축 작업에 대한 방법을 쓸 것이다.
( * 이미 AWS EC2 설치 관련 내용들은 다른 블로그들에서 너무 잘나와있기 때문에 조금만 검색하더라도 쉽게 가능할 것이다. )
(* 아래는 공식홈페이지 설명)
https://docs.aws.amazon.com/ko_kr/efs/latest/ug/gs-step-one-create-ec2-resources.html
생성된 EC2에 원격으로 접속해서 수월한 작업을 위해 다음과 같은 CMD 툴을 다운받는다.
(필자는 XShell 다운)
( * EC2는 AMI : Amazon Linux 기준)
1) PuTTY (Window, Mac 둘다 가능)
2) XShell (Window 지원, 공식사이트에 Mac에 대한 지원 여부는 언급이 안되어있다. 잘 찾아보면 있을 수도...?)
https://www.netsarang.com/ko/xshell-download/
생성된 EC2에 SSH 연결을 통해 접속을 성공했다면, 아래와 같이 연결 세션에 대한 정보를 확인할 수 있을 것이다.
( * 호스트: AWS EC2가 제공해주는 IP 주소 )
루트 디렉토리로 기준 잡아주고,
$ cd /
앞으로 설치하는 패키지의 최신화를 위해서 yum update 실시.
( ** 업데이트가 안된 기존 yum 패키지에는 jenkins 가 없음.)
$ sudo yum update -y
wget으로 Jenkins 저장소를 땡겨온다.
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
Jenkins 저장소 키를 등록.
$ sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
저장소에 등록된 젠킨스 패키지를 설치.
$ sudo yum install jenkins -y
설치된 젠킨스를 실행해보자.
( * 설치된 젠킨스는 기본 포트가 8080으로 되어있기 때문에,
EC2에서 보안그룹 설정을 통해 8080포트를 사전에 개방해줘야 한다.)
$ sudo service jenkins start
자 그럼, 지금까지 잘따라왔다면 아래와 같은 에러가 뜰 것이다.
* 현재 젠킨스를 설치하는 EC2가 Java JDK 7 버전을 사용하고 있기 때문에, 8로 업그레이드 시켜줘야 한다.
$ sudo yum install -y java-1.8.0-openjdk-devel.x86_64
$ sudo /usr/sbin/alternatives --config java
(방금 설치된 java 8에 해당하는 넘버를 적고 엔터 ㄱㄱ)
그리고 다시,
$ sudo service jenkins start
http://{ ec2 host IP } : 8080 을 통해 젠킨스 페이지에 접속하면, 아래와 같은 화면이 보일 것이다.
" 초기 비밀번호를 아래 경로에 넣어놨으니, 그걸 확인해서 접속을 진행해라. " 는 뜻이다.
자 그러면 초기 비밀번호를 찾아보자.
루트 경로 기준으로,
$ sudo cat /var/lib/jenkins/secerets/initialAdminPassword
확인한 초기비밀번호를 넣고, 다음 단계로 넘어가면,
위 버튼(기본적으로 제공하는 플러그인)을 클릭하고 넘어가자.
( * 이후에 CI/CD 를 위한 별도의 플러그인이 필요하기 때문에, 이를 다운받아서 적용하는 법까지 설명하겠다.)
그리고 플러그인 설치가 끝나면, 계정 정보를 작성하라는 화면이 나올 것이다.
적당히 알아서 잘 작성해주자.
다음 단계로 넘어가기 전에, 위에서 잠깐 언급했듯이,
CI / CD 환경 구축을 위해서는 몇가지 플러그인이 추가적으로 필요하다고 했는데,
어떠한 것들이 필요한 것인지 아래 그림을 보면서 짐작을 해보자.
위 그림을 보게 되면,
1) 인수, 명환, 준범이 각각 작성한 코드를 git push를 통해 깃허브의 공용 레포지토리로 보낸다.
2) Github Webhook을 통해, 푸시된 코드들을 감지하고, 이를 AWS EC2로 이벤트를 날려준다.
3) AWS EC2에 있던 젠킨스가 Webhook을 통해 감지된 코드들을 가져온다.
4) 감지된 코드들을 젠킨스 내부에서 Build 단계를 거친다.
5) Build가 끝남을 감지하고, 미리 지정해둔 폴더로 Build 결과물을 보낸다.
크게 위와 같은 5가지 과정을 거치게 된다.
그리고 우리에게는 2) ~ 3)으로 이어지는 부분, 그리고 4) ~ 5)로 이어지는 부분에 해당되는 역할을 해줄, 젠킨스 플러그인이 필요하다.
그래서 다음 장에는 본격적으로 CI / CD 구축에 필요한 플러그인 설정 방법에 대해 중점적으로 설명하도록 하겠다.
댓글 영역