배포를 지원하는 빌드 정의 만들기Creating a Build Definition That Supports Deployment

Jason Leeby Jason Lee

PDF 다운로드Download PDF

Team Foundation Server (TFS) 2010에서 모든 종류의 빌드를 수행 하려면 팀 프로젝트 내에서 빌드 정의를 만들어야 합니다.If you want to perform any kind of build in Team Foundation Server (TFS) 2010, you need to create a build definition within your team project. 이 항목에서는 TFS에서 새 빌드 정의를 만드는 방법과 팀 빌드에서 빌드 프로세스의 일부로 웹 배포를 제어 하는 방법에 대해 설명 합니다.This topic describes how to create a new build definition in TFS and how to control web deployment as part of the build process in Team Build.

이 항목에서는 Fabrikam, i n c. 라는 가상 회사의 엔터프라이즈 배포 요구 사항을 기반으로 하는 일련의 자습서의 일부를 형성 합니다. 이 자습서 시리즈에서는 샘플 솔루션——을 사용 하 여ASP.NET MVC 3 응용 프로그램, Windows Communication Foundation (WCF) 서비스 및 데이터베이스 프로젝트를 비롯 한 현실적인 복잡성의 웹 응용 프로그램을 나타냅니다.This topic forms part of a series of tutorials based around the enterprise deployment requirements of a fictional company named Fabrikam, Inc. This tutorial series uses a sample solution—the Contact Manager solution—to represent a web application with a realistic level of complexity, including an ASP.NET MVC 3 application, a Windows Communication Foundation (WCF) service, and a database project.

이러한 자습서의 핵심에 나오는 배포 방법은 프로젝트 파일 이해에 설명 된 프로젝트 파일을 이해 하는 방법에 설명 되어 있습니다. 프로젝트 파일에 대 한 빌드 및 배포 프로세스는 모든—대상 환경에 적용 되는 빌드 명령을 포함 하는 두 개의 프로젝트 파일과 환경 특정 빌드 및 배포 설정을 포함 합니다.The deployment method at the heart of these tutorials is based on the split project file approach described in Understanding the Project File, in which the build and deployment process is controlled by two project files—one containing build instructions that apply to every destination environment, and one containing environment-specific build and deployment settings. 빌드 시 환경 관련 프로젝트 파일은 환경에 관계 없는 프로젝트 파일에 병합 되어 전체 빌드 명령 집합을 형성 합니다.At build time, the environment-specific project file is merged into the environment-agnostic project file to form a complete set of build instructions.

작업 개요Task Overview

빌드 정의는 TFS에서 팀 프로젝트에 대 한 빌드가 발생 하는 방법 및 시기를 제어 하는 메커니즘입니다.A build definition is the mechanism that controls how and when builds occur for team projects in TFS. 각 빌드 정의는 다음을 지정 합니다.Each build definition specifies:

  • Visual Studio 솔루션 파일 또는 MSBuild (사용자 지정 Microsoft Build Engine) 프로젝트 파일과 같이 빌드 하려는 작업입니다.The things you want to build, like Visual Studio solution files or custom Microsoft Build Engine (MSBuild) project files.
  • 수동 트리거, CI (지속적인 통합), 제어 된 체크 인 등 빌드를 수행 하는 시기를 결정 하는 조건입니다.The criteria that determine when a build should take place, like manual triggers, continuous integration (CI), or gated check-ins.
  • 팀 빌드에서 웹 패키지 및 데이터베이스 스크립트와 같은 배포 아티팩트를 포함 하 여 빌드 출력을 보내야 하는 위치입니다.The location to which Team Build should send build outputs, including deployment artifacts like web packages and database scripts.
  • 각 빌드를 유지 해야 하는 기간입니다.The amount of time that each build should be retained.
  • 빌드 프로세스의 다양 한 다른 매개 변수Various other parameters of the build process.

Note

빌드 정의에 대 한 자세한 내용은 빌드 프로세스 정의를 참조 하세요.For more information on build definitions, see Define Your Build Process.

