본문 바로가기
DevOps

docker를 이용한 CI 구축 연습하기 (젠킨스, 슬랙)

by 향로 (기억보단 기록을) 2017. 4. 9.
반응형

안녕하세요? 이번 시간엔 도커로 CI 구축 연습하기 (젠킨스, slack) 예제를 진행해보려고 합니다.
모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다.
(공부한 내용을 정리하는 Github와 세미나+책 후기를 정리하는 Github, 이 모든 내용을 담고 있는 블로그가 있습니다. )

팀내에서 젠킨스로 빌드/배포를 관리하고 있습니다.
여태 CI를 경험해본적이 없어 연습을 해봐야겠다고 생각을 하였습니다.
개인 서버가 별도로 없어서 어디에 구축을 해야하나 고민하던 중, 도커가 생각나서 도커에 구축하여 같이 연습을 하게 되었습니다.
도커와 젠킨스 초보이다보니 잘못된 내용이 있을 수 있습니다.
발견하시면 언제든 댓글 혹은 풀리퀘스트 부탁드리겠습니다.

젠킨스 & Github 연동

젠킨스는 도커 컨테이너를 이용해서 사용할 예정입니다.
혹시나 도커에 대해서 모르시는 분들은 링크를 참고하세요.

스프링부트 프로젝트 생성

먼저 빌드 테스트를 위해 간단한 스프링 부트 프로젝트를 생성하겠습니다.
빌드도구는 Gradle을 사용합니다.
본인의 IDE로 부트 프로젝트를 생성 후, Task 실행 테스트를 위해 간단한 Task만 build.gradle에 추가하겠습니다.

스프링부트 테스크

단계별로 나눠서 진행할 예정이라 젠킨스와 Github 연동 후, 바로 Task를 하기 위한 print Task를 등록하였습니다.
만드신 스프링부트 프로젝트는 Github로 push하겠습니다.

깃허브 스프링부트

(혹시나 Github에 등록해보신적이 없으시다면 이전에 작성한 포스팅을 참고하세요!) Github에 push 하셨다면 이제 본격적으로 시작하겠습니다.

젠킨스 도커 컨테이너 설치

링크를 통해 도커를 설치하셨다면 도커의 Kitematic을 실행합니다.
Kitematic

Kitematic에 로그인 하신뒤, 접속하시면 아래와 같이 검색창과 추천 컨테이너 리스트가 등장합니다.
젠킨스를 선택해서 create 버튼을 클릭합니다.
젠킨스 설치 이미지

그럼 아래와 같이 설치가 진행됩니다.

젠킨스 설치

터미널을 열어 젠킨스 컨테이너가 잘 설치되었는지 확인하겠습니다.

docker ps -a

(전체 컨테이너 리스트를 확인합니다.)

젠킨스 전체 확인

저는 기존에 설치된 젠킨스가 있어 2개의 젠킨스 컨테이너가 구동되고 있습니다.
젠킨스 컨테이너의 8080포트가 localhost의 32769 포트로 연결되었음을 확인할 수 있습니다.
브라우저를 열어 localhost:32769 로 접속하겠습니다.
접속하시면 아래와 같이 젠킨스의 비밀번호를 입력하는 페이지가 출력됩니다.

젠킨스 브라우저

화면에 출력된 경로에 가면 젠킨스 비밀번호가 있습니다. 직접 젠킨스 컨테이너에 접속하여 비밀번호를 찾아보겠습니다.
터미널을 열어 아래처럼 입력하겠습니다.

젠킨스 접속

명령어 입력 후, 젠킨스 컨테이너에 bash로 접속된 것을 확인할 수 있습니다.
경로를 따라 패스워드를 찾겠습니다.

젠킨스 패스워드

출력된 패스워드를 브라우저에 입력하시면 젠킨스 설치페이지로 이동하게 됩니다.
여기서 install suggested plugins 를 선택하시면 많이 사용되는 플러그인들이 포함되어 자동 설치되니 install suggested plugins로 설치를 하겠습니다.
젠킨스 설치화면1

