이번엔 마지막으로 젠킨스를 이용해서 SVN에 있는 Maven 프로젝트를 젠킨스를 이용해서 빌드 후 톰캣서버에 디플로이하는 방법을 알아보겠습니다.
개발환경 관련 이전 포스팅
- [개발환경] Visual SVN Server와 Tortoise SVN Client 툴을 설치하고 연동해서 활용하는 방법(문서공동작업, 소스형상관리)
- [개발환경]이클립스(eclipse)와 서브버전(SVN) 연동해서 프로젝트 소스형상관리하는 방법

1. 젠킨스 설치
Jenkins
Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software
jenkins.io




설치를 완료하면 http://localhost:8080/ 경로를 이용해서 웹브라우저에 아래와 같이 표시됩니다.
아래에 표시된 경로에 비밀번호가 적힌 파일이 있습니다. (initialAdminPassword 파일)
해당 파일에 적힌 비밀번호를 확인 후 비밀번호를 입력합니다.

별도로 플러그인을 선택해서 설치할 경우 'Select plugins to install을 선택합니다.
나중에 플로그인을 추가하거나 삭제할 수 있으므로 Install suggested plugins 를 클릭해도 됩니다.

플러그인을 설치합니다. 시간이 꾀나 걸리네요

계정을 생성합니다. (전부 admin으로 했습니다. ㅎㅎ)

젠킨스 URL을 정의할 수 있습니다. 이 때 젠킨스가 설치된 컴퓨터 IP를 이용해서 URL을 구성하면 다른 사람도 젠킨스에 접근할 수 있습니다. (다른 사람이 호스트 설정하기 귀찮으니 컴퓨터IP를 이용해서 URL을 구성하는게 좋습니다.)

Maven 프로젝트 빌드를 위한 젠킨스 설정
젠킨스에서 maven 프로젝트를 빌드하려면 jdk, maven 을 연동해야 합니다.
젠킨스 관리화면에서 Jenkins관리 - Global Tool Configuration을 클릭합니다.


Maven 설정
Maven이 설치되어 있지 않으므로 Install automatically 항목체크

jenkins 관리 - 플러그인 관리 에서 설치 가능 탭에서 Maven Integration 플러그인 설치해줍니다.

톰캣 서버 배포를 위한 플러그인 설치
젠킨스가 빌드한 결과물(war파일)을 톰캣에게 배포하려면 Deploy to container Plugin 플러그인이 필요합니다.
jenkins 관리 - 플러그인 관리 에서 설치 가능 탭에서 deploy to ontainer를 검색해서 설치합니다.

젠킨스에서 톰캣서버에 접근하기 위해 톰캣서버 tomcat-users.xml 수정

</tomcat-users> 루트 태그 바로 안쪽에 추가하면 됩니다.
<!-- 젠킨스 톰캣서버 빌드를 위해 사용자계정 추가-->
<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin" password="admin" roles="tomcat,manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
참고. 톰캣 권한 설정 정보


톰캣서버를 재시작해줍니다.
CMD 창에서 톰캣서버 bin 폴더로 이동 후 shutdown.bat, startup.bat 실행

젠킨스 새로운 아이템(프로젝트) 추가


소스 코드 관리에서 SVN Repository URL 입력하고, 접근할 수 있는 계정정보 관리를 위해 Credentials의 Add - Jenkins를 클릭합니다.

젠킨스 계정관리 화면에서 SVN에서 생성한 사용자계정을 입력합니다.

계정을 추가하면 Credentails에서 추가한 계정을 선택할 수 있습니다.

Build에서 pom.xml을 선택하고, Goals에는 clean install을 입력합니다.

혹시, pom.xml이 SVN 경로 바로 아래에 있지 않고 프로젝트 폴더 안에 위치한 경우는 폴더 경로를 추가해줘야 합니다.

빌드 후 조치 에서 Deploy war/ear to a container를 클릭합니다.

젠킨스 Job 실행
모든 설정이 완료되었으니 프로젝트 Build Now를 클릭한다.

그런데 빌드 실패!

SVN에서 소스는 잘 가져왔는데 빌드할 때 사용할 pom.xml을 찾지 못하고 있습니다. 그런데 젠킨스에 보면 pom.xml이 잘 가져온게 보이네요.

에러메세지를 보니 pom.xml 파일을 TestMavneProject 폴더 밑에서 찾고 있네요. 그런데 실제 pom.xml은 TestMavneProject/maventest 라는 폴더 안에 들어가 있네요.
왜 그런가 봤더니 SVN에 폴더 구조가 maventest 폴더 안에 개발소스가 들어가 있는 구조입니다.

그래서 젠킨스에서 pom.xml 경로를 변경했습니다.

그리고 Build를 했더니 정상적으로 빌드까지는 성공했습니다.


이번엔 톰캣서버 디플로이 실패!!
ERROR: Build step failed with exception
org.codehaus.cargo.container.ContainerException: Failed to redeploy [C:\Program Files (x86)\Jenkins\workspace\TestMavneProject\maventest\target\maventest-0.0.1-SNAPSHOT.war]
Caused by: java.net.ConnectException: Connection refused: connect
Build step 'Deploy war/ear to a container' marked build as failure
Finished: FAILURE
Connection refused 가 원인이네요.
톰캣서버가 꺼져있었습니다. ㅎㅎ
톰캣서버 재실행하고 다시 빌드하니 톰캣서버 디플로이까지 잘 되네요.


그런데 war파일 이름을 잘 정해야할거 같네요. 아래와 같이 이상한 URL이 되어 버렸습니다. ㅎㅎ
그래도 일단 성공하니 기분은 좋네요.

이제 모든 개발자들은 젠킨스 URL을 통해 젠킨스에 접속 후 언제든 빌드를 할 수 있게 되었고, 빌드를 실행하면 자동으로 톰캣서버에 배포가 되고, 반영된 내용을 웹브라우저에서 확인할 수 있게 되었습니다.
참고로 개발환경 구축은 내용이 길어서 아래와 같이 연재로 구성했습니다.
1. [개발환경] 개발서버를 이용해서 여러명의 개발자가 공동작업하는 환경에 대한 설명

3. [개발환경] Visual SVN Server와 Tortoise SVN Client 툴을 설치하고 연동해서 활용하는 방법(문서공동작업, 소스형상관리)
4. [개발환경]이클립스(eclipse)와 서브버전(SVN) 연동해서 프로젝트 소스형상관리하는 방법
5. 젠킨스(Jenkins) + 톰캣(Tomcat) 서버 + 서브버전(SVN) + 메이븐(Maven) Project 자동빌드 및 배포 설정 총정리