'2008/11/02'에 해당되는 글 2건

  1. 2008/11/02 Hudson을 이용한 자동빌드 환경 구축(1) (1)
  2. 2008/11/02 svn 증분 백업 (1)
공개 CI툴인 Hudson을 이용하여 DCGUI의 자동빌드 환경을 구축을 해 봤다.

Hudson설치부터 trac과의 연동까지 구축을 하여 이곳에 방법을 자세히 설명 할려고 한다.

꽤나 길어질 예정이므로 몇회로 나누어서 설명하겠다.

1. Hudson 설치

Hudson을 설치하는 방법은 간단하다. 이곳에서 Hudson을 다운로드 한 후 임의의 디렉토리에 복사해 넣으면 끝이다.
자바를 해본 사람은 알겠지만 확장자가 war이다. 이는 tomcat과 같은 WAS에 deploy하여 연동을 할 수도 있다.

물론 Hudson안에 자체 servlet container가 들어있으므로 따로 WAS를 설치할 필요는 없다.

여기서는 WAS를 설치하지 않고 Windows에서 Hudson안에 들어있는 servlet container를 이용하여 자체 실행하는 방법으로 설명을 하겠다.

Hudson을 임의의 디렉토리에 복사해 넣은 후 Hudson을 실행하는 방법은 간단하다. 아래와 같은 방법으로 실행하면 된다.

java -jar hudson.war --httpPort=8093

물론 Hudson은 java로 만들어진 툴이므로 jre가 설치되어 있어야 한다.
만약에 jre가 설치되어있지 않다면 여기에서 jre를 설치한다.

여기서 옵션으로 주어지는 --httpPort는 Hudson을 실행할 포트를 지정해준다. 만약에 이옵션이 없으면 8080으로 실행한다. ssl을 사용한다면 --httpsPort를 이용하여 포트를 지정해준다.

위와같이 실행 하면 war파일에서 자동으로 압축을 풀어 ~(사용자)/.hudson 디렉토리에 저장을 한다. 이곳에 또한 Hudson이 실행중에 저장하는 각종 데이터도 저장을 한다. 만약에 이 디렉토리를 다른곳에 바꾸고 싶다면 실행시 HUDSON_HOME 를 환경변수로 지정해주면 된다.

환경변수를 설정하는 방법에는 3가지가 있는데 자세한건 이곳을 참고하고 간단하게 실행시 지정해주는 방법을 사용해도 된다.

따라서 아래와 같이 실행을 하면 Hudson의 실행 디렉토리를 지정할 수 있다.

java -DHUDSON_HOME=hudson_home -jar hudson.war --httpPort=8093

2. Hudson 설정

정상적으로 Hudson이 실행되면 기본적인 설정을 해주어야한다. 그냥 사용해도 상관 없지만 몇가지 옵션을 세팅 해주면 편하게 사용 할 수 있다.

SCM은 svn을 사용하는 것을 기준으로 설명하겠다.

Hudson에 들어간 후에 Manage Hudson(Hudson의 관리) > Configure System를 들어가면 여러가지 세팅 하는 부분이 있지만 다 넘어가고 여기서는 java프로젝트가 아닌 Visual Studio를 이용한 프로젝트를 구성할 예정이므로 E-mail Notification 부분만 설명을 하겠다.

이곳을 세팅 해주면 빌드가 실패시 그리고 실패된 빌드가 다시 정상으로 돌아왔을 때 안내 이메일을 받을 수 있다.

Gmail을 기준으로 설명을 하겠다.

1. SMTP server 에는 Gmail smtp서버인 smtp.gmail.com을 입력해준다.
2. System Admin E-mail Address 에는 메일을 보내는 사람에 들어갈 이메일을 입력해준다.
3. Hudson URL 에는 Hudson의 접근 URL을 입력해준다. 기본적으로 입력이 되어있는데 잘못된 주소이면 수정해준다

여기까지 해준 다음에 Gmail은 인증이 필요하므로 Advanced 버튼을 눌러 추가 설정부분을 열어준다.

1. Use SMTP Authentication를 체크해준다.
2. User Name에 Gmail 계정 아이디를 입력해준다.
3. Password에는 Gmail 계정 비밀번호를 입력해준다.
4. Use SSL를 체크해준다.
5. SMTP Port는 비워두면 기본 포트를 사용하므로 굳이 입력할 필요는 없다.

여기까지 세팅을 한다음에 정상적으로 세팅이 되었는지 테스트 하기전에 맨 아래의 Save를 누른다. 저장을 하지 않고 테스트를 하면 제대로 테스트가 되지 않고 페이지가 이동해버려 다시 입력해야하므로 주의한다.

저장후에 다시 설정 페이지로 돌아가서 Test configuration by sending e-mail to System Admin Address를 눌러서 정상적으로 발송이 완료되는지 확인한다.

여기까지 완료를 하면 기본적으로 Hudson을 사용할 준비는 완료가 됬다.

3. Hudson 보안 설정

Hudson 메인 화면에 가면 아무런 로그인도 안했는데 Hudson의 설정을 변경하거나 Job을 생성 할 수 있도록 되어있다. 내부적으로만 사용하고 공개를 안한다면 모르겠지만 외부로 공개가 된다면 보안상 큰 문제가 된다.