설치가 끝나면 관리자 계정을 생성하시고 접속하겠습니다.
(저는 새로 설치하게되서 포트가 다르지만 처음 설치하시는 분들은 32769포트로 접속하시면 됩니다.)

젠킨스 설치 완료

접속화면이 잘 보이신다면 설치가 잘 된것입니다!
수고하셨습니다! 젠킨스 설치가 끝났으니 이제 Github 연동을 진행해보겠습니다.

젠킨스 설정

원래는 Github 플러그인을 별도로 설치해야하지만, 젠킨스 설치단계에서 install suggested plugins을 선택했기 때문에 이미 설치되어있어 이부분은 생략하겠습니다.
(혹시나 젠킨스 컨테이너를 다시 시작해야 한다면 docker start jenkins로 설치된 젠킨스 컨테이너를 실행 후, docker exec -it jenkins /bin/bash 를 입력하시면 됩니다.)
(docker run은 재설치를 합니다.)

젠킨스 메인페이지에서 새로운 Item을 클릭합니다.

새로운 아이템

아이템명(Job명)을 등록하고 Freestyle Project을 선택하여 OK를 클릭합니다.

새로운 아이템 등록

그럼 해당 Item(Job)의 설정화면으로 이동하게 됩니다.
여기서부터는 젠킨스로 관리할 Github 프로젝트가 있어야하기 때문에 Github 프로젝트를 하나 생성하겠습니다.
생성된 Github 프로젝트 페이지에서 url을 복사합니다.

Github url 복사

좀전에 열어놓은 Item 설정화면의 소스코드관리탭에서 Git 라디오 버튼을 선택하면 git url을 입력하는 곳이 나오는데 이곳에, 복사된 url을 입력합니다.
(참고로 젠킨스 도커 컨테이너는 이미 Git이 설치된 상태로 생성되니 별도의 Git 설치가 필요하지 않습니다.)

소스코드관리 탭

이후 Add 버튼을 클릭하면 아래와 같은 화면이 나타나는데

소스코드관리 계정

kind를 username with password로 선택하시고, 해당 github 프로젝트의 github 계정과 비밀번호를 입력하시면 됩니다.

실제로 사내에서 사용하실때는 제대로 된 인증방식을 사용하셔야 합니다.

젠킨스와 Github 간에 SSH 연동 방식을 정리한 포스팅이 있으니 참고해서 사용하시면 됩니다.


여기서는 테스트 용도이니 간단하게 진행합니다.

입려이 완료되면 Credentials 선택창에 방금 등록한 계정정보가 출력되니, 이를 선택합니다.

소스코드관리 브랜치선택

branch의 경우 master push시에 젠킨스 빌드가 관리 되도록 master를 입력하였습니다. 만약 develop브랜치에 push시에 빌드되도록 하신다면 */develop를 입력하시면 됩니다.

빌드 trigger는 Githu hook trigger를 선택하시면 됩니다.

빌드유발

마지막으로 Github에서 push가 올 경우 실행할 빌드를 등록하겠습니다.
바로 아래 Build를 클릭하셔서 execute shell을 선택합니다.

빌드 등록

여기에 저희가 실행시킬 빌드스크립트를 작성하겠습니다.
이미 프로젝트에 gradle 실행파일인 gradlew가 포함되어있기 때문에 별도로 gradle을 설치하지 않고 gradlew를 사용하도록 작성하겠습니다.

빌드스크립트

보시는것처럼 clean 수행 후, 이전에 작성한 task인 print를 수행하도록 하였습니다.
이러면 빌드 수행시 print가 수행되었는지 확인할 수 있겠죠?
마지막 저장까지 하시면 젠킨스 설정은 이제 끝이났습니다.
Github 설정으로 가보겠습니다.

Github 설정

본인의 깃허브 프로젝트 우측 상단에 위치한 Settings을 클릭합니다.