이 항목에서는 개발자가 새 콘텐츠를 체크 인할 때 빌드가 트리거되도록 CI를 사용 하는 빌드 정의를 만드는 방법을 보여 줍니다.This topic will show you how to create a build definition that uses CI, so that a build is triggered when a developer checks in new content. 빌드가 성공 하면 빌드 서비스는 사용자 지정 프로젝트 파일을 실행 하 여 솔루션을 테스트 환경에 배포 합니다.If the build succeeds, the build service runs a custom project file to deploy the solution to a test environment.

빌드를 트리거할 때 이러한 작업이 수행 되어야 합니다.When you trigger a build, these actions need to happen:

  • 먼저 팀 빌드에서 솔루션을 빌드해야 합니다.First, Team Build should build the solution. 이 프로세스의 일부로 팀 빌드는 웹 게시 파이프라인 (WPP)을 호출 하 여 솔루션의 각 웹 응용 프로그램 프로젝트에 대 한 웹 배포 패키지를 생성 합니다.As part of this process, Team Build will invoke the Web Publishing Pipeline (WPP) to generate web deployment packages for each of the web application projects in the solution. 또한 팀 빌드는 솔루션과 연결 된 단위 테스트를 실행 합니다.Team Build will also run any unit tests associated with the solution.
  • 솔루션 빌드에 실패 하는 경우 팀 빌드에서 추가 작업을 수행 하지 않아야 합니다.If the solution build fails, Team Build should take no further action. 단위 테스트 오류는 빌드 실패로 처리 되어야 합니다.Unit test failures should be treated as a build failure.
  • 솔루션 빌드가 성공적으로 완료 되 면 팀 빌드에서 솔루션의 배포를 제어 하는 사용자 지정 프로젝트 파일을 실행 해야 합니다.If the solution build succeeds, Team Build should run the custom project file that controls the deployment of the solution. 이 프로세스의 일부로 팀 빌드는 인터넷 정보 서비스 (IIS) 웹 배포 도구 (웹 배포)를 호출 하 여 패키지 된 웹 응용 프로그램을 대상 웹 서버에 설치 하 고, VSDBCMD 유틸리티를 호출 하 여 데이터베이스 만들기를 실행 합니다. 대상 데이터베이스 서버에 대 한 스크립트As part of this process, Team Build will invoke the Internet Information Services (IIS) Web Deployment Tool (Web Deploy) to install the packaged web applications on the destination web servers, and it will invoke the VSDBCMD.exe utility to run database creation scripts on the destination database servers.

다음은이 프로세스를 보여 줍니다.This illustrates the process:

Contact Manager 샘플 솔루션에는 Msbuild 또는 팀 빌드에서 실행할 수 있는 사용자 지정 msbuild 프로젝트 파일인 Publish. proj가 포함 되어 있습니다.The Contact Manager sample solution includes a custom MSBuild project file, Publish.proj, that you can run from MSBuild or Team Build. 빌드 프로세스 이해에 설명 된 대로이 프로젝트 파일은 웹 패키지 및 데이터베이스를 대상 환경에 배포 하는 논리를 정의 합니다.As described in Understanding the Build Process, this project file defines the logic that deploys your web packages and databases to a target environment. 이 파일은 팀 빌드에서 실행 되는 경우 빌드 및 패키징 프로세스를 생략 하는 논리를 포함 하며, 실행 될 배포 작업만 남겨 둡니다.The file includes logic that omits the building and packaging process if it's running in Team Build, leaving just the deployment tasks to run. 이러한 방식으로 배포를 자동화 하는 경우 일반적으로 솔루션을 성공적으로 빌드하고 배포 프로세스를 시작 됩니다 전에 단위 테스트를 통과 하도록 하는 것입니다.This is because when you automate deployment in this way, you'll typically want to ensure that the solution builds successfully and passes any unit tests before the deployment process commences.

다음 섹션에서는 새 빌드 정의를 만들어이 프로세스를 구현 하는 방법을 설명 합니다.The next section explains how to implement this process by creating a new build definition.

Note

