서론

이번에 젠킨스를 하기 목적에 맞게 사용하고자 하였다.

gitlab 특정 브렌치 push시에 webhook을 통해 소스 코드를 WAR 파일으로 빌드하여서 톰캣에 자동 배포 되도록 구현

이 때 아래 레퍼런스의 도움을 받으며 구현을 하였다.

https://dev-joo.tistory.com/28

구현간 발생한 트러블들이 있었는데, 이번 블로그 글에서는 요구사항을 개발하면서 발생했던 트러블들을 슈팅하는 과정과 방법에 대해 중점적으로 작성하고자 한다.


구축 환경

Host는 윈도우 PC였고, Docker를 사용하여서 WEB, WAS, 젠킨스를 구축 하였다.

WEB 서버로는 nginx, WAS로는 톰캣을 사용 하였다.

version: '3'

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-config:/etc/nginx
    networks:
      - mynetwork

  tomcat:
    image: tomcat:8.5-jdk8
    networks:
      - mynetwork

networks:
  mynetwork:

volumes:
  nginx-config:
  

이 때 docker-compose를 통해 한번에 구축 하였으며, 이들간 네트워크는 동일하게 처리 하였다.

FROM jenkins/jenkins:lts-jdk11

USER root

USER jenkins

젠킨스는 별도 Docker File로 빌드하여 이미지를 생성하였는데, 별다른 이유 없이 추후 별도로 생성 되었기 때문이다.

이 때 젠킨스는 위 Nginx와 톰캣 컨테이너와 같은 네트워크에서 동작 하도록 별도 설정 하였다.

트러블 슈팅

1. Manager 관련 오류

웹훅을 통한 빌드 후 젠킨스 컨테이너에서 톰캣 컨테이너에 접근할 때 발생했던 에러들에 대하여 다룬다.

Server returned HTTP response code: 500 for URL: http://tomcat:8085/manager/text/list

500 에러

500 에러 같은 경우에는 톰캣 유저의 권한이 잘못 설정 되었거나, IP가 허용 되지 않아서 발생했을 가능성이 크다.

  1. 톰캣 유저의 권한이 잘못 설정 된 경우
<role rolename="manager-script"/>
<user username="jenkins" password="yourpassword" roles="manager-script"/>

반드시 유저의 권한을 manager-script 를 부여 하여야 한다.

  1. IP가 허용 되지 않은 경우
<Context antiResourceLocking="false" privileged="true">
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1" />
</Context>

/webapps/manager/META-INF/context.xml 아래에 위 코드를 살펴봤을 때 allow가 127.x 으로 되어있으면 외부에서는 접근이 되지 않는다.

<Context antiResourceLocking="false" privileged="true">
  <!-- 모든 IP 허용 -->
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow=".*" />
</Context>

위는 예시일 뿐 위험하니 특정 IP만 허용 해두자.


404 에러

Docker 이미지를 통해 실행한 톰캣에는 manager 앱이 없는 경우가 있다고 한다.

이로 인해서 404 에러가 주로 발생한다.

우리는 manager 앱을 통해 톰캣에 외부에서부터 접근 하기에 해당 앱이 필수로 존재 하여야 한다.

cd /usr/local/tomcat/webapps

curl -O https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.96/bin/extras/catalina-manager-webapp-8.5.96.tar.gz

tar -xzf catalina-manager-webapp-8.5.96.tar.gz

mv catalina-manager-webapp-8.5.96 manager

본인의 톰캣 버젼과 일치하는 톰캣을 설치해서 해당 manager 폴더를 우리 webapp 경로로 복사 해주자.


위 두 문제를 해결 했다면 아래 명령어를 젠킨스 컨테이너에서 쳐보자.

curl -i -u {톰캣 유저 ID}:{톰캣 유저 비밀번호} http://{톰캣 컨테이너 이름}:{톰캣 실행 포트}/manager/text/list

위 명령어가 200이 나와야 정상적으로 톰캣 컨테이너의 Manager 접근이 된 것이다.


2.JDK 관련 설정

프로젝트는 jdk8인데, 이 때문에 젠킨스 버젼을 낮추면 제대로 동작하는 플러그인 자체가 없는 경우가 많다.

그렇기에 울며 겨자먹기로 젠킨스 버젼을 최소 11이상으로 갖추는데, 이 때 추후 빌드 및 배포시 문제가 발생할 가능성이 크다.

이 때 기본 JDK11 제외하고, 다른 버젼의 JDK를 설치하는 방법을 공유 하고자 한다.

먼저 AdoptOpenJDK 플러그인을 설치한다.

그후 Jenkins 관리 > Tools > JDK installations에 접근한다.

그리고 위와 같이 원하는 버젼을 선택 해주면 된다.

profile
Hello, World! \n

0개의 댓글