kok202
자동 배포시스템 : 깃허브 -> 젠킨스 -> 도커

2019. 6. 22. 15:38[정리] 기능별 개념 정리/Jenkins

동영상 강의 출처 : https://www.youtube.com/watch?v=ZM9sU3nqCMM&list=PLDcefyNIUHcVMj_iTMqnc-Ia_vZS4Vg29&index=3&t=1753s

 

 

 

기존의 배포 방식

- RSync

- SymbolicLink

- VCS

- 복사, 붙여넣기

 

본 강의의 목적

 - Github 에서 Webhook을 발생시켜 Jenkins에서 이를 자동 빌드할 수 있도록한다.

 - Jenkins 로 Continous Integration 한다.

 - Docker-compose 로 Continous Deployment 한다

 

 

 

 


Continuouse Integration 

젠킨스

- CI 도구

- 테스트

- 빌드

 

실행 : /etc/init.d/jenkins start

옵션 : /etc/default/jenkins

 

 

 

 

 

Github Webhook

깃허브에서 Webhook 을 젠킨스에 날리면 젠킨스가 이를 받아서 자동 빌드할 수 있도록 해보자.

 

1. Github plugin 설치

 - 깃허브가 Webhook 을 Jenkins 에 날릴 수 있도록 Jenkins 에 설치해야하는 plugin

 

2. 작업을 만든다.

 - General : github project 체크

 - 소스코드 관리 : Git 에 관련 설정 입력

 - 빌드 유발 : Build when a change is pushed to GitHub

 

 

 

 

 

Github 에 Webhook 생성

Github Repository -> Settings -> Webhooks 에서 Add webhook 클릭

1. Payload URL : http://<My-젠킨스-도메인>/github-webhook

2. Just the push event. 체크

3. Active 체크

깃허브에 push 가되면 Webhook 이 Jenkins 로 날라가게된다.

 

 

 

 

 

Script

Job 이 Webhook 을 받으면 처리할 빌드 스크립트를 작성한다,

Jenkins -> Project Job -> 구성 -> 빌드 -> Command

${JENKINS_HOME}/script/push.sh
${JENKINS_HOME}/script/deploy.sh

가볍게 push.sh 쉡스크립트와 deploy.sh 라는 쉘스크립트를 통해서 빌드를 하도록 하였다.

push.sh 와 deploy.sh 관련 파일은 영상 참조한다.

 

 

 

 

 

SSH 인증

Job 이 빌드하는 과정중에 SSH 가 필요한 과정이 있으면 SSH 인증이 필요할 수 있다.

그런데 비밀번호 치는 것을 자동화 시킬 수 없으니 아예 포함시키는 방법 

 

 

 

 

 

No push & pull

운영 환경은 자주 변하지 않는 반면 소스 코드는 자주 변한다. 코드 관리를 호스트에서 하고 싶다.

소스 코드가 변경될 때 도커 컨테이너를 내리고 다시 올려야하는 것이 참 이상하다.

 

 

 

 


Continous deployment (무중단 배포)

배포하는 과정중에 down 했다가 up하는 과정에서 잠깐 서비스가 중단되어야하는 경우가 생긴다. 이를 로드 밸런서를 이용하여 해결해보자. 보통 로드밸런서는 HA proxy 나 NGINX를 사용한다.

 

Blue-Green Deployment

Blue : 기존 버전

Green : 새로운 버전

 

1. 배포 요청이 들어온다.

2. Green 환경에서 테스트를 돌린다. 테스트가 통과하면 Green 에 배포한다..

3. Green 환경으로 Blue 의 트래픽을 돌리도록 한다.

4. Blue 의 트래픽을 끊는다.

문제가 생길경우 다시 트래픽을 전부 Blue 로 돌린다.

 

 

 

 

 

배포의 실패 여부를 Slack 알림으로 받아보자

1. Jenkins 에 Slack plugin 설치

2. Job 의 빌드후 조치에 Slack Notifications 를 추가해준다.