Your SlideShare is downloading. ×
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211

4,524
views

Published on

This document allows you to improve function on your build guide line in company. It includes Jenkins installation, configuration with Maven, revision check and so on.

This document allows you to improve function on your build guide line in company. It includes Jenkins installation, configuration with Maven, revision check and so on.

Published in: Technology

0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,524
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
254
Comments
0
Likes
15
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 애플리케이션 빌드 및 배포 Project Name: Internal Department: Consulting Group Focus Area: Amazon Web Service Product/Process: 애플리케이션 빌드 및 배포 Prepared By: Document Owner(s) Project/Organization Role Sang-Cheon Park(nices96@osci.kr) Technical Assistance Ji-Woong Choi(jchoi@osci.kr) Consulting Coach Project Status Report Version Control Version Date Author Change Description 1.0 2014/02/11 Sang-Cheon Park Document created Confidential [오픈소스컨설팅]애플리케이션 빌드 및 배포.docx Last printed on 3/1/2014 9:21:00 AM
  • 2. Configuration Report TABLE OF CONTENTS 1 본 문서의 목적 ........................................................................................................................... 4 2 PYTHON 빌드/배포 시스템 ...................................................................................................... 4 3 JENKINS 빌드 시스템 구축 ....................................................................................................... 4 3.1 Jenkins 설치 .................................................................................................................. 5 3.2 보안 설정 ...................................................................................................................... 8 3.3 플러그인 설치 .............................................................................................................. 11 3.4 Jenkins 디렉토리 구조 ................................................................................................. 12 3.5 환경설정...................................................................................................................... 13 3.5.1 Maven 설정........................................................................................................... 13 3.5.2 Credentials ............................................................................................................ 14 3.6 4 View & Job(Item) ....................................................................................................... 15 애플리케이션 빌드 ................................................................................................................... 17 4.1 Job 생성 ...................................................................................................................... 17 4.2 빌드 수행 .................................................................................................................... 20 4.3 소스 Revision 태깅 ...................................................................................................... 21 4.3.1 4.3.2 revision.jsp 파일 생성 ............................................................................................ 22 4.3.3 5 pom.xml 수정 ....................................................................................................... 21 빌드 옵션 수정 ....................................................................................................... 23 애플리케이션 배포 ................................................................................................................... 25 5.1 Confidential Plugin 설치.................................................................................................................. 25 Page 2 3/1/2014
  • 3. Configuration Report 5.2 시스템설정 .................................................................................................................. 26 5.3 Job 수정 ...................................................................................................................... 27 5.3.1 Confidential 빌드 수행 ............................................................................................................... 28 Page 3 3/1/2014
  • 4. 1 본 문서의 목적 본 문서는 기존 Python 빌드/배포 시스템을 대체할 수 있는 Jenkins 빌드 시스템의 구축과 tag, branch 등 형상별 애플리케이션 빌드, AWS(Amazon Web Service) EC2 인스턴스로의 애플리케이션 배포 방법에 대한 내용을 담고 있다. 2 Python 빌드/배포 시스템 기존 Fabric 기반에서 사용하고 있는 빌드/배포 시스템은 Python 으로 직접 구현된 것으로 SVN 의 특정 애플리케이션 Branch 버전을 입력 받아 해당 애플리케이션을 빌드하고, 배포 대상 타깃 시스템을 선택함으로써 해당 시스템으로 애플리케이션이 배포되는 형태이다. 비록 기능상의 간결함과 커스터마이징을 통해 원하는 대로 수정이 가능하다는 장점이 있지만 기능 수정에 추가 구현이 필요하며 다양한 플러그인의 부재 및 Web UI 가 풍부하지 못한 단점이 있다. 본 문서에서 소개하려는 대표적인 CI 툴인 Jenkins 는 기존 빌드/배포 요건을 충족할 수 있을 뿐만 아니라 다양한 빌드 옵션과 플러그인을 제공함으로써 여러가지 상황에서 유연하게 대처할 수 있다. 3 Jenkins 빌드 시스템 구축 Jenkins 는 애플리케이션 빌드를 자동화 함으로써 지속적인 통합을 가능하게 해주는 대표적인 툴로써 본래 Hudson 이라는 이름을 사용했지만 Oracle 에 흡수되면서 발생한 여러 가지 이슈들로 인해 2011 년 Jenkins 라는 이름의 별도 프로젝트로 분리되었다. 빌드 자동화를 위해 CVS 나 SVN 등의 형상관리 시스템에 접속이 가능해야 하며 따라서 대부분의 회사나 조직에서는 빌드 시스템을 형상관리 시스템과 마찬가지로 방화벽 안쪽에 위치시킨다. Confidential [오픈소스컨설팅]애플리케이션 빌드 및 배포.docx Last printed on 3/1/2014 9:21:00 AM
  • 5. Configuration Report 3.1 Jenkins 설치 Jenkins 는 war 형태로 다운로드 받아 java –jar Jenkins_x.x.war 형태로 실행이 가능하지만 실행 스크립트 작성 및 서비스 등록 등을 자동화 하기 위해 Red Hat/Fedora/CentOS 계열의 OS 에서는 yum 명령을 이용하여 자동 설치한다.  다음 명령을 이용하여 Jenkins 를 설치한다. ~]$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkinsci.org/redhat/jenkins.repo --2014-02-11 16:14:07-- http://pkg.jenkins-ci.org/redhat/jenkins.repo Resolving pkg.jenkins-ci.org... 199.193.196.24 Connecting to pkg.jenkins-ci.org|199.193.196.24|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 75 [text/plain] Saving to: `/etc/yum.repos.d/jenkins.repo' 100%[========================================================= ============================================================== =====================>] 75 --.-K/s in 0s 2014-02-11 16:14:08 (10.4 MB/s) - `/etc/yum.repos.d/jenkins.repo' saved [75/75] ~]$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key ~]$ sudo yum install jenkins Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: centos.tt.co.kr * extras: centos.tt.co.kr * updates: centos.tt.co.kr Setting up Install Process Confidential Page 5 3/1/2014
  • 6. Configuration Report Resolving Dependencies --> Running transaction check ---> Package jenkins.noarch 0:1.550-1.1 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================== ============================================================== ========================================================== Package Arch Repository Version Size ============================================================== ============================================================== ========================================================== Installing: jenkins noarch jenkins 1.550-1.1 58 M Transaction Summary ============================================================== ============================================================== ========================================================== Install 1 Package(s) Total download size: 58 M Installed size: 64 M Is this ok [y/N]: y Downloading Packages: jenkins-1.550-1.1.noarch.rpm | 58 MB Confidential 00:33 Page 6 3/1/2014
  • 7. Configuration Report Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : jenkins-1.550-1.1.noarch 1/1 warning: /etc/yum.repos.d/jenkins.repo created as /etc/yum.repos.d/jenkins.repo.rpmnew Verifying : jenkins-1.550-1.1.noarch 1/1 Installed: jenkins.noarch 0:1.550-1.1 Complete!  다음 명령을 이용하여 Jenkins 를 구동한다. ~]$ sudo service jenkins start Starting Jenkins [ OK ] - Jenkins 는 기본적으로 8080 포트로 Listening 하며, 변경을 원할 경우 /etc/sysconfig/jenkins 파일의 JENKINS_PORT="8080" 부분을 수정한다.  다음 명령을 이용하여 부팅 시 Jenkins 가 자동으로 시작하도록 서비스 등록한다. ~]$ sudo chkconfig jenkins on ~]$ sudo chkconfig --list | grep jenkins jenkins  0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제 브라우져를 통해 Jenkins 서버에 정상적으로 접근되는지 확인한다. Confidential Page 7 3/1/2014
  • 8. Configuration Report 3.2 보안 설정 Jenkins 설치 후 기본적으로 Jenkins 접속이 가능한 사람은 로그인 과정 없이 모든 메뉴에 Full Access 권한을 얻는다. 따라서 보안 설정을 통해 로그인 기능을 추가하고 각 사용자 별 접근 권한을 제어하도록 수정한다.  좌측의 “Jenkins 관리” 메뉴를 클릭한다.  “보안 설정” 버튼 또는 “Configure Global Security” 메뉴를 클릭한다. - Enable Security 항목을 체크한다. - Security Realm 항목에서 Jenkins’ own user database 를 선택한다. Confidential Page 8 3/1/2014
  • 9. Configuration Report - 사용자의 가입을 허용할 경우 임의의 사용자가 가입 후 로그인 할 수 있으며, 허용하지 않을 경우 Administrator 권한을 가진 사용자를 통해 계정을 생성할 수 있다. 관리적인 측면에서 사용자로부터 계정 생성 요청을 받고 관리자에 의한 계정 생성 절차를 수행하도록 권고한다.  Save 버튼을 클릭 후 메인 페이지로 이동하면 초기 사용자 가입 화면이 표시된다. Confidential Page 9 3/1/2014
  • 10. Configuration Report  Sign Up 이후 Jenkins 관리 - Configure Global Security 메뉴를 선택하여 계정/그룹별 접근 권한을 재설정한다. Confidential Page 10 3/1/2014
  • 11. Configuration Report - Authorization 항목에서 Matrix-based security 를 체크한다. - 관리자 계정을 추가하고 모든 권한을 추가 후 Save 버튼을 클릭한다.  이후 Jenkins 관리 – Manage Users 메뉴에서 사용자를 추가/삭제할 수 있으며 위와 같이 각 사용자에 대한 권한을 관리할 수 있다. 3.3 플러그인 설치 Jenkins 는 3rd party plugin 을 통해 기능을 확장시킬 수 있다.  Jenkins 관리 – 플러그인 관리 메뉴를 선택한다. Confidential Page 11 3/1/2014
  • 12. Configuration Report - 설치된 플러그인 목록 탭에서 현재 설치되어 있는 플러그인 목록을 확인한다. - 설치 가능 탭에서 필요한 플러그인 목록을 탐색하여 설치할 수 있다. - SVN, Maven 등 필수 플러그인은 기본으로 설치되어 있으며, 커버리지 분석 및 코드 인스펙션 등이 필요할 경우 해당 플러그인을 설치할 수 있다. 3.4 Jenkins 디렉토리 구조 Jenkins 는 빌드를 수행하고 archive 파일을 저장하기 위해 디스크 공간을 필요로 하며, 다음과 같은 구조를 가진다. JENKINS_HOME (/var/lib/jenkins) +- config.xml (jenkins 기본 설정 파일) +- *.xml +- userContent (other site-wide configuration files) (http://${server}:${port}/userContent/ 로 접속 가능한 컨텐츠) +- fingerprints +- plugins +- jobs (fingerprint records 가 저장되는 디렉토리) (plugins 이 저장되는 디렉토리) +- [JOBNAME] +- config.xml Confidential (각 job 별 서브 디렉토리) (job 설정파일) Page 12 3/1/2014
  • 13. Configuration Report +- workspace +- latest (working directory) (최근 성공적인 빌드에 대한 심볼릭 링크) +- builds +- [BUILD_ID] +- build.xml (각 빌드별 서브 디렉토리) (빌드 결과 요약) +- log (로그 디렉토리) +- changelog.xml (변경 로그) 3.5 환경설정 Jenkins 시스템 환경설정을 통해 Maven 실행 환경 및 SVN 접속을 위한 credential 설정을 수행한다. 3.5.1 Maven 설정 Jenkins 빌드 시스템에 Maven 이 설치되어 있지 않을 경우, http://preilly.me/2013/05/10/how-to-install-maven-on-centos/ 를 참고하여 Maven 을 설치한다.  Jenkins 관리 – 시스템 설정 메뉴를 클릭한다.  Maven 항목에서 Maven installations 버튼을 클릭한다. Confidential Page 13 3/1/2014
  • 14. Configuration Report  3.5.2 Name 및 maven 이 설치된 경로(MAVEN_HOME)을 입력하고 저장 버튼을 클릭한다. Credentials SVN 접속 정보를 저장하기 위한 Credential 을 추가한다.  좌측의 Credentials 메뉴를 클릭하고 Add domain 링크를 클릭한다.  Domain Name 에 SVN 서버의 호스트 IP 또는 호스트 명을 입력하고 저장 버튼을 클릭한다.  Add Credentials 화면으로 username 과 password 를 이용한 인증을 사용하기 때문에 Kind 에 Username with password 를 선택하고 접속 정보를 입력 후 OK 버튼을 클릭한다. Confidential Page 14 3/1/2014
  • 15. Configuration Report 3.6 View & Job(Item) View 와 Job 은 Jenkins 내에서 빌드 프로세스를 관리하기 위한 기본 개념으로 Job(Item)은 하나의 빌드 프로세스를 의미하고 View 는 여러 Job 의 집합을 의미한다. Confidential Page 15 3/1/2014
  • 16. Configuration Report  View 는 최소 하나 이상의 Job(Item)을 생성 이후에 추가할 수 있으며, Job(Item)의 생성은 4. 애플리케이션 빌드에서 설명한다. Confidential Page 16 3/1/2014
  • 17. 4 애플리케이션 빌드 애플리케이션 빌드를 위한 Job 생성 및 설정 방법을 가이드하고 빌드를 수행한다. 4.1 Job 생성 빌드 작업을 위한 새로운 Job 을 생성하고 설정한다.  새 작업 링크를 클릭하거나 좌측의 새로운 Item 메뉴를 클릭한다.  Job(Item) 이름을 입력하고 Build a free-style software project 를 선택한다.  Job 이 생성되고 나면 Job 구성 메뉴가 표시되며, 소스 코드 관리 항목에서 Subversion 을 선택하고 URL 정보를 입력하고 앞절에서 생성한 Credentials 정보를 선택한다. Confidential [오픈소스컨설팅]애플리케이션 빌드 및 배포.docx Last printed on 3/1/2014 9:21:00 AM
  • 18. Configuration Report - Check-out Strategy: Use ‘svn update’ as much as possible 을 선택하면 처음에만 소스 코드를 전체 다운로드 받고, 두번째 부터는 변경된 소스 코드만 다운로드 받기 때문에 소스 코드를 다운 받는 시간을 많이 줄일 수 있다. - tags 나 branch 를 사용하여 빌드할 경우 Repository URL 에 해당 tags 나 branch 의 URL 정보를 입력한다.  Build 항목에서 Add build step 콤보박스를 선택하고 Invoke top-level Maven targets 를 선택 후 앞 절에서 설정한 Maven 실행 환경 및 Goals 를 입력한다. Confidential Page 18 3/1/2014
  • 19. Configuration Report 그 밖에 Job 관리 항목으로 빌드 유발 및 빌드 후 조치 추가 항목이 있다.  빌드 유발 : 빌드가 언제 수행되어야 하는지 설정하는 항목으로 다음 네 가지 옵션을 중복 선택할 수 있다. - 다른 프로젝트가 빌드된 후 빌드함 - 빌드를 원격으로 유발 (예: 스크립트 사용) - Build periodically : Cron Expression 을 사용하여 빌드 수행 주기를 지정할 수 있다. - Poll SCM : 지정한 주기별로 소스 관리 시스템을 폴링(체크)하여 변경이 있을 경우에만 빌드를 수행한다.  빌드 후 조치 추가 : 빌드가 완료된 이후의 작업을 설정하는 항목으로 다음 각각의 옵션을 중복하여 설정할 수 있다. - Aggregate downstream test results - Archive the artifacts - Build other projects - Publish JUnit test result report - Public Javadoc Confidential Page 19 3/1/2014
  • 20. Configuration Report - Record fingerprints of files to track usage - E-mail Notification 4.2 빌드 수행 추가된 Job 에 대한 수동 빌드를 수행한다.빌드를 수행하려는 Job 을 선택하고 좌측의 Build Now 를 클릭하여 수동 빌드를 수행한다.  빌드를 수행하려는 Job 을 선택하고 좌측의 Build Now 를 클릭한다. Confidential Page 20 3/1/2014
  • 21. Configuration Report 4.3 소스 Revision 태깅 현재 동작중인 애플리케이션의 SVN Revision 번호와 빌드 날짜를 태깅함으로써 애플리케이션 변경 여부를 확인할 수 있다. 4.3.1 pom.xml 수정 빌드 시 SVN Revision 정보와 빌드 날짜를 태깅하기 위해 pom.xml 파일을 다음과 같이 수정한다. … <properties> <maven.build.timestamp.format>YYYY.MM.dd. HH:mm:ss</maven.build.timestamp.format> <buildNumber>${maven.build.timestamp}</buildNumber> </properties> … <build> <plugins> … <plugin> <groupId>org.apache.maven.plugins</groupId> Confidential Page 21 3/1/2014
  • 22. Configuration Report <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>Revision Tagging</id> <phase>package</phase> <configuration> <target name="jar-checkversion"> <jar destfile="target/checkversion.jar"> <manifest> <attribute name="Revision-Number" value="${SVN.Revision}" /> <attribute name="Build-Date" value="${maven.build.timestamp}" /> </manifest> </jar> <copy file="target/checkversion.jar" tofile="target/${project.artifactId}${project.version}/WEB-INF/lib/checkversion.jar" overwrite="true" failonerror="false" /> </target> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 4.3.2 revision.jsp 파일 생성 SVN Revision 번호 및 빌드 실행 시간을 확인할 수 있는 JSP 페이지를 생성한다. … <%@ page import="java.util.*, java.io.*, java.util.jar.*" %> <%! public String [] checkVersion(String jarFileUrl) throws Exception { JarFile jarFile = new JarFile(new File(jarFileUrl)); Manifest manifest = jarFile.getManifest(); Attributes attributes = (Attributes) manifest.getMainAttributes(); String buildDate = attributes.getValue("Build-Date"); String revision = attributes.getValue("Revision-Number"); return new String [] {buildDate, revision}; } %> Confidential Page 22 3/1/2014
  • 23. Configuration Report <% String portalJar = "/Development/project/peacock/workspace/springsample/chapter4/src/main/webapp/WEB-INF/lib/checkversion.jar"; String [] data = checkVersion(portalJar); out.println("Revision<br>"); out.println("===============================<br>"); out.println("Build Date : " + data[0] + "<br>"); out.println("Revision : " + data[1] + "<br><p>"); %> 4.3.3 빌드 옵션 수정 Jenkins 를 통해 SVN.Revision 파라메타 값을 세팅하기 위해 빌드 옵션을 수정한다.  위와 같이 수정하고 빌드 후 배포하면 revision.jsp 파일을 통해 다음과 같이 SVN Revision 및 빌드 수행 시간을 확인할 수 있다. Confidential Page 23 3/1/2014
  • 24. Configuration Report Confidential Page 24 3/1/2014
  • 25. 5 애플리케이션 배포 빌드 결과 패키징 파일에 대한 서버 배포 방법에는 다음과 같은 여러 가지 방법이 존재한다.  수동 배포 : Jenkins 빌드 시스템에 접속 후 스크립트 등을 이용하여 서버에 수동으로 배포한다.  Maven 설정 파일 이용한 자동 배포 : war 패키징 파일을 WAS 로 배포하기 위해 사용할 수 있으며 pom.xml 파일에 각 WAS 별 plugin 을 이용하여 빌드 후 자동 배포를 수행한다. : 버전에 따라 Tomcat Manager 가 필요할 수 있다.  Deploy Plugin 이용한 자동 배포 : Deploy Jenkins Plugin 을 통해 war/ear 패키징 파일을 Tomcat 4.x/5.x/6.x/7.x, JBoss 3.x/4.x, Glassfish 2.x/3.x 서버로 자동 배포를 수행한다.  Publish Over SSH Plugin 이용한 자동 배포 : Publish Over SSH Jenkins Plugin 을 통해 패키징 결과 파일을 SCP 또는 SFTP 를 이용하여 배포하고 별도의 command 를 실행시킬 수 있다.  Publish Over FTP 이용한 자동 배포 : Publish Over FTP Jenkins Plugin 을 통해 패키징 결과 파일을 FTP 를 이용하여 배포할 수 있다. 본 문서에서는 패키징 파일의 유형에 관계없이 범용으로 사용할 수 있는 Publish Over SSH Plugin 을 사용한 배포를 가이드한다. 5.1 Plugin 설치 Publish Over SSH Jenkins Plugin 을 다음과 같이 설치한다.  Jenkins 관리 – 플러그인 관리 메뉴를 선택하고 설치 가능 탭에서 Publish Over SSH 를 검색한다. Confidential [오픈소스컨설팅]애플리케이션 빌드 및 배포.docx Last printed on 3/1/2014 9:21:00 AM
  • 26. Configuration Report  플러그인 설치를 수행한다. (Jenkins 를 재시작 해야 적용됨) 5.2 시스템설정 SSH 접속 정보를 설정한다.  Jenkins 관리 – 시스템 설정 메뉴를 클릭하고 Publish over SSH 항목에서 서버 및 계정 등 SSH 접속 정보를 설정한다. Confidential Page 26 3/1/2014
  • 27. Configuration Report 5.3 Job 수정 Job 구성 메뉴에서 빌드 후 조치 항목에 Send build artifacts over SSH 옵션이 포함되어 있는 것을 확인할 수 있으며 앞절에서 설정한 서버 정보를 이용한다. Confidential Page 27 3/1/2014
  • 28. Configuration Report  Source files : 배포 대상 패키징 파일  Remove prefix : 배포 대상 패키징 파일이 위치한 workspace/job_name 하위의 경로(eg. target)를 제거할 수 있다. 비어있거나 경로가 일치하지 않을 경우 Remote directory 하위에 동일 서브 디렉토리가 생성된다.  Remote directory : 시스템 설정의 SSH Server 항목에서 설정한 Remote Directory 에서의 상대 경로  Exec command : 패키징 파일 전송 후 실행될 명령 또는 스크립트 5.3.1 빌드 수행 설정이 정상적으로 적용되었는지 Build Now 를 클릭하여 빌드를 수행하고 관련 로그를 확인한다. Confidential Page 28 3/1/2014
  • 29. Configuration Report …… Confidential Page 29 3/1/2014