업그레이드와 백업

 

업그레이드

WAS 기반으로 젠킨스를 구동하고 있다면 업그레이드는 매우 쉽다.

다음 순서대로 업그레이드를 진행해 보자. 

  1. 젠킨스가 구동되는 톰캣 디렉토리로 이동한다.

    cd apache-tomcat-7.0.54

  2. 젠킨스 사이트에서 새로운 버전을 다운받는다. 

    wget http://mirrors.jenkins-ci.org/war-stable/latest/jenkins.war

  3. 톰캣 작동을 중지한다.

    ./bin/shutdown.sh

  4. 기존 젠킨스 어플리케이션을 /tmp 로 이동해 놓는다.

    mv webapps/ROOT* /tmp

  5. 새로운 젠킨스를 ROOT.war 로 이름을 변경하여 webapp 디렉터리로 옮겨 놓는다.

    mv jenkins.war webapp/ROOT.war

  6. 톰캣을 시작한다.

    ./bin/startup.sh

이제 웹 브라우저로 연결하면 새로운 버전의 젠킨스가 반겨줄 것이다.

백업

젠킨스는 특성상 많은 디스크 용량을 차지하므로 백업 전략을 수립하고 백업 하기는 쉽지 않은 일이다.

만약 예산이 충분하다면 상용 전문 백업 솔루션을 구입하여 젠킨스의 홈 디렉터리를 백업하는게 좋다. 예산이 없다면 젠킨스가 제공하는 백업 플러그인을 사용하는 법과 rsync 를 이용하는 법 2가지가 있다.

현재 존재하는 백업 플러그인은 젠킨스 설정 파일을 백업하는 데는 적당하지만 전체 빌드 이력을 백업하는 용도로는 적당하지가 않다.

개인적으로는 rsync 를 이용하여 백업하는 방법을 사용하고 있다. 단 주의할 점은 빌드 이력은 용량이 워낙 크다 보니 백업 서버의 디스크 용량이 충분해야 한다는 점이다.

 

어떤 디렉터리와 파일을 백업해야 할지 판단하기 위해 JENKINS_HOME 디렉터리의 구조를 알아 보자.

  • config.xml : 젠킨스의 루트 설정 파일이다. 
  • *.xml : 작업이나 플러그인등의 설정 파일이다.
  • userContent : 젠킨스의 userContent URL 로 서비스 되는 파일이다. 연결은 http://jenkins.example.com/userContent 로 할 수 있다.
  • fingerprints : 핑거 프린트 기록이 저장된다.
  • plugins : 설치한 플러그인이 저장된다.
  • jobs : 빌드 이력이 저장되는 디렉터리로 가장 용량이 크며 사용할 수록 점점 커지게 된다.
    • [JOBNAME] : 젠킨스에서 생성한 작업이름으로 디렉터리가 생성된다.
    • config.xml (job configuration file)
    • workspace (working directory for the version control system)
  • tools : JDK 나 maven 같은 빌드 도구중 젠킨스를 통해 설치했을 경우 여기에 보관된다. 백업하지 않고 별도로 설치해도 된다.
  • cache: 툴 설치시 다운받는 경로이다. 백업하지 않아도 된다.

 

위 내용을 참고하여 백업 전략을 수립해 보자. 일반적으로 tools 와 cache 를 제외한 모든 데이타를 백업하는게 좋다.
다음 명령어로 젠킨스의 홈 디렉터리를 원격지에 백업할 수 있다.

rsync -avzh /var/jenkins jenkins@backup.example.com:/var/jenkins/  --exclude=tools --exclude=cache

백업이 되는 것을 확인했다면 크론에 등록하여 주기적으로 백업을 실행하자. 크론 등록시 주의할 점은 크론으로 실행시 사용자의 프로파일을 읽지 않는다.

그러므로 프로파일에 설정된 JENKINS_HOME 변수는 사용할 수 없으므로 백업 스크립트에 ${JENKINS_HOME} 같은 변수보다는 절대 경로로 젠킨스의 홈 디렉터리를 지정하는게 좋다.

 

복구는 백업한 데이타를 tar 나 7zip 등으로 묶어서 젠킨스 서버로 복사한 후에 압축을 풀고 그 디렉터리를 JENKINS_HOME 으로 지정해 주면 된다.

 

마치며

지속적인 통합은 소프트웨어 개발 프로젝트를 성공적으로 마치기 위해서는 꼭 반영해야 하는 필수적인 프로세스이다. 

통합으로 인한 각종 문제 발생을 조기에 식별할 수 있으므로 통합 실패로 인한 일정 지연과 품질 저하를 효과적으로 대응할 수 있게 해주므로 팀으로 일하고 규모가 커질수록 꼭 도입해야 한다.

 

젠킨스는 안정적이고 풍부한 기능을 제공하여 여러 해 동안 오픈소스 지속적인 통합 솔루션의 좋은 대안으로 평가받고 있다.

 

지면의 한계로 인해 젠킨스의 다양하고 강력한 기능을 많이 설명하지는 못했지만 실제 프로젝트에 도입하기 위한 기본적인 지식은 전달하였다고 믿는다.

지속적인 통합을 적용할 계획이 있는 독자들은 젠킨스 도입을 검토해 보기를 권하며 지속적인 통합 구축까지 완료하여 성공적인 소프트웨어 개발을 하기를 기원한다.