Jenkins 사용기-1

빌드, 배포 자동화를 손쉽게 구성할 수 있도록 도와주는 도구 Jenkins 첫번 째 사용기이다.
두번 째 포스팅이 있을지는 모르겠지만, 만약을 위하여 첫번 째 사용기라 명명하겠다.
먼저 AWS 환경을 사용하므로 EC2에 젠킨스를 설치하는 방법도 있지만, AMI를 이용하면 손쉽게 구성이 가능하다.

AMI 퍼블릭 이미지는 EC2 대시보드 왼쪽 패널에서 이미지 > AMI를 누르고, 좌측 상단 [내 소유]로 지정된 드롭다운 메뉴를 누르면 퍼블릭 이미지를 선택할 수 있다. 해당 메뉴에서 퍼블릭 이미지를 선택한 후, jenkins를 검색하면 bitnami 이미지들을 볼 수 있을 것이다.

Jenkins의 장점은 확장성인데 여러 플러그인들이 있어서, 필요한 기능을 추가하여 사용하기에 적합하다.
여러 플러그인들을 설치해놓았지만 그중에서도 유용하게 사용했던 플러그인 몇개를 소개해보겠다.

1. 유용하게 사용한 플러그인

AWS CodeDeploy Plugin for Jenkins

빌드 후 조치로 CodeDeploy를 사용할 수 있도록 지원해주는 플러그인이다.
해당 job이 완료되면 사후 조치로 AWS CodeDeploy 서비스를 추가하여 배포까지 자동으로 할 수 있다.
배포 실패 시, 가장 최근에 성공한 버전으로 자동 롤백도 가능하다.
ELB 활성화 기능과 자동 롤백 기능, 블루/그린 배포를 잘 활용하면 서비스 퀄리티를 유지하면서 안전한 배포를 기대할 수 있다.
과금은 사용한 S3, 인스턴스만큼 지불되니 블루/그린 배포가 굳이 필요하지 않은 서비스라면 오버프로비저닝하지 않도록 주의해야한다.

GitLab Hook Plugin

GitLab WebHook을 이용하여 빌드 유발을 가능하게 해주는 플러그인이다.
GitLab hook은 각종 Git 이벤트 발생 시에 Jenkins에 hook을 날릴 수 있도록 설정할 수 있다.
예를 들면, push 이벤트나 merge 이벤트 시 해당 job에 어떤 git 이벤트가 있었는지 알려줄 수 있다.
jenkins는 이러한 hook을 받아서 빌드 유발을 설정한 이벤트라면 job을 시작한다.

Slack Notification Plugin

슬랙 노티 플러그인이다. 따로 노티를 구현할 필요없이 팀슬랙에 Jenkins-CI 앱만 추가하면 사용가능하다.

Workspace Cleanup Plugin

job상태가 stable하게 완료되었다면 해당 workspace를 삭제하도록 사용하고 있다.

Parameterized Trigger plugin

한 개의 job은 하나의 활동만 하도록 설정해놓았다. 예를 들면, gitlab으로부터 코드를 clone하는 job 하나, 그 job이 stable 하게 완료되면 build를 하는 job 하나.
이런 이유로 하나의 workspace에서 여러 job들이 일련의 활동들을 하도록 설정했어야하는데, 이때 활용한 플러그인이 Shared Workspace이다.
이와 마찬가지로 앞단의 job과 공유해야하는 여러 파라미터들을 관리하기 위하여 사용한 플러그인이다.
빌드 후 조치로 다음 job을 트리거 걸면서 파라미터를 넘겨줄 수 있다.

Build Pipeline Plugin

연결된 job의 상태를 가시성있게 볼 수 있도록 View를 제공해주는 플러그인이다.

2. 평일에만 주기적으로 배포하기

Jenkins를 이용하면 스케쥴 배포를 이용하여 원하는 시간마다 빌드와 배포를 자동으로 수행할 수 있다.
사용하고 있지는 않지만, 평일에만 스케쥴 적용을 할 수 있는 플러그인은 없나 찾아본 결과, 현재까지 해당 기능은 없는 것으로 보인다.
(혹시 잘못된 정보라면, 댓글 남겨주시면 큰 힘이 됩니다. )
그래서 있는 기능을 활용해서 어떻게 설정할 수 있을까 고민하다가, Jenkins가 설치된 서버의 cron을 사용하여 curl로 빌드유발을 하도록 설정해보았다.
빌드 유발에 빌드를 원격으로 유발을 활성화하면 되고, 크론으로 밑의 쉘을 원하는 시간에 실행하도록 하면 된다.

#!/bin/bash   
TODAY=`date +%a`   
if [ ${TODAY} = "Sat" -o ${TODAY} = "Sun" ]  
then
    echo ${TODAY} "is weekend"  
else   
    curl -X -POST http://${jenkins_user}:${jenkins_token}@localhost:8080/job/${jenkins_job}/buildWithParameters?token=${jenkins_job_token}&${jenkins_param_name}=${jenkins_param_value}   
fi   

혹시 You must use POST method to trigger builds. 라는 메세지와 함께 버튼을 눌러야 빌드가 되도록 응답이 온다면, job token을 제대로 설정하고 입력했는지 확인해보자.

(사실 빌드유발을 Build periodically 로 설정하고 크론잡 설정을 평일로 하기만하면 됨.)

comments powered by Disqus