김씨의 IT 이야기

cloud

Posts Tagged ‘Web site

웹사이트 빌드 Part 2

leave a comment »

아.. 아마 파트 4까지 나오지 않을까 생각 된다.

우선 이번 파트에서는 aspnet_compiler.exe를 이용해서 컴파일 하는 부분을 다루고 다음 파트에서는 TFS 2008에서 추가된 BuildStep이라는 부분을 통해서 빌드 시에 해당 작업을 메시지로 뿌려주는 부분을 하고 마지막 파트에서는  빌드 후에 FTP 프로그램을 통해서 원격 서버에 Upload 하는 것에 대해 다루도록 하겠다.

우선, TFS Build를 고치기 전에 이 팀빌드가 어떤 순서로 진행되는 지를 알고 있어야 한다. 예전 포스트에서 다뤘듯이 빌드의 순서가 있다. 이 순서를 거스르지 않고 작업을 추가해 주어야 한다.
주요 빌드 순서를 보면 다음과 같다.

BeforeGet
AfterGet
AfterCompile
AfterDropBuild

출처 : MSDN

물론 이 외에도 많이 있지만 주로 변경해서 쓰게될 단계들은 위에서 두가지 이다. AfterCompile, AfterDropBuild 여기에 추가하자고 들면 AfterCompileSolution 이다.
AfterCompileSolution은 빌드에 여러 솔루션이 있다고 할 경우 하나의 솔루션이 빌드된 후에 동작하는 부분을 확장하는 것이다.
AfterCompile은 빌드에서 컴파일이 모두 완료되고 실행되는 것이다.
보통 웹사이트 프로젝트 라고 해도 웹사이트 프로젝트만 있지 않고 BSL이나 DAC 혹은 프레임워크를 담당하는 프로젝트 등이 같이 포함되어 있는 경우가 많다. 혹은 다른 프로젝트를 참조하고 있는 웹사이트 일 경우 이를 먼저 빌드하여서 dll을 참조해야 되는 경우에 AfterCompileSolution과 AfterCompile을 사용하면 된다.
AfterDropBuild는 빌드된 결과물들이 지정된 공유디렉토리에 복사된 후에 할 일을 지정하는 것이다.

이번 파트에서는 AfterCompile을 사용하였다 다음 파트에서 AfterDropBuild를 이용해서 Ftp를 통한 웹서버 파일들의 원격서버의 복사를 구현해 볼 예정이다..(어디까지나.. 언제 될지는.. 아무도. 엄)

웹사이트의 빌드를 하기 전에 웹사이트의 특징을 먼저 알고 가야하겠다. 웹사이트로 만들어진 프로젝트는 프로젝트 파일(.csproj)가 존재하지 않는다. 설정 파일은 web.config와 솔루션 파일(.sln)에 나뉘어서 저장되어 있다. 또한 가장 취약한 부분중에 하나 인 것이 있는데 그것은 바로 이것이 파일 시스템을 기반으로 하고 있다는 것이다. 그래서 그 폴더에 있는 파일은 자동적으로 프로젝트에 참여하게 되는 결과를 가져온다.
하지만 가장 큰 문제는 프로젝트 파일의 부재로 인해서 팀빌드에서 기본으로 빌드가 되지 않는다는 것이다. 웹사이트와 다른 C# 프로젝트를 팀빌드로 빌드할 경우 C# dll만 릴리즈 폴더에 덩그라니 남아 있다.

또한 웹사이트의 종류는 두 종류가 있다.
먼저 웹사이트로 만드는 프로젝트가 있다. 이는 VS에서 ‘새 웹사이트’ 만들기로 만들어 진다. 특징은 위에 말한 특징을 가지고 있다.
다른 프로젝트는 웹프로젝트로 만들어진 프로젝트 이다. 이것은 기본적으로 프로젝트 파일이 존재한다. 그러므로 팀빌드에서 인식할 수 있다. 그러나 이것도 단점이 있으니.. 기본으로 이 프로젝트를 팀빌드 해보면. 역시나 공유폴더에 dll만 복사해 놓는다. 컴파일 된 aspx 파일 및 기타 파일들은 복사하지 않는다.
웹프로젝트의 경우는 AfterDropBuild 에서 xcopy를 이용해서 컴파일 된 곳의 필요한 파일들을 복사하면 된다. 한가지 팁을 이야기 하면 xcopy 시에 옵션으로 제외할 파일 확장자 등을 파일로 만들어서 같이 형상관리에 포함시켜 놓으면 .cs 등을 제외할 수 있다.

다시 본론으로 와서  웹사이트 빌드를 위해서 할 일은 명령어 한 줄을 써주는 것으로 간단히 해결된다.(낚였다.. 라고 생각하시는 분들은.. 빙고?)

<Target Name=”AfterCompile”>
    <!– Build Web site–>
    <Exec Command=””c:\windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe” -v / -p $(SolutionRoot)\Website -d $(OutDir)\Website -f -c -fixednames -nologo -u” />
  </Target>

위 구문을 </Project> 바로 앞에 끼워 넣으면 된다. 위 구문은 Aspnet_compiler.exe를 통해서 웹사이트를 빌드하여 특정 폴더 $(OutDir)\Website에 복사하는 구문이다. 나머지 옵션은 명령어 도움말을 참조하기 바란다.
이렇게 빌드하게 되면 d:\Build라는 곳을 공유폴더로 지정해 놨다고 할 경우 d:\build\[빌드프로젝트명_순번]\Release\Website 에 보면 웹사이트가 있다. 이제 할 일은 AfterDropBuild를 써서 원격 서버에 FTP로 업로드 하면 되는 것이다.

aspnet_compile.exe는 닷넷 2.0에서 웹사이트를 컴파일 하기 위해 공식적으로 제공하는 툴이므로 대부분의 빌드머신에서 문제가 없을 것 같다.

 

[2008-06-24 updated]

afterCompile  부분을 추가했다. 이번 프로젝트 같은 경우는 웹사이트 +dll의 구조여서 컴파일 후에 dll프로젝트에서 컴파일된 dll들을 웹사이트로 복사해 주어야 한다.

 <Target Name=”AfterCompile”>
    <!– Build Web site–>
    <Exec Command=””c:\windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe” -v / -p $(SolutionRoot)\Website -d $(OutDir)\Website -f -c -fixednames -nologo -u” />
<Exec Command=”xcopy $(OutDir). $(OutDir)\Website\bin /C /Q /H /R /K /Y” />
  </Target>

위 구문을 보면 알겠지만 xcopy 구문이 추가 되었다. 핵심은 .(점) 이다 ㅎㅎ

참고문서
사용자 지정 가능한 Team Foundation Build 대상
사용자 지정 가능한 Team Foundation Build 속성
Team Foundation Build 작업
연습 : Visual Studio 설치 프로젝트를 빌드하도록 팀 빌드 구성

Written by moris Kim

2008/06/21 at 13:16

Lecture, Team Build에 게시됨

Tagged with , ,

%d 블로거가 이것을 좋아합니다: