336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Installer Project는 VS2010 이후 사라졌다가 VS2013부터 다시 사용 할 수 있습니다. Visual Studio 2013 이상에서 Installer Project를 사용 할 수 있는 방법은 이 글을 참조 해 주시면 되겠습니다.

본론으로 들어가서 Installer Project는 Visual Studio의 devenv.exe 파일을 이용하여 빌드 할 수 있습니다. 따라서 CI 서버는 개발 솔루션에 맞는 Visual Studio와 Installer Project 확장이 설치 되어 있어야 합니다. 작성된 예제에서는 "Installer 버전 변경, NuGet 패키지 복원, Installer 프로젝트 빌드, Installer 파일 배포"로 구성하고 있으며 프로젝트 관리 방식에 따라 몇 가지 단계는 제외 될 수 있습니다.

Installer 버전 변경

지속적인 통합 배포의 핵심 요소 중 하나는 버전 관리입니다. 빌드마다 변경되는 버전을 만들기 위해 제가 자주 사용 하는 방법은 빌드마다 증가되는 %build.counter% 변수를 이용하는 것입니다. 프로젝트 빌드 설정 -> General Settings를 선택 하시면 build counter를 확인 하실 수 있습니다.

   

Installer 상위 버전을 결정하는 요소들은 ProductCode, PackageCode, ProductVersion, UpgradeCode 이며, vdproj 파일에 저장되어 있습니다.

Installer 상위 버전 규칙은 다음과 같습니다.

  • UpgradeCode는 동일하고 ProductCode, PackageCode는 달라야 하며 ProductVersion이 높으면 상위 버전입니다.

       

   

이 단계에서는 빌드마다 vdproj 파일의 ProductVersion, ProductCode, PackageCode를 변경하여 상위 버전의 Installer 배포 파일을 생성 할 수 있도록 지원합니다. 이를 위해 정규식을 활용한 PackageCode와 ProductCode를 새로 생성하며 전달된 버전명으로 ProductVersion을 변경하는 vdproj 편집 툴을 개발하였고, 관심 있으신 분은 쪽지나 덧글 주시면 전달 드리겠습니다.

  • Script : "D:\Util\DeployEditor\DeployFileEditor.exe" -p %teamcity.build.workingDir%\deploy.vdproj -t v -v 1.0.%build.counter%

   

NuGet 패키지 복원

NuGet 패키지를 사용 하시는 분들은 아시겠지만 NuGet 패키지에 사용된 라이브러리들은 Version Control에 저장하지 않습니다. 다만, 솔루션 파일이나 package.config 파일에 NuGet 패키지 정보들을 저장 하는데 TeamCity에서는 Version Control 통해 다운로드된 솔루션 파일의 NuGet 패키지를 복원 하는 기능인 NuGet Installer를 제공하며 사용 방법은 비교적 간단합니다.

먼저 Add Build Step에서 NuGet Installer를 선택합니다.

   

기본적으로 2가지 요소만 수정 하시면 됩니다.

  • NuGet.exe : 최초 설정 시 아무 값도 존재 하지 않습니다.

    NuGet.exe Settings을 선택 하시면 NuGet.exe를 설정 화면이 나오며 다음과 같이 설정 하고, Build Step을 새로 만드시면 다운로드된 NuGet.exe를 선택 할 수 있습니다.

  • Path To Solution File : 솔루션 파일을 입력 합니다.

NuGet 빌드 단계 설정 예제

   

Installer 프로젝트 빌드

앞에서 언급한 것처럼 Installer Project는 Visual Studio를 이용하여 빌드 할 수 있습니다.

Working Directory는 솔루션 파일이 있는 경로로 설정하며, 스크립트에 설정된 각종 옵션들은 빌드 환경에 맞게 수정하여 사용하시면 되겠습니다.

전체 스크립트

  • "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" /project deploy /rebuild debug /out buildOutput.log sample.sln

설명

  • VS2015가 실행 파일 : "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
  • 대상 프로젝트 옵션(파일이 아닌 프로젝트명) : /project deploy
  • 디버그모드로 다시 빌드 : /rebuild debug
  • 빌드 로그 파일 경로 : /out buildOutput.log
  • 대상 솔루션 : sample.sln

   

   

   

Installer 배포

새로운 Installer를 Lastest 폴더에 옮겨 최신 상태를 유지 하기 위해 이 단계를 사용합니다.

일반적으로 로컬 복사를 하기 위해 xcopy를 사용 하는데 중복 파일 점검, 폴더 단위 복사에는 효과적이지 않습니다.

이를 보완하기 위해 Windows7 이상에서는 robocopy를 지원하는데, 저는 IIS 설치 시 제공되는 web deploy를 사용합니다.

Web Deploy는 로컬, 원격 배포 뿐만 아니라 웹 사이트 배포 시에도 사용 할 수 있으므로 알아 두시면 여러모로 좋겠습니다.

스크립트

  • "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:dirPath="%teamcity.build.workingDir%\Debug" -dest:dirPath=c:\deploy\Lastest

   

Source Directory를 Destination Directory로 모두 복사하며 sync 옵션은 최신 파일만 복사한다는 의미 정도로 이해하시면 되겠습니다.

   

TroubleShooting

vdproj 8000000A 오류

빌드 수행 시 Installer 프로젝트 빌드 단계에서 오류가 발생 될 수 있습니다.

이러한 경우 스크립트에 적용된 로그 파일을 편집기로 열어 보시면 상세 내용을 확인 할 수 있습니다.

로그 파일에 8000000A 오류가 발생 되었다면 다음의 절차를 따라 주시기 바랍니다.

현상

로그 파일에 8000000A 오류 발생

------ Starting pre-build validation for project 'MySolution.Setup' -----

ERROR: An error occurred while validating. HRESULT = '8000000A'

해결 방법

실행 창에서 regedit.exe를 실행 시켜 레지스트리 편집기를 엽니다.

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\MSBuild 경로에 EnableOutOfProcBuild 값을 DWORD 0으로 설정합니다. 값이 없는 경우 생성하시기 바랍니다.

참고

VS2013 : HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\

VS2015 : HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\


참고

   

   

   

   

+ Recent posts