자동화 된—단일 프로세스에서 솔루션—을 빌드, 테스트 및 배포 하는이 절차는 테스트 환경에 배포 하는 데 가장 적합할 수 있습니다.This procedure—in which a single automated process builds, tests, and deploys a solution—is likely to be most suited to deployment to test environments. 스테이징 및 프로덕션 환경의 경우 테스트 환경에서 이미 확인 하 고 유효성을 검사 한 이전 빌드의 콘텐츠를 배포 하는 것이 훨씬 더 많을 것입니다.For staging and production environments you're a lot more likely to want to deploy content from a previous build that you've already verified and validated in a test environment. 이 방법은 다음 항목인 특정 빌드 배포항목에 설명 되어 있습니다.This approach is described in the next topic, Deploying a Specific Build.

이 절차를 수행 하는 사용자Who Performs This Procedure?

일반적으로 TFS 관리자는이 절차를 수행 합니다.Typically, a TFS administrator performs this procedure. 개발자 팀 리더가 TFS의 팀 프로젝트 컬렉션을 담당 하는 경우도 있습니다.In some cases, a developer team leader may take responsibility for the team project collection in TFS. 새 빌드 정의를 만들려면 솔루션을 포함 하는 팀 프로젝트 컬렉션에 대 한 Project Collection Build Administrators 그룹의 멤버 여야 합니다.In order to create a new build definition, you need to be a member of the Project Collection Build Administrators group for the team project collection that contains your solution.

CI 및 배포에 대 한 빌드 정의 만들기Create a Build Definition for CI and Deployment

다음 절차에서는 CI가 트리거하는 빌드 정의를 만드는 방법을 설명 합니다.The next procedure describes how to create a build definition that CI triggers. 빌드가 성공 하면 사용자 지정 MSBuild 프로젝트 파일에서 논리를 사용 하 여 솔루션이 배포 됩니다.If the build succeeds, the solution is deployed using the logic in a custom MSBuild project file.

