서버는 CentOS7버전이고, 톰캣 8버전입니다.
젠킨스에 올라가 있는 프로젝트의 server.xml 중 <Host> 정보는 아래 코드와 같습니다.
<Host name="localhost" appBase="/home/feadmin_web" unpackWARs="true" autoDeploy="true">
<Context path="/" reloadable="true" docBase="./feadmin_web" allowLinking="true" />
<Context path="/manager" debug="0" privileged="true" docBase="../tomcat-feadmin/apache-tomcat-8.5.69/webapps/manager"/>
</Host>
젠킨스에서 빌드 구성을 시작하면, 자동으로 젠킨스가 프로젝트.war 파일을 생성해줍니다. 그리고 자동배포 설정까지 진행하면 위에 <Host> 정보를 바탕으로 해당 디렉터리에 war 파일을 만들어줍니다. 그리고 unpackWARs 프로퍼티로 인해 war 파일은 압축이 해제됩니다.
/var/lib/jenkins/workspace 위치에 job 이름 기준으로 디렉터리들이 생성되고, 디렉터리 안에 war파일이 만들어집니다. 이 디렉터리 안에 만들어진 war가 어떻게 <Host>에 설정한 디렉터리로 이동되는 지는 잘 모르겠습니다 .. 아마 Deploy war/ear to a container 라는 젠킨스 플러그인이 이 행위를 해주는 것 같습니다.
본론으로 넘어와 <Host> 태그 내 중요한 프로퍼티에 대해 설명하겠습니다.
<Host name="localhost" appBase="/home/feadmin_web" unpackWARs="true" autoDeploy="true">
...
</Host>
Host
- 가상의 호스트를 정의한다.
- 톰켓의 기본 Document Root는 webapps/ROOT
- appBase는 $CATALINA_HOME 디렉토리와 상대경로를 받는다.
- 이때 루트는 $CATALINA_HOME/webapps/ROOT
autoDeploy (default true)
autoDeploy 옵션이 true일 경우 WAR파일을 appBase(=webapps) 디렉토리에 위치시키면 톰캣 구동시 WAR파일을 자동으로 읽어서 배포(deply)합니다.
unPackWARs(default true)
unPackWARs 옵션이 true로 되어 있을 경우에는 WAR 파일의 압축을 풀어서 배치하게 됩니다.
예로 $TOMCAT_HOME/webapps/examples.war 파일을 위치시키면 examples라는 디렉토리를 생성후에 war파일을 압축 해제합니다.
appsBase 이외의 디렉토리에있는 WAR 파일을 디플로이 시키고자 한다면 context XML 파일에 아래와 같이 정의해 주면 됩니다.
appBase
appBase 같은 경우 docBase와 많이 헷갈리는 부분입니다. 상대경로, 절대경로 둘 다 가능하지만 저는 편의상 절대경로로 지정하였습니다. 젠킨스에서 빌드를 하고 war 파일이 생성되는 곳을 /home/feadmin_web으로 하고 싶었기에 이와 같이 지정하였습니다. 애플리케이션 구동 시 <Context> 태그의 docBase를 기준으로 애플리케이션을 구동합니다.
appBase에서 설정한 /home/feadmin_web 경로에 war 파일이 생성됩니다. 그리고 unPackWARs 옵션이 true 이므로 feamin_web 폴더가 생긴 것을 볼 수 있습니다.
<Host name="localhost" appBase="/home/feadmin_web" unpackWARs="true" autoDeploy="true">
<Context path="/" reloadable="true" docBase="./feadmin_web" allowLinking="true" />
<Context path="/manager" debug="0" privileged="true" docBase="../tomcat-feadmin/apache-tomcat-8.5.69/webapps/manager"/>
</Host>
Context
- 가상호스트에 동작하는 하나의 웹 애플리케이션
첫번째 Context
path="/" 이고 docBase="./feadmin_web" 입니다.
path 같은 경우 http://ip주소:포트/ 로 들어갔을 때 /home/feadmin_web/feadmin_web 을 바라보게 하겠다라는 뜻입니다. appBase가 docBase의 경로의 기준이 됩니다.
/home/feadmin_web 여기까지가 appBase이고 /feadmin_web 가 docBase인 것이죠.
애플리케이션을 실행하기 위한 자바 리소스는 모두 /home/feadmin_web/feadmin_web에 있습니다.
두번째 Context
path="/manager" 이고 docBase="../tomcat-feadmin/apache-tomcat-8.5.69/webapps/manager" 입니다.
젠킨스에서 자동배포를 하려면 http://ip주소:포트/manager에 접근이 가능해야 합니다. 따라서 manager에 접근할 수 있는 정보가 담긴 파일의 경로를 지정해주기 위해서
docBase="../tomcat-feadmin/apache-tomcat-8.5.69/webapps/manager" 로 하였습니다.
docBase(물리적 위치)를 path(논리적 위치)로 포워딩 하는 느낌이라고 보시면 될것 같습니다.
*참고 : 주석이더라도 절대로 server.xml 파일에 한글을 작성하지 마세요. 한글로 주석을 달더라도 톰캣에서 에러가 납니다.
'...' 카테고리의 다른 글
[Kubernetes] nodeport, port, targetport 차이 (0) | 2021.08.17 |
---|---|
[Linux] max user processes 늘리는 방법 (0) | 2021.08.17 |
[ElasticSearch] org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root (0) | 2021.08.11 |
[ElasticSearch] 서버 내 ElasticSearch 설치하기 (0) | 2021.08.11 |
[Jenkins] Maven Job 설정 간단한 설명 (0) | 2021.08.11 |