깃허브 세팅

Settings로 이동후, Add service 클릭 후, Jenkins(Github plugin)을 검색하여 클릭합니다.

깃허브 서비스 등록

서비스 등록 페이지로 이동하시면 Jenkins hook url 입력란이 보이실텐데요, 저희가 설치한 젠킨스의 주소를 입력해야합니다.
하지만, 여기서 localhost를 입력하게 되면 Github 서버의 localhost로 인식하게 되니, 젠킨스가 외부 IP를 가지게 해야합니다.
이를 위해 ngrok을 설치하겠습니다.

ngrok 설정

ngrok에 대한 자세한 설명은 outsider님께서 이미 정리하셨기 때문에 참고하시면 됩니다.

ngrok에 접속하여 본인의 PC에 맞게 다운로드합니다.
(젠킨스 도커 컨테이너의 OS가 아닙니다.)
다운 받은 ngrok 스크립트 파일은 본인의 PATH아래에 옮깁니다.
(저의 경우 /usr/local/bin에 옮겼습니다.)

ngrok 설치

EXAMPLES에 나와있듯이, 현재 로컬에 열려있는 포트 중 외부에 열고자 하는 포트를 입력하면 바로 ngrok 도메인과 연결해줍니다.
젠킨스 컨테이너의 포트는 젠킨스 접속시 사용하는 포트(저는 32771입니다)이니 이를 ngrok과 연결하겠습니다.

ngrok 연결

ngrok 연결완료

보시면 http://c66b71a2.ngrok.io/과 연결되었음을 확인할 수 있습니다.
브라우저에서 연결된 호스트로 접속해보겠습니다.

ngrok 연결확인

짠! 이젠 외부에서 저희의 젠킨스 컨테이너로 접속을 할 수 있게 되었습니다.
즉, Github에서 webhook을 할 수 있게 되었습니다.
좀 전에 열어둔 Github service 페이지에 있는 Jenkins hook url에 ngrok 주소를 입력하겠습니다.

깃허브 hook등록

주의하셔야할 점은 본인의 젠킨스 주소 뒤에 /github-webhook/을 추가해야하는 것입니다.
(뒤에 /를 잊으시면 작동이 안되시니 /를 잊지마세요!)
깃허브가 푸시가 되면 해당 path로 hook을 하기 때문입니다.
(젠킨스의 깃허브 플러그인으로 /github-webhook/는 이미 젠킨스에 포함되어 있습니다.)

자 이제 젠킨스와 Github의 연동이 끝났습니다!
그럼 확인을 해볼까요?

젠킨스 테스트

먼저 젠킨스의 Job 수행이 잘되는지 확인하겠습니다.
메인페이지를 보시면 일전에 등록한 Item이 바로 보이실텐데요, 해당 Item을 클릭하시고,

젠킨스 테스트

다음 화면에서 Build Now을 클릭하시면 바로 빌드를 수행하게 됩니다.

젠킨스 테스트

젠킨스 빌드가 끝나면 한번 확인해보겠습니다. Build History에서 가장 최근에 빌드된 내역을 클릭하시고 Console Output 을 클릭하시면!

젠킨스 테스트

이렇게 빌드가 잘 수행된것을 확인할 수 있습니다.

젠킨스 테스트

젠킨스의 빌드 기능은 확인되었으니, Github hook이 잘되는지도 확인하겠습니다.
본인의 프로젝트를 수정 후, git push를 수행하겠습니다.
(현재 master 브랜치에 hook을 걸었기 때문에 다른 브랜치는 안됩니다.)
푸시를 하시고 빌드 히스토리를 클릭하시면!
짜잔!

젠킨스 푸시 테스트

Github로 인해서 빌드가 시작되었다는 메세지를 확인할 수 있습니다.
도커를 이용해서 젠킨스와 Github 연동을 진행했습니다.
빌드 후에 있을 모든 일들은 위에서 작성한 빌드 스크립트를 통해서 진행하시면 되겠죠?
(ex: build, scp 등등)
다음은 slack 연동을 진행하겠습니다.

