공개 SW 솔루션설치 & 활용가이드 시스템 SW > 자원관리 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리
- 3-1. 개요 소개 주요기능 Java 로작성된지속적통합 (Continuous Integration, CI) 과지속적배포 (continuous delivery, CD) 를위한서버또는도구 소프트웨어를작성, 테스트및배포하거나배포하는것과관련된모든종류의작업을자동화하는데사용할수있는오픈소스자동화서버 Jenkins 를사용하면자동화를통해소프트웨어개발프로세스가속화 Jenkins 는빌드, 문서, 테스트, 패키지, 스테이지, 배포, 정적분석등을포함하여모든종류의개발라이프사이클프로세스통합 대분류 시스템 SW 소분류 자원관리 라이선스형태 MIT License 사전설치솔루션 Java 8 JRE or JDK 실행하드웨어 특징 보안취약점 256 MB RAM (512MB 권장 ) 10GB 이상의디스크공간 ( 최소 2GB) 버전 2.138.2(2018 년 10 월기준 ) Jenkins 는플러그인의도움으로지속적인통합실현 플러그인을사용하면다양한개발단계를통합할수있음 특정도구를통합하려면해당도구에대한플러그인을설치, 예 ) Git, Maven 2 프로젝트, Amazon EC2, HTML 게시자등 취약점 ID : CVE-2018-1999047 심각도 : 6.5 MEDIUM(V3) 취약점설명 : UpdateCenter.java 의 Jenkins 2.137 및이전버전, 2.121.2 및이전버전에부적절한인증취약점이존재하여공격자가업데이트센터를통해예정된 Jenkins 다시시작을취소할수있음 대응방안 : 2.138 이상으로업그레이드 참고경로 : https://jenkins.io/security/advisory/2018-08-15/#security-1076 개발회사 / 커뮤니티 Jenkins, CloudBees 공식홈페이지 https://jenkins.io/, https://www.cloudbees.com/
- 4-2. 기능요약 원래는 " 허드슨 " 이라는이름으로잘알려져있지만, 2010년오라클과의상표권문제로인해 Jenkins로이름변경 공개SW CI(Continuous Integration) Tool로써팀의구성원들이작업한내용을정기적으로통합하는것을의미함 수많은개발자들이플러그인을제공하면서지속적인버그수정및새로운개선사항을기대할수있음 특징 - 훌륭한커뮤니티지원을제공하는오픈소스도구 - 설치가쉬움 - 작업을수월하게만드는 1000 개이상의플러그인 - 플러그인이존재하지않으면코드를작성하고커뮤니티와공유가능 - 무료 - Java로구축되었으므로모든주요플랫폼이식가능
- 5-3. 실행환경 Jenkins는서블릿컨테이너위에서구동되므로 Tomcat이나 Jetty같은컨테이너의설치필요 내장서블릿이있으므로전용패키지를이용하여설치하는것도가능하지만, 일반적인개발환경과비슷한환경에서설치및테스트를하기위해본가이드에서는 tomcat을사용하여 Jenkins 설치 설치환경 Ubuntu 사전설치 Java 버전 8 Apache Tomcat 버전 9 Jenkins war File Jenkins 는 Java 기반응용프로그램이므로 Java 필수 Jenkins war 파일을배포하려면 Tomcat 필요 Jenkins 설치하는데필요
- 6-4. 설치및실행 세부목차 4.1 Install Java Version 8 4.2 Install Apache Tomcat 9 4.3 Download Jenkins war File 4.4 Deploy Jenkins war File 4.5 Install Suggested Plugins
- 7-4. 설치및실행 4.1 Install Java Version 8 개발혹은테스트서버에 java8 을설치하기위해다음명령실행 - sudo apt-get install oracle-java8-installer0 Jenkins 를설치하기위해서는 tomcat 을이용하여 Jenkins war 를 deploy 함, 특정버전의 Apache Tomcat 을설치하기위하여먼저다음명령을이용하여 wget 설치 - sudo apt-get install wget
- 8-4. 설치및실행 4.2 Install Apache Tomcat 9(1/5) 이제 wget 을이용하여 Tomcat9 tar 파일최신버전다운로드 - wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.0.m10/bin/apache-tomcat-9.0.0.m10.tar.gz 다음명령을이용하여다운로드받은 tar 파일의압축을풀어주고디렉토리명바꿈
- 9-4. 설치및실행 4.2 Install Apache Tomcat 9(2/5) Apache Tomcat 의 username 과 password 를수정하기위해다음파일수정 - vi ~/Downloads/tomcat9/conf/tomcat-users.xml
- 10-4. 설치및실행 4.2 Install Apache Tomcat 9(3/5) 위내용을지우고다음내용을붙여넣기, username과 password로입력한 test는사용자의편의대로변경하도록하고저장 <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <user username="test" password="test" roles="manager-gui,manager-script,manager -jmx,manager-status,admin-gui,admin-script"/> </tomcat-users>0
- 11-4. 설치및실행 4.2 Install Apache Tomcat 9(4/5) tomcat 을실행하기위해 tomcat9 의 bin 디렉터리로들어간후다음명령실행 -./startup.sh tomcat 이실행, 브라우저를열고해당서버접근
- 12-4. 설치및실행 4.2 Install Apache Tomcat 9(5/5) 본가이드에서는가상머신에 ubuntu를설치하고 ubuntu에서설치한톰캣을 start하고윈도우에서접근 본가이드에서는가상머신의 ip를 host에 dev.develop.com으로설정하여 http://dev.develop.com:8080/ 접근하였으므로, 각자 tomcat에접근할때에는 'http:// 설치한서버의 ip:8080' 접근
- 13-4. 설치및실행 4.3 Download Jenkins war File Jenkins war(web archive) file 을다운로드하기위해서다시한번 wget명령어를이용, 다음링크를이용하여 Jenkins war의 release list 확인 Jenkins war release list : http://updates.jenkins-ci.org/download/war/ 위리스트에서현안정버전인 2.138 을다운, 본가이드에서는 2.138.1 버전설치, 아래명령어를이용하여 war 다운 - wget http://updates.jenkins-ci.org/download/war/2.138.1/jenkins.war
- 14-4. 설치및실행 4.4 Deploy Jenkins war File(1/3) Jenkins war file을 deploy하기위해서브라우저를열고이전, tomcat을설치한스텝에서처럼 http://dev.develop.com:8080/ 접속 그리고 Manager App 버튼클릭로그인다이얼로그가뜨면사용자이름과비밀번호를입력하고로그인사용자이름 : test 비밀번호 : test
- 15-4. 설치및실행 4.4 Deploy Jenkins war File(2/3) 이제 Tomcat web application manager page 에직접접근이가능, 스크롤을아래로내려 보면 Deploy 옵션버튼을찾을수있음, jenkins.war 를내려받은경로와 Context Path 를 입력한뒤에 Deploy 버튼누름
- 16-4. 설치및실행 4.4 Deploy Jenkins war File(3/3) Deploy 가완료되면이제 Tomcat web application manager page 에서 Jenkins 가목록에 노출, ubuntu 에설치한 tomcat 의 webapps 에도 jenkins 디렉터리가생성된것확인 /jenkins 를누르고다음스텝으로넘어감
- 17-4. 설치및실행 4.5 Install Suggested Plugins(1/5) "/jenkins를클릭하면 unlock Jenkins page로넘어감, Jenkins를 unlock하기위해일회성 password를입력하라는문구확인 본가이드의경우 /home/mondayus/.jenkins/secrests/initialadminpassword를참조하여패스워드를확인, 패스워드를입력후다음버튼누름
- 18-4. 설치및실행 4.5 Install Suggested Plugins(2/5) 아래보이는두가지옵션중에서본가이드에서는 suggested plugins 선택
- 19-4. 설치및실행 4.5 Install Suggested Plugins(3/5) Install Suggested Plugins 를클릭하면아래와같이설치될플러그인리스트
- 20-4. 설치및실행 4.5 Install Suggested Plugins(4/5) 플러그인들이설치되면아래페이지넘어감 아래빈칸을채운후저장및종료버튼누름
- 21-4. 설치및실행 4.5 Install Suggested Plugins(5/5) Jenkins 준비 Start using Jenkins 버튼을누르면바로 Jenkins Dashboard 향함
- 22-5. 기능소개 세부목차 5.1 Dashboard 5.2 New Item 5.3 People 5.4 Manage Jenkins
- 23-5. 기능소개 5.1 Dashboard Jenkins 기본화면에는현재빌드큐및 Executor 상태가표시되고새항목 (New item) 을 만들고, 사용자를관리하고, 빌드기록을보고, Jenkins 를관리하고, 사용자정의보기를보고, 자격증명을관리하는링크제공
- 24-5. 기능소개 5.2 New Item New Item 목록에는 Item 을정의할다양한타입의작업과폴더존재
- 25-5. 기능소개 5.3 People People 목록에는 Jenkins 에접근할수있는사용자리스트가나타냄, 사용자를추가하거나 삭제하기위해서는 Manage Jenkins 의 User Manage 메뉴이용
- 26-5. 기능소개 5.4 Manage Jenkins Manage Jenkins 에서는 command-line 인터페이스를여는옵션및유저등록메뉴를포함하여 젠킨스관리페이지에서수행할수있는여러작업들이목록화되어있음
- 27-6. 활용예제 세부목차 6.1 시작하기 6.2 New Item 생성 6.3 Item 설정 6.4 Build Now 6.5 Console Output - 빌드로그확인 6.6 war확인 - 빌드된 war 확인
- 28-6. 활용예제 6.1 시작하기 형상관리를 github를이용하여하고있다면, 개략적인개발및배포플로우는대체로다음과같음 1. git에서개발 branch를기준으로 new branch 생성 2. 로컬환경에서작업및테스트를거친후개발 branch에작업사항을머지하고개발branch기준으로오류가없는지확인후프로젝트추출 (war or jar) 3. 서버환경에서의테스트를위해추출물을 (war or jar) 개발서버전송 4. Tomcat등서버재시작으로추출물 deploy 5. 테스트중오류사항이보이면로컬에서재작업후추출물을다시생성하여서버에전송그리고서버재시작으로 deploy ( 수정사항이있을때마다반복 ) 6. 테스트가완료되면 master branch에작업사항 merge 7. 추후운영배포일에 master branch를기준으로추출물을추출하여서버에전송및 deploy 위작업중반복되는작업은 2 ~ 5 이며, 이과정을 jenkins 이용하여손쉽게진행, github push 하는순간 jenkins 에서 pull 하고바로빌드하여서버에 deploy 할수있기때문임, Jenkins 설치를마쳤으므로실제프로젝트에서사용하는배포환경에서 Jenkins 활용
- 29-6. 활용예제 6.2 New Item 생성 (1/2) 메인좌측화면에서 New Item 클릭
- 30-6. 활용예제 6.2 New Item 생성 (2/2) 프로젝트명을입력한후 Freestyle Project 를클릭하고 Ok 누름
- 31-6. 활용예제 6.3 Item 설정 (1/6) Source Code Management 에서 Git 1 을클릭하고 Repository URL 2 에 git 정보입력 git 저장소연결에계정이필요한경우 add 3 버튼을눌러계정정보추가 4 1 5 6 3 2 7 8
- 32-6. 활용예제 6.3 Item 설정 (2/6) Advanced 4 버튼을클릭하면 Name5, Refspec6 두가지텍스트박스확인가능대부분의경우아무런입력값을넣지않아도됨 Name : 비워두면젠킨스가자동으로고유한이름생성생성된이름은 git remote 명령에사용된것과동일 Refspec : 기본 refspec는 +refs/heads/*:refs/remotes/repositoryname/* 기본적으로모든브랜치헤드는 remotes/repositoryname/branchname으로검색되지만만약한가지브랜치만항상검색하고싶다면이필드에값입력 Branch Specifier7에는젠킨스에서추적할브랜치입력이며, master 브랜치가기본값 Repository browser8 는기본적으로드롭다운목록이자동설정되며, 대부분의경우기본값가능
- 33-6. 활용예제 6.3 Item 설정 (3/6) 스크롤을내려서빌드설정부분이동후빌드설정을 invoke Gradle 선택저장 만약 Maven 으로빌드하는프로젝트의경우에는 'Invoke top-level Maven targets' 선택 gradle 을이용해빌드하는프로젝트이므로, 젠킨스에서빌드가수행되려면 gradle 설치필요, 잠시터미널로돌아가서 gradle 을설치후돌아옴
- 34-6. 활용예제 6.3 Item 설정 (4/6) 스크롤을조금내리면 Add build stpep 셀렉트박스보임 클릭해서 Excute shell 메뉴를선택하고아래와같이 command 입력 프로젝트를빌드후해당프로젝트를가동하는소스임 완료되었다면저장버튼을누르고메인으로감
- 35-6. 활용예제 6.3 Item 설정 (5/6) 위 Execute shell 에서설정한대로프로젝트의빌드가완료되었을때프로젝트를구동하기 위해서는톰캣이한세트더필요 jenkins 를띄우기위해설치해두었던 tomcat9 를복사해서 admintomcat 하나생성 jenkins 에서빌드수행시생성되는 war 파일을 admintomcat 으로가져오기위해서다음설정 - cd./admintomcat/bin - vi admindeploy.sh
- 36-6. 활용예제 6.3 Item 설정 (6/6) admintomcat 은 tomcat9 를복사한것이므로서버설정동일 tomcat9 와함께띄우기위해서는 server.xml 설정변경 아래와같이 port 설정부분을찾아서각각 8005 -> 9005, 8080 -> 9090, 8443 -> 9443 변경 tomcat9 를복사했기때문에한가지더해줘야할것은 jenkins 관련파일삭제 admintomcat/webapps 에서 jenkins.war 와 jenkins 삭제
- 37-6. 활용예제 6.4 Build Now(1/2) 모든설정이완료되면메인에설정된프로젝트표출 프로젝트에마우스를가져다대면해당프로젝트가수행할수있는메뉴표출 그중에서 Build Now(1) 를눌러빌드수행 프로젝트가빌드되고있는것은 Build Queue에서확인가능 (2) 1 2
- 38-6. 활용예제 6.4 Build Now(2/2) 빌드가성상수행되면프로젝트명우측아이콘이햇님으로변경되는것확인가능 - 비정상수행되면먹구름아이콘보여짐
- 39-6. 활용예제 6.5 Console Output - 빌드로그확인 프로젝트빌드가정상수행 (2) 된것은콘솔로그 (1) 를통해서도확인가능 1 2
- 40-6. 활용예제 6.6 war 확인 - 빌드된 war 확인 빌드가정상적으로수행되었다면 ~/.jenkins/workspace/hellojenkins/build/libs 디렉터리 내에 war 파일생성 우리는 war파일이자동으로 ~/Download/adminTomcat/webapps로이동하도록 ~/Download/adminTomcat/bin/adminDeploy.sh에서설정해두었으므로위 war파일은있는지확인 ~/Download/adminTomcat/webapps로이동해보면 admin.war파일이정상적으로이동되어있고 deploy까지성공해서 admin디렉터리가생성되어있는것확인가능
- 41-7. FAQ Q Jenkins 가허드슨과역호환이가능합니까? A Jenkins 는허드슨과코드기반, 개발방식, 프로젝트의문화가동일합니다. 따 라서기존 Hudson 배포 ( 즉, 버전 1.395 또는이전버전 ) 가 Jenkins로원활하게업그레이드됩니다. Hudson이이전버전과완전히호환되는것처럼 Hudson 및 Jenkins의이전버전과계속호환됩니다. Q Jenkins 커뮤니티에참여하려면어떻게해야합니까? A 방법에는여러가지가있습니다. 우리의메일링리스트에가입하거나버그추적 기에파일문제를추가또는 Wiki 를업데이트하거나 IRC 채널을이용할수도있 습니다. 또한트위터에서우리를팔로우하는방법도있습니다. 다만, 버그추적기와위키등록은 jenkins-ci.org 에계정이있어야합니다.
- 42-8. 용어정리 용어 CI IRC gradle Maven github 설명 지속적인통합 (Continuous Integration) 은개별개발자가작업한내용을자주통합하고테스트하는작업관련소프트웨어 (Jenkins) 를사용하면, 버전관리와자동화된빌드, 테스트, 리포팅을통해쉽고최대한빨리오류를발견하고발생한문제를조기에처리 인터넷릴레이챗 (Internet Relay Chat, IRC) 은실시간채팅프로토콜로, 여러사용자가모여대화를나눌수있음 Gradle 은 Groovy 를이용한빌드자동화시스템, Groovy 와유사한도메인언어를채용하였으며, 현재안드로이드앱을만드는데필요한안드로이드스튜디오의공식빌드시스템, Java, C/C++, Python 등과같은여러가지언어를지원 아파치메이븐 (Apache Maven) 은자바용프로젝트관리도구, 아파치앤트의대안으로만들어짐, 아파치라이선스로배포되는오픈소스소프트웨어 깃허브 (GitHub, /'ɡɪtˌhʌb/, 원래이름 : Logical Awesome LLC) 는분산버전관리툴인깃 (Git) 을사용하는프로젝트를지원하는웹호스팅서비스이다. 루비온레일스로작성, GitHub 는영리적인서비스와오픈소스를위한무상서비스를모두제공, 2009 년의 Git 사용자조사에따르면 GitHub 는가장인기있는 Git 호스팅사이트, 또한 2011 년의조사에서는가장인기있는오픈소스코드저장소로꼽힘
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.