티스토리 뷰



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

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



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


  1. Jenkins plugin 설치 

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


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



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



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




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




  1. JDK 설정 및 Maven 설정

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

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


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


 아래의 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}



환경변수를 등록이 완료되었고 재부팅 없이 설정을 적용하기 위해 아래 명령어를 실행합니다.
source /etc/profile.d/maven.sh
JDK 설치는 아래의 글을 참조해주세요~

JDK와  Maven 을 설정해주기 위하여 ‘Jenkins 관리’ 메뉴로 들어갑니다.


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




우선 진입 후 화면에 보이는 상단 ‘Use default maven settings’ 와 ‘Use default maven global settings’ 두군데를
'/usr/local/apache-maven-3.5.0/conf/settings.xml’ 경로로 변경합니다.
   



그리고 JDK를 설정하기 위하여 Add  JDK 버튼을 클릭합니다.

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



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




  1. Tomcat User 설정

Jenkins가 Tomcat에 배포를 하기 위해서는 Tomcat 을 관리하는 User를 생성해야 합니다.
TomcatUser를 생성하기 위하여 Tomcat 설치 경로 하위 conf 디렉토리 안에 있는 tomcat-users.xml 파일을 오픈합니다.
vi /usr/share/tomcat/conf/tomcat-users.xml
그리고 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


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




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



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



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


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



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



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



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



Gitlab Api Token을 선택합니다.



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


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

  1. Jenkins 빌드 설정

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


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



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

그리고 ‘소스 코드 관리’ 탭을 누릅니다.



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


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



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



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



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




마지막으로 ‘빌드 후 조치’ 부분으로 가서 배포 설정을 합니다.
‘빌드 후 조치 추가’ 버튼을 눌러 ‘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 를 입력합니다.

설정이 모두 다 되었습니다. 저장버튼을 누르시고 나옵니다.




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


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



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



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




댓글
  • 프로필사진 미르 Tar -C 옵션은 디렉토리가 이미 존재해야 수행됩니다. 이동하는 것이 아니라 지정된 위치에 풀어주는 옵션이기 때문입니다. make -p 명령으로 수정하게 패치를 보냈지만 9년째(정확히는 12년) 거부되었네요 ㅎ. 중간에 설장 이라고 오타도 있습니다.
    아무도 안가져주느 관심, 직접 이 블로그에 남겨주니 관심최고라고 생각해주세요 ㅎ
    2017.06.18 00:37 신고
  • 프로필사진 수워니s 댓글 감사합니다~ 참고하겠습니다~ /usr/local 경로는 기본적으로 만들어져있는 디렉토리라 일단은 수정하지 않고 두겠습니당 2017.06.18 00:46 신고
  • 프로필사진 똘똘이돌격대 수워니s님 덕분에 남는 컴퓨터 서버컴으로 만드는데 성공했습니다. 정말 감사해요!! ^-^ 2017.10.27 14:03 신고
  • 프로필사진 감사합니다 감사합니다.

    jsp 파일을 war로 묶어 올리고 manager에서 실행시키면 404가 뜹니다. 혹시 해결방법 아시는지요?
    2017.11.09 14:20 신고
  • 프로필사진 유승준 소스크도관리 >> Git >> Repositories에서 Repository URL에 URL을 입력하고 Credentials를 설정했는데 아래와 같은
    에러 메세지가 나오네요.
    Failed to connect to repository : Command "/usr/bin/gitlab-ctl ls-remote -h http://10.185.246.78/seungjun/edu.git HEAD" returned status code 1:
    stdout: I don't know that command.
    omnibus-ctl: command (subcommand)
    deploy-page
    Put up the deploy page
    diff-config
    Compare the user configuration with package available configuration
    remove-accounts
    Delete *all* users and groups used by this package
    upgrade
    Run migrations after a package upgrade
    General Commands:
    cleanse
    Delete *all* gitlab data, and start from scratch.
    help
    Print this help message.
    reconfigure
    Reconfigure the application.
    show-config
    Show the configuration that would be generated by reconfigure.
    uninstall
    Kill all processes and uninstall the process supervisor (data will be preserved).
    Service Management Commands:
    graceful-kill
    Attempt a graceful stop, then SIGKILL the entire process group.
    hup
    Send the services a HUP.
    int
    Send the services an INT.
    kill
    Send the services a KILL.
    once
    Start the services if they are down. Do not restart them if they stop.
    restart
    Stop the services if they are running, then start them again.
    service-list
    List all the services (enabled services appear with a *.)
    start
    Start services if they are down, and restart them if they stop.
    status
    Show the status of all the services.
    stop
    Stop the services, and do not restart them.
    tail
    Watch the service logs of all enabled services.
    term
    Send the services a TERM.
    usr1
    Send the services a USR1.
    usr2
    Send the services a USR2.
    Container Registry Commands:
    registry-garbage-collect
    Run Container Registry garbage collection.
    Database Commands:
    pg-upgrade
    Upgrade the PostgreSQL DB to the latest supported version
    repmgr
    Manage repmgr PostgreSQL cluster nodes
    repmgr-check-master
    Check if the current node is the repmgr master
    repmgr-event-handler
    Handle events from rpmgrd actions
    revert-pg-upgrade
    Run this to revert to the previous version of the database
    write-pgpass
    Write a pgpass file for the specified user
    Gitlab Geo Commands:
    replicate-geo-database
    Make this node the Geo primary
    set-geo-primary-node
    Make this node the Geo primary
    Consul Commands:
    consul
    Interact with the gitlab-consul cluster
    Pgbouncer Commands:
    pgb-console
    Connect to the pgbouncer console
    pgb-kill
    Send the "resume" command to pgbouncer
    pgb-notify
    Notify pgbouncer of an update to its database
    pgb-resume
    Send the "resume" command to pgbouncer
    pgb-suspend
    Send the "suspend" command to pgbouncer

    stderr:
    2017.11.29 15:01 신고
댓글쓰기 폼