13. 리눅스(CentOS) 개발 놀이터 만들기 - Jenkins 와 gitlab 연동 및 Tomcat배포 자동화

블로그이전(http://cionman.tistory.com/)으로 자료를 옮겨 옵니다.

안녕하세요~

오늘은 Jenkins와 gitlab 연동을 해보겠습니다. Jenkins의 주요 사용 목적이 소스서버에 푸시를 하고 그 소스를 가지고 빌드 및 테스트 배포까지 진행하기 위함입니다.

그래서 저도 간단한 Spring으로 구성한 테스트 프로젝트를 gitlab에 푸시를 해두었습니다.

13-1

  • 최종 목표는 위의 소스를 저의 리눅스 서버에 설치한 Tomcat에 배포를 시켜 아래의 화면을 띄우는 것입니다.

13-2

1. Jenkins plugin 설치

  • 우선 Jenkins으로 접속하여 왼쪽에 있는 ‘Jenkins 관리’ 항목으로 들어갑니다.

13-3

  • 제일 상단에 보이는 플러그인 항목으로 들어갑니다.

13-4

  • 플러그인 항목에 들어가시면 아래처럼 플러그인들을 관리할 수 있도록 탭으로 나누어져 있습니다.

13-5

  • ‘설치된 플러그인 목록’ 에서 ‘Git plugin’과 ‘GitLab plugin’ 그리고 ‘deploy to container plugin’이 설치되어 있는지 확인을 하고 없다면 ‘설치 가능’ 항목에서 아래의 플러그인을 찾아 설치를 해줍니다.

13-6 13-7

  • 설치과정은 아래의 화면을 보실 수 있습니다.

13-8

2. JDK 설정 및 Maven 설정

  • 이제 Jenkins에서 빌드와 배포를 실행하게 하기 위해서 JDK설정과 Maven설정이 필요합니다.
  • 저의 ‘리눅스 개발놀이터 만들기’ 글을 따라 오신 분이라면 Maven이 아마 설치가 되어 있지 않을 것입니다.

  • 먼저 Maven 설치를 진행하겠습니다.

https://maven.apache.org/download.cgi

  • 사이트에 진입 후 Maven 파일을 다운로드 받을수 있는 경로를 확인 합니다. 현재는 최신 버전의 다운로드 링크는 아래와 같습니다.

http://apache.mirror.cdnetworks.com/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz

  • 아래의 wget 명령어로 파일을 다운로드 받고, tar 명령어로 압축을 풉니다 -C 옵션은 압축을 풀고 디렉토리를 이동시킬 위치 입니다.
$ wget -c http://apache.mirror.cdnetworks.com/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
$ tar zxvf apache-maven-3.5.0-bin.tar.gz -C /usr/local
  • Maven을 리눅스에 환경변수를 등록하기 위해 아래 경로에 maven.sh파일을 아래의 내용으로 생성합니다.
$ vi /etc/profile.d/maven.sh
export M2_HOME=/usr/local/apache-maven-3.5.0 
export PATH=${M2_HOME}/bin:${PATH}

13-9

  • 환경변수를 등록이 완료되었고 재부팅 없이 설정을 적용하기 위해 아래 명령어를 실행합니다.
$ source /etc/profile.d/maven.sh

13-10

  • ‘Jenkins 관리’ 화면에서 ‘Global Tools Configuration’로 진입합니다.

13-11

  • 우선 진입 후 화면에 보이는 상단 ‘Use default maven settings’ 와 ‘Use default maven global settings’ 두군데를 /usr/local/apache-maven-3.5.0/conf/settings.xml 경로로 변경합니다.
  • 그리고 JDK를 설정하기 위하여 Add JDK 버튼을 클릭합니다.

13-12

  • Add JDK 버튼을 누르면 설정 화면이 나오는데, ‘Install automatically’의 체크를 해제하면 수동으로 JDK 경로 설정을 해줄 수 있는 화면이 나옵니다. 그리고 아래의 내용들을 입력합니다.

13-13

  • 그리고 조금더 화면을 내려보면 Maven 설정하는 구역이 있습니다.
  • 마찬가지로 Add Maven 버튼을 누르면 JDK 와 마찬가지로 설정을 입력할 수 있는 화면이 나옵니다.
  • JDK 와 똑같이 Install automatically 체크를 해제하면 수동으로 내용을 입력하실 수 있습니다.
  • 입력을 완료하고 Save 버튼을 눌러 설정을 저장합니다.

13-14

3. Tomcat User 설정

  • Jenkins가 Tomcat에 배포를 하기 위해서는 Tomcat 을 관리하는 User를 생성해야 합니다.
  • TomcatUser를 생성하기 위하여 Tomcat 설치 경로 하위 conf 디렉토리 안에 있는 tomcat-users.xml 파일을 오픈합니다.
$ vi /usr/share/tomcat/conf/tomcat-users.xml
<tomcat-users>
    <role rolename="manager-script”/>
    <role rolename="manager-status”/>
     <role rolename="manager-script"/>
    <user name=“아이디" password=“패스워드" roles="manager-gui,manager-script,manager-status" />
</tomcat-users>
  • 저장하고 빠져 나온 후, 보안을 위해 내부 Jenkins 만 Manager에 접속가능하도록 하기 위해서 127.0.0.1 ip 주소만 접속이 가능하도록 설정하겠습니다.
  • Tomcat 설치 경로 하위에 ‘conf/Catalina/localhost/manager.xml’ 파일을 생성합니다.
$ vi /usr/share/tomcat/conf/Catalina/localhost/manager.xml
<Context antiResourceLocking="false" privileged="true" docBase="${catalina.home}/webapps/manager">     
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow=“127\.0\.0\.1" denyStatus="404" /> 
</Context>
  • 입력하고 저장 후 tomcat을 재실행합니다
$ systemctl restart tomcat

4. Gitlab 과 Jenkins 연결

  • 이제는 gitlab과 jenkin을 이어줄 token정보를 가지고 와야 합니다. 자신의 gitlab 사이트로 들어가 아래의 설정화면으로 진입합니다.

13-15

  • 화면에 들어가시면 ‘Access Tokens’ 탭이 있습니다.

13-16

  • Token의 이름과 만료일자를 설정하고 Scope부분을 모두 선택하고 ‘Create personal access token’버튼을 클릭합니다.

13-17

  • 버튼을 누루고 나면 아래처럼 Token 이 생성됩니다. 해당 토큰 값을 복사를 하여 Jenkins에 입력할 준비를 마칩니다.

13-18

  • 다시 젠킨스 페이지에 들어가서 왼쪽편에 ‘Credentials -> System’ 화면으로 들어갑니다.

13-19

  • System화면에서 ‘Global credentials’으로 들어갑니다.

13-20

  • ‘Global credentials’ 화면에서 ‘adding some credentials’화면을 클릭합니다.

13-21

  • Credential 추가화면에서 kind 부분을 클릭합니다.

13-22

  • Gitlab Api Token을 선택합니다.

13-23

  • gitlab페이지에서 취득한 token을 아래 ‘API token’ 항목에 입력하고 credential항목에 원하는 id값을 입력하고 OK버튼을 누릅니다.

13-24

  • 이제 gitlab과 token의 연결작업이 완료되었고, 이제는 Jenkins가 빌드할수 있도록 설정을 해보겠습니다.

5. Jenkins 빌드 설정

  • 새로운 작업을 추가하기 위해 좌측 메뉴에서 ‘새로운 Item’ 을 클릭합니다.

13-25

  • 새로운 작업을 생성할 수 있는데, 작업 이름을 기입하시고, ‘Maven Project’를 선택합니다.

13-26

  • OK버튼을 누르고 나면 아래와 같은 화면이 나옵니다.
  • 간단하게 설명을 입력하고, 오래된 빌드를 30개만 유지를 하겠습니다.

13-27

  • 그리고 ‘소스 코드 관리’ 탭을 누릅니다.
  • ‘소스 코드 관리’ 탭을 클릭한후 화면에 배포하고자하는 gitlab의 repository url을 입력하고, Credential 란 옆의 Add버튼을 눌러 조금 전 등록하였던, Credential인 Jenkins를 입력합니다.

13-28

  • Add 버튼을 누르면 아래와 같이 팝업 창이 나옵니다.
  • UserName과 Password항목에 gitlab의 아이디와 패스워드를 입력하고, ID, Descripttion 부분에는 원하는 값을 넣습니다.

13-29

  • 그리고 Credential 부분에 ‘none’ 을 눌러보시면 팝업으로 생성한 부분이 나타나는데 해당 내용을 선택해줍니다.

13-30

  • ‘빌드 유발’, ‘빌드 환경’,’Pre Steps’ 부분은 기본 값으로 두고 ‘Build’ 부분으로 이동하여 ‘Goal and Option’ 항목에 clean package 를 입력합니다.

13-31

  • 다음은 ‘Post Steps’ 항목으로 이동합니다.
  • 그리고 ‘Add post-build step’ 버튼을 클릭하여 ‘Excute Shell’을 선택합니다.
  • 그러면 shell명령어를 입력할 수 있는 곳에 아래의 명령어를 입력합니다.
  • Build가 성공 시에 아래의 명령어로 프로젝트를 undeploy를 진행하게 됩니다.
wget "http://톰캣아이디:패스워드@톰캣서버주소:8080/manager/text/undeploy?path=/프로젝트컨텍스트"

13-32

  • 마지막으로 ‘빌드 후 조치’ 부분으로 가서 배포 설정을 합니다.
  • ‘빌드 후 조치 추가’ 버튼을 눌러 ‘deploy war/ear to a container’ 를 누릅니다. 만약에 메뉴가 나오지 않는 분들은 앞쪽에서 설명 드린 ‘Deploy to Container plugin’ 이 설치가 되지 않으셨습니다.

  • WAR/EAR files 부분에 아래와 같이 ‘*/.war’ 입력하고 Context path는 프로젝트에 설정된 context를 설정합니다.

  • 버튼을 눌러 추가 한후 Add Container 를 눌러 자신의 WAS 서버를 선택을 합니다.
  • 저는 Tomcat 7 을 선택을 하였고 Tomcat URL 항목에서 자신의 TOMCAT URL 을 입력 합니다. ‘http://서버아이피:포트번호’
  • Manager user name과 password 는 앞서 생성한 Tomcat user 와 pasword 를 입력합니다.
  • 설정이 모두 다 되었습니다. 저장버튼을 누르시고 나옵니다.

13-33

  • 드디어 빌드를 해보겠습니다.
  • 첫화면에 생성된 프로젝트 목록이 있습니다.
  • 우측에 시계버튼을 누르시거나 프로젝트 이름을 누르시고 ‘Build now’ 를 누르셔도 됩니다.

13-34

  • Build를 시작하고 프로젝트 이름을 클릭하여 들어가면 빌드 진행상황을 볼 수 있습니다.
  • Build History 최상단의 번호를 클릭해서 들어가면 최근 빌드를 실행한 콘솔 로그기록도 볼수 있습니다.

13-35

  • 배포된 후 브라우저로 접속을 해보면 화면 결과 화면이 나옵니다.

13-36

  • 따라 오시느라 수고하셨습니다. 다음 글은 리눅스 명령어 및 vi 명령어 정리입니다.