[Jenkins] Jenkins : Hello Jenkins
일을 하면서 배운것을 기록하는 블로그에 거미줄이 쳐졌다. 한동안 너무 바쁜 탓이었다.
요즘 한 고객사의 이벤트 페이지 작업을 하고 있었다. 이벤트 페이지다 보니 아주 단순하게 구성이 되어 나혼자서 개발을 담당해야 했다.
나에게 주어진 지원은 DB가 설치된 리눅스 서버하나 였다.
서버하나 주어지고 개발을 알아서 해야 되는 상황이었다. 현재 이 회사에 입사해 처음있는 일이었다. 무얼까 공허함이 느껴지기는 했지만 일단은 무조건 해내야 한다는 생각에 휩싸였다. 2년차 개발자에게 이 일은 껌이나 다름 없었고 못한다고 하면 개발자 자격이 없는 것 같았다.
스스로를 증명하고자 열심히 했다. 개발프레임워크 모두 처음부터 내 마음대로 구성이 가능하다고 해서 진짜 내 마음대로 개발을 진행했다. (지금 생각하면 이러면 안되는 게 아닌가 싶은데.. 뭐.. 간단한 이벤트 페이지니까 그러려니 생각했다.)
구성한 프레임워크는 다음과 같았다.
- 스프링 부트 (jar말고 war로)
- mysql + Mybatis
- 기타 이전 프로젝트에 사용되었던 코드들(로그, AOP, 인터셉트 등등)
- JSP 화면 구성
- 메이븐
화면의 디자인 및 이벤트 스크립트는 디자이너 없체가 떠로 있어서 화면에 대한 부담은 없엇다. 제공받은 html을 jsp로 변환하는 작업이닌 복사 붙여 넣기만 하면 되었다.
고객사의 요청사항 가운데 구글어날라틱스 적용이 따로 있었다. 그게 문제긴했다. SPA(Single Page Application) 였지만 GA에 기록되는 내용은 꼭 이벤트 페이지에서 찍게 해달라는 요청 때문에 전체 화면 로드를 각각 분리하게되어 화면 분리를 진행디. 디자이너도 힘들고 개발자도 힘든 고객의 폭풍 수정 요청이 지나고 마침내 개발을 진행했지만 이제는 배포가 문제였다.
이전 카페 24에서 배포를 할때 Root 이름으로 톰캣 서버에 올리고 서버를 껏다 키는 방식을 생각 했던 나에게 실제 현업의 배포또한 다르지 않음을 배울 수 있었다. 문제는 매번 이 작업을 FTP에 파일을 올리고 서버를 매일 내렸다 껏다하는 작업을 배포할 때 마다한다는게 너무 귀찮은 일이었다.
그래서 나는 처음으로 스스호 CI환경을 만들고 싶어졌다. (Continueous Integreition)
젠킨스 + 메이븐 + SVN
젠킨스. CI 오픈소스 툴가운데 가장 강력한 영향력을 가지고 있는 배포 툴이다. git, svn 모두를 지원할 뿐만 아니라 shall 스크립트를 어느정도 알게 된다면 빌드이후 서버에 배포하는 작업을 클릭한번에 처리할 수 있도록 해준다.
- 설치
리눅스서버에 해당 프로그램을 설치 할때 두가지 방식이 존제한다. 하나는 war파일을 다운받은뒤 java 1.8버전 이사으로 실행해주는 것이고 yum 명령어를 통해 추가 설치를 진행하는 것이다. war파일로 설치를 진행하는 것을 추천한다.
nohup java -jar /home/letter/jenkins/jenkins.war --httpPort=9090 > /home/letter/jenkins/logs/jenkins.log 2>&1&
# 해당 파일을 sh파일로 만들어 놓으면 편리하다.
# 해당 로그의 파일이 저장되는 위치는 미리 만들어 놓자.
이렇게 설치를 진행하고 서버의 아이피 주소명:9090으로 접속하면 젠킨스 콘솔이 등장한다.
젠킨스 콘솔에 비밀번호를 입력하라고 한다.
설치 당시 로그에 찍힌 비밀번호를 복사한뒤 위에 콘솔에 입력해준다.
그럼 유저 정보를 설정하는 창이 뜬다. 간단하게 아이디와 비밀번호를 설정해주자.
그러면 아무것도 없는 콘솔창이 뜬다.
빌드 배포의 핵심은 global tool configuration
여기서 자바와 메이븐 정보를 입력한다.
빌드툴은 메이븐이다. 따라서 메이븐을 리눅스 서버에 설치 해주어야 한다. 젠킨스를 설치할때 추가 플러그인을 설치 했다면 굳이 따로 설치할 필요까지는 없다.
- 빌드 설정
새로운 아이템을 눌러준다.
소스 코드 관리에서 형상관리 git과 svn중 고른다.
svn 선택후 svn 프로젝트의 정보를 입력해 주어야 한다.
SVN이 미리 설치 되어있다면 SVN에서 배포 대상이 되는 프로젝트 주소를 입력한다.
사용자 정보를 add해준다. svn 프로젝트 사용자 설정시 등록해둔 사용자 아무거나 괜찮다.
BUILD 항목으로 가서 invoke top-level Maven targets 선택
goal은 clean install
Execyte shell 항목에는 간단하게 빌드 이후의 작업을 해주는 곳이다.
cd /web/apache/apache-tomcat-9.0.26/webapps
rm -rf NewsLetter-0.0.1-SNAPSHOT.war
cd /web/apache/apache-tomcat-9.0.26/webapps
rm -rf SkMagicNewsLetter-0.0.1-SNAPSHOT
cp /root/.jenkins/workspace/NewsLetter/target/NewsLetter-0.0.1-SNAPSHOT.war /web/apache/apache-tomcat-9.0.26/webapps
cd /web/apache/apache-tomcat-9.0.26/bin
sudo ./shutdown.sh
sleep 10
sudo ./startup.sh
sleep 10
여기서는 간단하게 war파일을 was에 배포해주는 작업을 진행했다. (만약 도커를 진행한다면 여기서 도커파일 실행시켜 컨테이너 작업도 가능하다.)
저장을 누른다.
- 빌드/배포
간단하다. Build Now를 돌린다.
진행바를 누르면 로그가 쌓이다 오~
Build success!
삽질 안녕!
SVN에 일단 형상관리로 커밋을 실컷 해주고,
이렇게 콘솔에 접속하여 Build Now를 실행해주면
로칼에서 확인한 것을 서버에서도 배포를 통해 확인 가능하다.
Comments