보안설정을 하기 위해서는 첫번째로 관리자로 쓸 계정을 등록 하는 것이다.

Hudson의 상단 오른쪽에 있는 sign up으로 이동하여 정보를 입력후 등록한다.

그리고나서..

1. Manage Hudson > Configure System으로 가서 Enable security를 체크해준다.
2. Security Realm에서 Hudson's own user database를 체크 해준다.
3. Authorization에서 Matrix-based security를 체크 한 후 Anonymous는 Overall에서 Read만 체크해준다.
4. User/group to add에 아까 등록한 계정 아이디를 입력해준 후 Add를 눌러 추가한다.

추가가 되면 해당 계정에 모든 권한을 체크해주고 하단의 Save를 눌러 저장을 한다.

주의할 것은 반드시 계정을 등록 후에 권한을 체크해줘야한다는 것이다. 권한 체크시 실제 등록되어있는 계정이 아니더라도 체크가 되어버리니 잘못하여
Anonymous를 Read만 둔 상태에서 저장하면 어떠한 관리가 불가능하다.

다음 글에서 trac과 연동이 가능한 플러그인 및 언어 설정 플러그인 설치 및 설정 법과 Job을 추가하는 방법을 알아보겠다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/11/02 18:18 2008/11/02 18:18

svn 증분 백업

프로그래밍 : 2008/11/02 14:01
기존에 svn저장소를 gmail로 백업을 구성 했을 때는 저장소를 항상 전체 백업을 하도록 했었다.
아직은 저장소가 크지 않아서 큰 문제는 없지만 백업후 압축을 하는데 너무 많은 시간이 걸려서 증분백업을 하도록 구성 했다.

일단 증분백업은 하루단위로 백업을 수행하고, 전체 백업은 일주일에 한번만 백업하도록 구성했다.

증분백업을 하기 위해서는 백업을 한 리비전 정보를 저장해 놓아야지만 다음 백업시 이를 이용하여 추가된 리비전만 백업이 가능하다.

그런 일을 해주는 것에 svnlook이라는 것이 있다. 이를 이용하면 인자로 주어지는 저장소의 최근 리비전을 출력해준다. 이 리비전을 이용하여 저장소 덤프시 전에까지 저장한 리비전과 svnlook이 리턴한 리비전까지 백업을 수행해주면 된다.

아래는 이를 이용한 쉘스크립트이다.

#!/bin/sh

svnrepos="/var/svn/chadr"
lastrevfile="svnbackup_lasttrev"
date="$(date +%y%m%d)"
lastrev=`svnlook youngest ${svnrepos}`
prevrev=`cat ${lastrevfile}`
nextrev=`expr ${prevrev} + 1`
md5sumfile="svnbackup_inc.md5"
backupdir="tmp_svnbackup_inc"
emailaddr="chadr@a.com"
adminemailaddr="chadr@a.com"
dumpfile="dumpfile_${nextrev}_${lastrev}.${date}"

if [ $nextrev -gt $lastrev ]
then
  mutt -F .mutt-local -s svnbackup_skipped_inc_norev_${date} ${adminemailaddr} < svn_muttbody
  echo "dose not exist more revision to backup."
  exit
fi

echo "next revision : ${nextrev}"
echo "last revision : ${lastrev}"

mkdir ${backupdir}

echo "dumping svn repositary..."
svnadmin dump --incremental --revision ${nextrev}:${lastrev} ${svnrepos} > ${dumpfile}
echo "dump completed."

touch ${md5sumfile}

oldMD5=`cat ${md5sumfile}`
newMD5=`md5sum ${dumpfile}`
newMD5=${newMD5:0:32}

echo "oldMD5 : ${oldMD5}"
echo "newMD5 : ${newMD5}"

if [ $oldMD5 = $newMD5 ]
then
  mutt -F .mutt-local -s svnbackup_skipped_inc_${date} ${adminemailaddr} < svn_muttbody
  echo "already backuped revision... exit."
else
  echo "compressing..."
  7za a -mx9 -mmt -v9m ${backupdir}/[dev.dalmuri.net.var.svn.chadr]${dumpfile}_inc_${nextrev}_${lastrev}.7z ${dumpfile}

  cd ${backupdir}

  echo ""
  echo "file list of sending."

  count=0

  for file in $(ls)
  do
    echo "${file}"
    count=`expr $count + 1`
  done

  echo ""

  i=1
  #send email
  for file in $(ls)
  do
    echo "sending to ${emailaddr}...(${i}/${count}) ${file}"
    mutt -F ../.mutt-local -a ${file} -s svnbackup_inc_${nextrev}_${lastrev}_${date}_[${i}/${count}] ${emailaddr} < ../svn_muttbody
    echo "sending completed. ${file}"
    i=`expr $i + 1`
  done

  mutt -F ../.mutt-local -s svnbackuped_inc_${nextrev}_${lastrev}_${date} ${adminemailaddr} < ../svn_muttbody

  echo "all sending completed."

  cd ..

  echo "${newMD5}" > ${md5sumfile}
  echo "${lastrev}" > ${lastrevfile}

fi
#delete tmp dir
rm -rf ${backupdir}
rm ${dumpfile}

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/11/02 14:01 2008/11/02 14:01