블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함

calendar

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Jenkins 에 대한 개요

2013.11.08 11:02 | Posted by 솔웅


What is Jenkins?



Jenkins는 반복되는 job들에 대한 실행을 모니터 하는 award-winning application 입니다. 예를 들어 소프트웨어 프로젝트를 빌드한다던가 cron에 의해 실행되는 job들 같은 경우 이지요. 그런 일들 중에 현재 Jenkins는 아래 두가지 job들에 포커스를 맞추고 있습니다.

    Building/testing software projects continuously, just like CruiseControl or DamageControl. Jenkins는 지속적으로 integration이 진행되는 시스템 에서 이러한 일들을 쉽게 사용할 수 있도록 해 줍니다. 개발자들이 프로젝트를 진행하면서 이루어 지는 integrate change들을 쉽게 진행할 수 있도록 해 주는 것이죠. 그리고 빌드 하는 작업도 쉽게 진행하도록 도와 줍니다. 자동화되고 지속적인 빌드는 생산성을 높여줍니다.
 
    cron job들과 procmail job들 같은 외부에서 실행되는 job들에 대한 모니터링을 합니다. 원격에서 실행되는 job들에 대한 모니터도 가능합니다. 예를 들어 cron의 경우 output을 capture 한 정기적인 이메일을 받는 일등이 있을 수 있습니다. 여러분은 정기적으로 이 이메일을 점검함으로서 뭔가 이상이 있을 때 이것을 알아챌 수 있는 것입니다. Jenkins는 이런 output들을 보관하고 뭔가 이상이 있을 때 여러분이 알아채기 쉽도록 도와줍니다.




구글에서 Jenkins 로 검색하면 이런 미인 사진도 나옵니다.

하지만 지금 공부하고 있는 Jenkins의 로고는 아래 이미지 입니다.




Who is using it?

많은 회사들과 기관들이 이 Jenkins를 사용하고 있습니다. 대부분의 instance들은 firewall 안에서 실행되죠. 구글 같은 경우에는 public하게 visible한 instance들을 사용하기도 합니다. 여기를 보시면 anonymouse usage를 수집한 통계 자료를 보실 수도 있습니다.


Features

Jenkins 에는 아래와 같은 기능들이 있습니다.:

    Easy installation: Just java -jar jenkins.war, 혹은 a servlet container 내에 deploy. 다른 추가적인 인스톨 필요 없음. 데이타베이스 필요 없음.
    Easy configuration: web GUI를 통해서 쉽게 configuration을 할 수 있음. 실시간으로 에러 확인이 가능하고 inline help를 받을 수 있음. XML를 수정하고 하는 작업이 필요 없음. XML을 통해서 configuration을 하고 싶으면 그렇게 할 수도 있음
    Change set support: Jenkins는 Subversion/CVS로부터 빌드하면서 만들어진 변화들의 리스트를 generate 할 수 있음. 이것은 repository 의 load를 줄이기 위한 아주 효율적인 방법입니다.
    Permanent links: Jenkins는 대부분의 페이지에 대해 깔끔하고 가독성 있는 URL을 제공합니다. "latest build"/"latest successful build" 같은 permalinks등을 포함해서요. 그래서 다른 곳에서도 쉽게 링크 작업을 할 수 있습니다.
    RSS/E-mail/IM Integration: Monitor build results by RSS or e-mail to get real-time notifications on failures. failure에 대한 실시간 notification들을 얻기 위한 RSS나 이메일에 의한 빌드 결과 모니터 함.
    After-the-fact tagging: 오래전에 빌드가 완료된 것에 대해서도 tag가 가능합니다.
    JUnit/TestNG test reporting: JUnit test report를 보여 줍니다. history 정보도 보여주고요. history trend도 그래프로 보여줍니다.
    Distributed builds: Jenkins can distribute build/test loads to multiple computers. This lets you get the most out of those idle workstations sitting beneath developers' desks.
    File fingerprinting: Jenkins can keep track of which build produced which jars, and which build is using which version of jars, and so on. This works even for jars that are produced outside Jenkins, and is ideal for projects to track dependency.
    Plugin Support: Jenkins can be extended via 3rd party plugins. You can write plugins to make Jenkins support tools/processes that your team uses.



