개발환경

gitlab ci 로 maven tomcat war 배포

스마트큐브 2019. 8. 17. 18:54

아 역시 별거 아니였는데 시간을 5시간 정도 날린거 같다.

gitlab 운영하는게 부담스러워서 무료 배포툴 조합으로 해볼려고 했지만 

역시 쉽지 않아서 그냥 당분간은 gitlab 로 전념하기로 하고 

docker 배포가 아닌  tomcat manager를 통한 war 배포 스크립트를 작성해보기로 했다. 

찾아보니 친절하게 mvn tomcat7:deploy 가 있었다. 

"아 이거다 금방하겠네" 싶었는데 

하다보니 gitlab-runner 가 실행되는 서버에 JDK 및 maven 설치가 필요했고 

아무나 tomcat-manager 에 접근하지 못하도록  manager 경로 ip 제한 조치가 필요했다. 

그리고 한참작업진행중에 mvn 빌드가 아무리 봐도 느린거 같아서 다시 docker 빌드를 잠깐 알아보다  gitlab registry 셋팅에 빠져서 한참 헤매다가  다시 접고 초심으로 돌아 왔다.  

암튼 기존 jenkins 를 이용해서 tomcat 배포를 하던 프로젝트여서   

pom.xml 에 몇가지 추가 설정이 필요했다. 

자세한 설명이 나와있는글 

https://www.mkyong.com/maven/how-to-deploy-maven-based-war-file-to-tomcat/

https://www.dontpanicblog.co.uk/2014/06/25/deploying-to-tomcat-7-with-maven/

내용을 보면 pom.xml 에 톰캣 manager id/password 를 삽입하지 않고 maven 경로 conf 에 넣도록 하고 있었는데 

일단 난 로컬에서 테스트 해볼려고 

그냥 id/비번 넣고  

maven goals 에  tomcat7:deploy 넣고 했는데 여기서 부터 문제가 터지기 시작하였다. 

일단  tools.jar 가 없다고 뜬다! 

찾아보니 jdk 경로를 바꿔주라고 해서 일단 이건 비교적 쉽게 해결! 

첨에 jre 를 보던것을 jdk 폴더로 바꿨다. 

그리고 다음 만난 에러는 

war 빌드까지 완료 된 이후 

...I/O exception (java.net.SocketException) caught when processing request: Connection reset

서버쪽에서 커넥션을 끊어내는 듯한  이런 에러가 계속 뜨는 상황. 

이걸로 한 2시간 날렸는데 결론은 내가 context 를 /  경로로 배포를 하려고 하는데

이미 같은 경로에 동작중인게 있으니 튕겨내는 거였다. 

제길슨! 그럼 에러 메시지를 좀 친절하게 이미 배포된 경로는 undeploy 하라고 얘기해주면 좀 좋냐고 ㅠㅠ 

암튼 mvn tomcat7:undeploy  명령어 먼저 실행하고 이후 deploy 하니 그냥 해결! 

그래서 gitlab-ci.yml 파일에도

stages:
  - build
 
cache:
  paths:
    - .m2/repository

uild:
  stage: build
  script:
      - mvn tomcat7:undeploy 
      - mvn tomcat7:deploy 

  after_script:
      - echo 'build success!'
      
  tags:
    - build-runner  
    
  only:
    - master

이렇게 작성하니 성공!

어찌됐던 동작하니 기분은 좋네 ㅎㅎ