본문 바로가기

Jenkins

[Jenkins] Jenkins & Tomcat & Github 자동배포 (3)

[해당 포스트는 개인적으로 공부를 하고 차후에 참고용으로 하고자 작성한 것입니다.
따라서 잘못된 부분이나 부족한 부분이 있을 수 있기에 참고하시기 바랍니다.]

 

저번 포스팅에선  Jenkins 랑 JDK, GIT, MAVEN을 연동하는 작업에 대해 작성하였다.

이번 포스팅에선 Jenkins와 Github, Tomcat과 연동하는 작업에 대해 서술하겠다.

 

Create Project

 

 

저번 포스팅까지 환경설정이 끝났다면 새로운 Jenkins Project를 생성하도록 하자.

Project Type은 Freestyle project를 선택한다.

 

GitHub Settings

 

Project 상의 Configuration을 접속하여 General 탭에 들어간다.

Discard old builds 체크박스를 클릭하여 30개 간격으로 오래된 Build 파일을 정리한다.

다음으로 GitHub project탭을 클릭하여 본인의 Repository 주소를 지정한다.

 

 

다음으로 Source Code Management 탭을 클릭한다.

Git을 체크하고 Repository URL에 자신의 Repository 주소를 넣는데 여기선 .git 까지 같이 입력한다.

 

 

주소 지정이 끝났다면 Credentials의 Add 버튼을 클릭하여 접근 계정을 설정한다.

Username은 Github의 ID, Password는 Github의 Password이다.

주의해야 할 점은 ID 입력이 sample@gamil.com 과 같이 이메일을 입력하면 안 된다.

다음과 같이 자신의 Repository ID를 지정해야 한다.

 

ID는 Jenkins Global Settings에서 설정했던 이름과 겹치지 않게 설정을 해준다.

 

GitHub Webhooks

 

 

GitHub까지 설정을 완료했다면 Git에서 날리는 Message를 받기 위해 Webhooks 방식을 이용한다.

Webhooks을 설정함으로써 GitHub에 Push가 되면 GitHub가 최신 상태를 Jenkins에게 알려주게 된다.

 

관리하고자 하는 Project의 Settings 탭으로 들어가 Webhooks을 클릭한다.

Add webhook을 눌러 새로운 Webhook을 생성하자.

 

 

Payload URL 은 Jenkins가 설치된 주소를 지정하고 /github-webhook/을 추가로 입력한다.

여기서 내부망을 쓰거나 외부에서 접속하지 못하는 Port로 설정되어 있다면 외부에서 접근할 수 있도록 해줘야 한다.
안 그러면 Github에서 메시지를 날리지 못한다.

 

Content type은 application/json Type으로 설정하며 Trigger는 Just the push event로 해준다.

 

 

Github에서 성공적으로 메시지가 날라가면 다음과 같이 초록색 체크표시가 나온다.

 

 

다시 Jenkins으로 돌아와 Build Triggers 탭을 클릭한다.

해당 선택메뉴에서 GitHub hook trigger for GITScm polling을 선택한다.

 

Tomcat Settings

 

 

이번엔 Build가 완료된 파일을 Tomcat에 자동으로 배포하도록 해보자.

Build Environment탭을 클릭한 후 Build 탭에서 Add build step을 클릭한다.

다음으로 Invoke top-level Maven targets를 선택해준다.

 

 

다음과 같은 화면이 나오면 Maven Version은 원하는 이름으로 입력해주고 Goals를 clean package를 써준다.

POM은 GitHub Repository에 저장된 Spring Project의 pom.xml 경로를 지정해준다.

해당 pom 파일의 Maven Dependency를 참고하여 필요한 Library를 설치한다.

 

 

바로 밑에 있는 Poset-build Actions 항목을 보자.

WAR/EAR files는 Build 후 생성된 war 파일의 이름 써주는데 앞의 이름은 생략하고 **/*.war을 통해 알아서 찾도록 해주자.

context path는 ROOT 경로를 통해 접속하기 위해 / 를 입력한다.

Tomcat에 webapps에 존재하는 ROOT 디렉터리는 충돌 나지 않게 삭제하거나 이름을 바꿔 백업용으로 두자.

 

이제 Tomcat에 접근하여 WAR 파일을 올릴 수 있도록 권한을 설정하도록 하자.

 

 

Tomcat이 설치된 경로에 conf 디렉터리에 들어가면 tomcat-users.xml 파일이 존재한다.

vi나 vim 편집기를 통해 들어가자.

 

 

<role> 태그를 통해 권한을 설정하고, <user> 태그를 통해 사용자를 등록한 후 저장한다.

 

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<user name="계정명" password="비밀번호" roles="manager-gui, manager-script, manager-status"/>

 

 

다음으로 Tomcat manager 접근권한을 설정해야한다.

기본적으로 Tomcat manager는 해당 localhost IP만 접속할 수 있도록 설정이 되어있다.

이것을 수정해주기 위해 Tomcat이 설치된 경로에서 webapps/manager/META-INF로 들어간다.

접속하면 context.xml 파일이 보일 것이다. 해당 파일을 vi나 vim 편집기로 들어간다.

 

 

<Context> 태그 내부에 <Value> 태그가 존재한다.

해당 Value 태그를 전체 주석하고 저장하고 나온다.

 

 

Credentials옆에 존재하는 Add 버튼을 클릭하여 Tomcat manager에 접속할 수 있는 Username과 Password를 입력한다.

Username과 Password는 tomcat-users.xml 에 추가했던 사용자 정보를 입력한다.

 

 

Credentials는 방금 설정했던 계정을 적용하고 TomcatURL 은 Tomcat이 설치된 주소로 넣어준다.

 

이로써 모든 설정은 끝났다.

이제 설장한 GitHub Repository로 Push를 날려보면 다음과 같이 Build History에 자동으로 Jenkins가 Test 및 Build가 될 것이다.

 

 

성공적으로 Build가 되고 Tomcat에 배포가 되면 파란색 공 모양이 나온다.