CI 및 배포에 대 한 빌드 정의를 만들려면To create a build definition for CI and deployment

  1. Visual Studio 2010의 팀 탐색기 창에서 팀 프로젝트 노드를 확장 하 고 빌드를 마우스 오른쪽 단추로 클릭 한 다음 새 빌드 정의를 클릭 합니다.In Visual Studio 2010, in the Team Explorer window, expand your team project node, right-click Builds, and then click New Build Definition.

  2. 일반 탭에서 빌드 정의 이름 (예: deploytotest) 및 설명 (선택 사항)을 지정 합니다.On the General tab, give the build definition a name (for example, DeployToTest) and an optional description.

  3. 트리거 탭에서 새 빌드를 트리거할 기준을 선택 합니다.On the Trigger tab, select the criteria on which you want to trigger a new build. 예를 들어, 개발자가 새 코드를 체크 인할 때마다 솔루션을 빌드하고 테스트 환경에 배포 하려는 경우 연속 통합을 선택 합니다.For example, if you want to build the solution and deploy to the test environment every time a developer checks in new code, select Continuous Integration.

  4. 빌드 기본값 탭의 다음 저장 폴더에 빌드 출력 복사 상자에 저장 폴더의 UNC (범용 명명 규칙) 경로를 입력 합니다 (예: \TFSBUILD\Drops).On the Build Defaults tab, in the Copy build output to the following drop folder box, type the Universal Naming Convention (UNC) path of your drop folder (for example, \TFSBUILD\Drops).

    Note

    이 저장 위치는 구성 하는 보존 정책에 따라 여러 빌드를 저장 합니다.This drop location stores several builds, depending on the retention policy you configure. 특정 빌드에서 스테이징 또는 프로덕션 환경으로 배포 아티팩트를 게시 하려는 경우이 위치에서 찾을 수 있습니다.When you want to publish deployment artifacts from a specific build to a staging or production environment, this is where you'll find them.

  5. 프로세스 탭의 빌드 프로세스 파일 드롭다운 목록에서 defaulttemplate .xaml 을 선택 된 채로 둡니다.On the Process tab, in the Build process file dropdown list, leave DefaultTemplate.xaml selected. 모든 새 팀 프로젝트에 추가 되는 기본 빌드 프로세스 템플릿 중 하나입니다.This is one of the default build process templates that get added to all new team projects.

  6. 빌드 프로세스 매개 변수 테이블에서 빌드할 항목 행을 클릭 한 다음 줄임표 단추를 클릭 합니다.In the Build process parameters table, click in the Items to Build row, and then click the ellipsis button.

  7. 빌드할 항목 대화 상자에서 추가를 클릭 합니다.In the Items to Build dialog box, click Add.

  8. 솔루션 파일의 위치로 이동한 다음 확인을 클릭 합니다.Browse to the location of your solution file, and then click OK.

  9. 빌드할 항목 대화 상자에서 추가를 클릭 합니다.In the Items to Build dialog box, click Add.

  10. 다음 형식의 항목 드롭다운 목록에서 MSBuild 프로젝트 파일을 선택 합니다.In the Items of type dropdown list, select MSBuild Project files.

  11. 배포 프로세스를 제어 하는 사용자 지정 프로젝트 파일의 위치로 이동 하 여 파일을 선택한 다음 확인을 클릭 합니다.Browse to the location of the custom project file with which you control the deployment process, select the file, and then click OK.

  12. 이제 빌드할 항목 대화 상자에 두 개의 항목이 표시 됩니다.The Items to Build dialog box should now show two items. 확인을 클릭합니다.Click OK.

  13. 프로세스 탭의 빌드 프로세스 매개 변수 테이블에서 고급 섹션을 확장 합니다.On the Process tab, in the Build process parameters table, expand the Advanced section.

  14. Msbuild arguments 행에서 빌드할 항목 중 하나 에 필요한 MSBuild 명령줄 인수를 추가 합니다.In the MSBuild Arguments row, add any MSBuild command-line arguments that either of your items to build requires. Contact Manager 솔루션 시나리오에서는 다음과 같은 인수가 필요 합니다.In the Contact Manager solution scenario, these arguments are required:

    /p:DeployOnBuild=true;DeployTarget=Package;
       TargetEnvPropsFile=EnvConfig\Env-Dev.proj
    

  15. 이 예제에서:In this example:

    1. Contact Manager 솔루션을 빌드하는 경우 Deployonbuild = truedeploytarget = package 인수를 지정 해야 합니다.The DeployOnBuild=true and DeployTarget=package arguments are required when you build the Contact Manager solution. 이렇게 하면 웹 응용 프로그램 프로젝트 빌드 및 패키징에 설명 된 대로 각 웹 응용 프로그램 프로젝트를 빌드한 후 웹 배포 패키지를 만들도록 MSBuild에 지시 합니다.This instructs MSBuild to create web deployment packages after building each web application project, as described in Building and Packaging Web Application Projects.
    2. TargetEnvPropsFile 인수는 Publish. proj 파일을 빌드할 때 필요 합니다.The TargetEnvPropsFile argument is required when you build the Publish.proj file. 이 속성은 빌드 프로세스 이해에 설명 된 대로 환경 관련 구성 파일의 위치를 나타냅니다.This property indicates the location of the environment-specific configuration file, as described in Understanding the Build Process.
  16. 보존 정책 탭에서 필요에 따라 유지할 각 유형의 빌드 수를 구성 합니다.On the Retention Policy tab, configure how many builds of each type you want to retain as required.

  17. 저장을 클릭합니다.Click Save.

큐에 빌드 대기시키기Queue a Build

이 시점에서 하나 이상의 새 빌드 정의를 만들었습니다.At this point, you have created at least one new build definition. 이제 정의한 빌드 프로세스가 빌드 정의에 지정 된 트리거에 따라 실행 됩니다.The build process you defined will now run according to the triggers you specified in the build definition.

CI를 사용 하도록 빌드 정의를 구성한 경우 다음과 같은 두 가지 방법으로 빌드 정의를 테스트할 수 있습니다.If you've configured your build definition to use CI, you can test your build definition in two ways:

  • 팀 프로젝트에 대 한 일부 콘텐츠를 체크 인하고 자동 빌드를 트리거합니다.Check in some content to the team project to trigger an automatic build.
  • 수동으로 빌드를 큐에 대기 합니다.Queue a build manually.

수동으로 빌드를 큐에 대기 시키려면To queue a build manually

  1. 팀 탐색기 창에서 빌드 정의를 마우스 오른쪽 단추로 클릭 한 다음 새 빌드 큐 대기를 클릭 합니다.In the Team Explorer window, right-click the build definition, and then click Queue New Build.

  2. 빌드 큐 대기 대화 상자에서 빌드 속성을 검토 한 다음 를 클릭 합니다.In the Queue Build dialog box, review the build properties, and then click Queue.

