안녕하세요
jenkins maven svn tomcat 을 연동한 war 배포 환경 구성 방법입니다.
CentOS7 기준으로 작성 되었습니다.
*jre가 아닌 jdk가 필요합니다.
1-1. 설치가능 jdk 확인
yum list java*jdk-devel
[root@Trandent5 ~]# yum list java*jdk-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* epel: ftp.jaist.ac.jp
Installed Packages
java-1.8.0-openjdk-devel.x86_64 1:1.8.0.222.b10-0.el7_6 @updates
Available Packages
java-1.6.0-openjdk-devel.x86_64 1:1.6.0.41-1.13.13.1.el7_3 base
java-1.7.0-openjdk-devel.x86_64 1:1.7.0.231-2.6.19.1.el7_6 updates
java-1.8.0-openjdk-devel.i686 1:1.8.0.222.b10-0.el7_6 updates
java-11-openjdk-devel.i686 1:11.0.4.11-0.el7_6 updates
java-11-openjdk-devel.x86_64 1:11.0.4.11-0.el7_6 updates
java-latest-openjdk-devel.x86_64 1:14.0.2.12-1.rolling.el7 epel
yum install -y java-1.8.0-openjdk-devel.x86_64
2-1. maven 3.6.3 다운
wget http://mirror.apache-kr.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
2-2 압축해제
tar -xvf apache-maven-3.6.3-bin.tar.gz
2-3 이동
mv apache-maven-3.6.3 /usr/local/maven
2-4 환경변수 설정
1. bash_profile 열기 # vi ~/.bash_profile 2. 아래 내용 입력 및 저장 export MAVEN_HOME=/usr/local/maven PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin export PATH 3. 적용 # source ~/.bash_profile
Jenkins와 톰캣 연동 배포시 tomcat manager를 사용하여 배포 됩니다.
3-1. 톰캣 매니저 아이디, 권한 추가
톰캣의 manager-script 권한을 통해 배포 하므로 필수로 넣어주고 나머지는 필요하신 권한을 넣으시면 됩니다.
vi 톰캣설치경로/conf/tomcat-users.xml
tomcat-user.xml
<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="아이디" password="비밀번호" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
3-2 외부연결 허용 (optional)
*jenkins 서버와 톰캣 서버가 다른 경우 외부연결을 허용해 줍니다.
vi 톰캣경로/webapps/manager/META-INF/context.xml
기본 로컬로 되어있는 부분을 전체허용 합니다. 특정아이피만 허용도 가능합니다.
//기본설정 <Context antiResourceLocking="false" privileged="true" > <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor" sameSiteCookies="strict" /> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context> //127 ~ 부분 수정 .* 전체허용 <Context antiResourceLocking="false" privileged="true" > <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor" sameSiteCookies="strict" /> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow=".*" /> <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context>
3-3. war파일 용량제한 변경 (optional)
* 톰캣 manager는 기본적으로 war 파일 용량이 50mb로 제한 되어 있습니다.
빌드후 배포시 war파일의 크기가 50 mb를 넘는경우 에러가 발생하니 필요한 경우 늘려줍니다.
vi 톰캣경로/webapps/manager/WEB-INF/web.xml
web.xml
<multipart-config> <!-- 50MB max --> <max-file-size>52428800</max-file-size> <max-request-size>52428800</max-request-size> <file-size-threshold>0</file-size-threshold> </multipart-config>
필요한 만큼 늘려 줍니다.
4-1. 로그인 합니다.
4-2. Jenkins 관리 - Global Tool Configuration
4-3. JDK 경로설정
맨 처음 설치한 JDK 경로를 설치 합니다.
* Install automatically 체크해제
이름은 아무거나 넣어주고 설치 경로를 넣어줍니다.
잘못입력하는 경우 경고 문구가 표시됩니다.
4-4. Maven 경로 설정
아래로 내려보면 maven 항목이 있습니다.
위에서 설치한 maven 경로를 잡아줍니다.
* Install automatically 체크해제
4-5. 경로설정이 끝났으면 저장 및 적용 합니다.
5-1. Jenkins 관리 - 플러그인 관리
5-2. 설치가능 - Deploy to container Plugin 검색 후 설치
저는 이미 설치되어 있어서 나오지 않으나 검색후 설치합니다.
재시작을 하면 플러그인이 설치됩니다.
SVN 플러그인도 깔려있지 않다면 깔아줍니다.
6-1. Dashboard - 새로운Item(왼쪽 상단) - 이름입력 - Freestyle project 선택
6-2. 소스코드관리 - Subversion 선택
최초 등록시 SVN 계정정보가 없으므로 Add버튼 눌러줍니다.
6-3. SVN 계정정보 입력
입력을 하면 Credentals에 입력한 계정 정보가 나타 납니다. 선택
6-4. Build 설정
Maven version은 아까 maven을 등록했으면 등록한 이름으로 나타납니다. 선택
Goals는 clean install로 하겠습니다. 입력
6-5. 빌드 후 조치
빌드가 끝나고 톰캣과 연동하여 war를 배포하는 부분입니다.
3. 에서 설정한 톰캣과 연동합니다.
6-6. Add를 눌러서 톰캣 매니저 사용을 위해 추가한 아이디 비밀번호를 입력합니다.
6-7. WAR/EAR files에는 **/*.war를 입력해 주고 Context path는 /를 넣어줍니다.
* Tomcat URL은 톰캣이 떠있는 서버의 URL을 입력해 주면 됩니다. /manager 경로는 자동으로 붙기 때문에 입력해 줄 필요가 없고 경로를 바꿔서 사용중인 경우에는 고급 버튼을 누르면 명시적으로 설정 가능합니다.
* 여기서 설정한 Context Path를 사용하기 때문에 톰캣의 server.xml의 <Context docBase ~~~~></Context>는 지워줍니다.
위 설정대로 배포하는 경우 pom.xml의 프로젝트명과 버전이 붙은 이름으로 war가 생성됩니다.
pom.xml
ex)<name>trandent</name>
<packaging>war</packaging>
<version>5.0</version>
trandent-5.0.war 생성 및 배포
pom.xml 내의 build안에 finalName을 추가해주면 설정한 이름으로 war가 생성됩니다.
<build>
.
.
<finalName>ROOT</finalName>
</build>
ROOT.war 생성 및 배포
수동배포시는 잘 동작했으나 jenkins를 통한 maven 빌드 배포시 발생했던 문제점 들이 몇가지 있습니다.
8-1. 프로젝트 내 maven을 사용하지 않고 따로 넣은 lib를 못불러옴
- 별도로 넣은 라이브러리를 pom.xml에 등록
ex) WEB-INF - lib - aaa.jar 를 넣은경우
pom.xml에 dependency 작성
<dependency>
<groupId>aaa</groupId>
<artifactId>aaa</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/aaa.jar</systemPath>
</dependency>
8-2. context.xml 내 classpath로 설정된 경로에 있는 파일 못 불러옴
- 수동 배포와 자동배포시 어떤 설정 때문인지 원인 파악이 힘든 관계로 로컬과 서버에서 위치 설정 변경하며 둘다 찾는 위치로 수정