프로그래밍 일반 2017. 11. 7. 17:07

GeoIP 자동 업데이트 빌드 프로세스에 추가하기

GeoIP가 무엇인지 알고 있다는 가정하에 매월 첫 주 목요일에 업데이트되는 해당 테이블을 자동으로 업데이트하는 방법을 알아보자.


운용 중인 프로젝트의 CI를 젠킨스로 구축했다면 서버 빌드 시 아래와 같은 Powershell 스크립트를 추가하면 된다.


참고로 프로젝트에서 GeoIP.dat를 로드해서 룩업 테이블을 만들어 사용하는 경우 .dat 파일을 자동 업데이트하는 방법이다.



#서버를 빌드할 때 자동으로 GeoIP를 업데이트한다.

if ($ENV:JobCommand -eq "ServerBuild")

#매월 첫 주 목요일에 업데이트되는 파일을 다운 받는다.

$webclient = New-Object System.Net.WebClient

$sourceUrl = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz"

$destinationPath = "$ENV:WORKSPACE\Server\Lib\GeoIp2\GeoIP.dat.gz"

$webclient.DownloadFile($sourceUrl, $destinationPath)


#반디집을 이용하여 압축을 푼다.

[string[]]$array = "bx", "-aoa", "$ENV:WORKSPACE\Server\Lib\GeoIp2\GeoIP.dat.gz"

start-process C:\Bandizip\Bandizip.exe $array


#압축이 풀리기 전에 원본 파일이 삭제되는 것을 방지한다.

wait-event -sourceIdentifier "Bandizip" -timeout 10


#반디집 핸들러가 원본 파일을 물고 있는 것을 풀어준다.

$bz = get-process Bandizip

stop-process -inputobject @bz -force


#원본 파일을 삭제한다.

Remove-Item $destinationPath -Recurse


#압축이 풀린 파일을 svn에 적용한다.

svn commit $ENV:WORKSPACE\Server\Lib\GeoIp2\GeoIP.dat --non-interactive --trust-server-cert --username **** --password **** -m "Build server solution from CI server"

}


설명을 첨부하자면 JobCommand 는 빌드 파라미터이고 서버 빌드를 실행했을 때 웹에서 GeoIP.dat.gz 파일을 다운로드 받아 압축을 풀고 svn으로 서밋하는 간단한 내용이다.


gz 파일은 CI 서버에 반디집을 설치하여 반디집 커맨드 명령어로 압축을 푼다.