수동으로 트리거 했는지 여부에 관계 없이 빌드의—진행률 및 결과를 검토 하려면 팀 탐색기 창에서 빌드 정의—를 자동으로 두 번 클릭 합니다.To review the progress and the outcome of a build—regardless of whether it was triggered manually or automatically—double-click the build definition in the Team Explorer window. 그러면 빌드 탐색기 탭이 열립니다.This will open a Build Explorer tab.

여기에서 실패 한 빌드의 문제를 해결할 수 있습니다.From here, you can troubleshoot failed builds. 개별 빌드를 두 번 클릭 하면 요약 정보를 보고 자세한 로그 파일을 클릭할 수 있습니다.If you double-click an individual build, you can view summary information and click through to detailed log files.

이 정보를 사용 하 여 실패 한 빌드의 문제를 해결 하 고 다른 빌드를 시도 하기 전에 문제를 해결할 수 있습니다.You can use this information to troubleshoot failed builds and address any problems before you attempt another build.

Note

배포 논리를 실행 하는 빌드는 대상 환경에 필요한 사용 권한을 빌드 서버에 부여 하기 전까지 실패할 수 있습니다.Builds that execute deployment logic are likely to fail until you have granted the build server any permissions required in the destination environment. 자세한 내용은 팀 빌드 배포에 대 한 사용 권한 구성을 참조 하세요.For more information, see Configuring Permissions for Team Build Deployment.

빌드 프로세스 모니터링Monitor the Build Process

TFS는 빌드 프로세스를 모니터링 하는 데 도움이 되는 광범위 한 기능을 제공 합니다.TFS provides a broad range of functionality to help you monitor the build process. 예를 들어, TFS는 빌드가 완료 되 면 작업 표시줄 알림 영역에 전자 메일을 보내거나 경고를 표시할 수 있습니다.For example, TFS can send you an email or display alerts in your taskbar notification area when a build has completed. 자세한 내용은 빌드 실행 및 모니터링을 참조 하세요.For more information, see Run and Monitor Builds.

결론Conclusion

이 항목에서는 TFS에서 빌드 정의를 만드는 방법에 대해 설명 했습니다.This topic described how to create a build definition in TFS. 빌드 정의는 CI에 대해 구성 되므로 개발자가 팀 프로젝트에 대 한 콘텐츠를 체크 인할 때마다 빌드 프로세스가 실행 됩니다.The build definition is configured for CI, so the build process runs whenever a developer checks in content to the team project. 빌드 정의는 사용자 지정 MSBuild 프로젝트 파일을 실행 하 여 웹 패키지와 데이터베이스 스크립트를 대상 서버 환경에 배포 합니다.The build definition executes a custom MSBuild project file to deploy web packages and database scripts to a target server environment.

자동화 된 배포가 빌드 프로세스의 일부로 성공 하려면 대상 웹 서버 및 대상 데이터베이스 서버의 빌드 서비스 계정에 적절 한 권한을 부여 해야 합니다.In order for an automated deployment to succeed as part of a build process, you'll need to grant appropriate permissions to the build service account on the target web servers and the target database server. 이 자습서의 최종 항목인 팀 빌드 배포에 대 한 사용 권한 구성에서는 팀 빌드 서버에서 자동화 된 배포에 필요한 사용 권한을 식별 하 고 구성 하는 방법을 설명 합니다.The final topic in this tutorial, Configuring Permissions for Team Build Deployment, describes how to identify and configure the permissions required for automated deployment from a Team Build server.

추가 참고 자료Further Reading

빌드 정의를 만드는 방법에 대 한 자세한 내용은 기본 빌드 정의 만들기빌드 프로세스 정의를 참조 하세요.For more information on creating build definitions, see Create a Basic Build Definition and Define Your Build Process. 빌드를 큐에 추가 하는 방법에 대 한 자세한 지침은 빌드 큐 대기를 참조 하세요.For more guidance on queuing builds, see Queue a Build.