Jenkins Best Practices

최근 automated test를 진행하는 Continuous Integration에서 Jenkins를 많이 채택하고 있습니다. CI(Continuous Integration)의 개념이 이제는 Build Management, Release Management, Deployment Automation, and Test Orchestration 쪽으로 바뀌고 있습니다. 이 섹션에서는 Jenkins를 사용하기 위한 best practic 들의 세트를 제공합니다. - A Continuous Integration Solution to provide executives, business managers, software developers and architects a better sense of the development progress and code quality of projects throughout the development lifecycle. (View Jenkins Best Practices)


Introductory Articles

아래 링크들 중 많은 부분이 Hudson을 참조하고 있습니다. Jenkins의 원래 이름이 Hudson 이었습니다.



   

Test Drive

test drive를 위해 Java Web Start를 통해서 Jenkins를 시작합니다. jenkins가 시작되면 dashboard를 얻기 위해  http://localhost:8080/로 갑니다. 이 Jenkins에 여러분이 세팅한 configuration은 ~/.jenkins에 저장됩니다. Jenkins가 restart 하게 되면 이 저장된 configuration을 참조해서 계속 적용되게 됩니다.



Installation

Jenkins를 실행하려면 JRE 1.5 버전 이상이 깔려 있어야 합니다. 그 다음 jenkins.war를 다운 받은 후 java -jar jenkins.war 라는 명령어를 통해서 이것을 실행 시킬 수 있습니다. 이것은 기본적으로 test drive와 같은 set up 인데요 다만 oupput 이 윈도우가 아니라 콘솔로 가는 것이 다릅니다.

그리고 여러분이 Glassfish, Tomcat 5, JBoss, Jetty 6 같은 Servlet 2.4/JSP 2.0 이후 버전을 지원하는 서블릿 콘테이너를 가지고 있다면 jenkins.war를 다른 WAR 파일처럼 deploy 할 수 있습니다. container-specific installation instruction 에 대해 좀 더 자세히 할고 싶으시면 이 문서를 보세요.

일단 war 파일이 explod 되면 jenkins/WEB-INF directory 안에서 chmod 755 jenkins를 해 주세요. 이렇게 해야 이 shell script를 실행할 수 있습니다.

만약 Window에서 실행한다면 Jenkins를 service로서 실행해야 할 겁니다. 그래야 자동적으로 start up 시킬 수 있을테니까요. 이렇게 하기 위한 가장 쉬운 방법은 Jenkins를 native Windows installer를 다운받아 인스톨 하면 됩니다. 이 파일은 Jenkins main page에서 다운 받으실 수 있습니다. .zip 파일을 다운 받으신 후 압축을 풀고 인스톨 파일을 클릭하시기만 하면 설치 마법사를 통해 설치하실 수 있습니다. 이 설치 마법사가 Jenkins를 인스톨 하고 Jenkins Windows service도 셋업해 줄 겁니다.

Jenkins를 서비스로 등록할 수 있는 다른 방법은 톰캣을 서비스로서 인스톨하고 Jenkins를 이곳에 deploy 하는 방법도 있습니다. 그리고 Java Service Wrapper를 사용할 수도 있구요. 그런데 service wrapper를 사용하면 약간의 문제가 있을 수도 있습니다. 왜냐하면 디폴트 namespace에 있는 Jenkins의 Main 클래스가 이 service wrapper main class와 충돌할 수 있기 때문이죠. service container (Tomcat, Jetty, etc.) 안에 deploy 하는 것이 아마 좀 더 직관적일 겁니다. 이와 관련해 별로 경험이 없는 개발자들도 쉽게 하실 수 있습니다.

다양한 환경에서 다른 사람들은 Jenkins/Hudson을 어떻게 deploy 했는지 보시려면 아래 링크들을 참조하세요.



License

The license for the core might be found at https://github.com/jenkinsci/jenkins/blob/master/LICENSE.txt


저작자 표시 비영리 동일 조건 변경 허락
신고

티스토리 툴바