Slack 연동

slack 설정

먼저 배포 메세지를 받을 슬랙 팀이 필요합니다.
URL로 접속하여 팀을 먼저 만들겠습니다.
안내에 따라 이메일 확인을 받으시고 진행을 하시면 됩니다.
진행 중, 회원 초대 페이지가 보이면 가볍게 skip하시면 됩니다.

slack 초대

팀 개설이 끝났으면, 젠킨스의 빌드 메세지를 받을 채널을 개설하겠습니다.
해당 슬랙 방에서 아래와 같이 +버튼을 클릭합니다.

slack 채널1

채널의 이름과 목적을 작성합니다.

slack 채널2

그리고 젠킨스에서 사용할 인증 토큰을 생성하기 위해 브라우저에서 방금 만든 슬랙 url/apps로 접속하겠습니다.

slack 젠킨스 검색

위처럼 검색하신뒤 클릭하시면, install페이지가 등장합니다.

slack 젠킨스 설치

install 버튼을 클릭합니다.
그럼 아래와 같이 젠킨스와 어떻게 연동하면 되는지 상세하게 가이드가 보여지는데요, 이때 step3의 Team Domain과 Integration Token을 복사해놓습니다.

slack step3

그럼 slack의 준비는 끝이났습니다!
바로 젠킨스로 돌아가 slack 플러그인을 설치하겠습니다.

젠킨스 설정

젠킨스 관리 -> 플러그인 관리로 들어가 설치가능 페이지에서 slack을 검색하겠습니다.

젠킨스_slack플러그인

여기서 지금 다운로드하고 재시작 후 설치하기로 설치하셔야 합니다.
혹시나 재시작없이 설치하셨다면, 설치 후 jenkins를 꼭! 재시작하셔야합니다.
다시 메인페이지의 젠킨스 관리로 가신뒤, 시스템 설정으로 갑니다.
페이지를 내리다 보시면 Global Slack Notifier Settings 이 있습니다. 여기에 좀전에 복사한 slack의 Team domain과 token을 입력하시면 됩니다.

(여기서 만약 Integration Token 입력 화면이 없다면, 이 포스팅을 참고해서 Credential 방식으로 등록하시면 됩니다.)

slack 젠킨스 등록

마지막 채널까지 등록하신 후, Test Connection으로 테스트하신뒤, success가 출력되면 성공입니다.

여기까지 젠킨스 전체설정이였습니다.
이제 빌드 프로젝트에 빌드가 성공했을때 슬랙 메세지를 보내도록 설정하겠습니다.

초반부에 빌드 프로젝트에 github 정보를 등록했듯이, 빌드 프로젝트의 구성 페이지로 이동합니다.
아래로 내려가시면 빌드 후 조치 항목이 있습니다.

젠킨스 빌드후 조치

여기서 빌드 후 조치 추가 select box를 클릭하셔서 slack notification을 선택합니다.

젠킨스 노티

그럼 여러 체크박스가 등장하는데, 저흰 여기서 빌드가 실패/성공했을때만 슬랙 메세지를 보내도록 체크하겠습니다.

젠킨스 빌드후조치 완료

여기까지 저장을 하시면 이제 모든 설정이 완료되었습니다!

최종적으로 잘 되는지 확인하기 위해 Github에 push를 하겠습니다.
push를 하시고 slack의 #jenkins 채널을 확인해보시면

slack 빌드 확인

짠! 정상적으로 빌드 성공 메세지가 도착한것을 확인할 수 있습니다.

후기

도커 초보이지만 당장 인프라 환경을 연습하기에 최적의 기술인것 같다는 생각이 들었습니다.
이외에도 인프라 관련된 연습이 필요할 경우 도커를 이용하고, 이를 계속 기록으로 남기겠습니다.
긴글 끝까지 읽어주셔서 감사합니다!

참고


반응형