특정 빌드 배포Deploying a Specific Build

Jason Leeby Jason Lee

PDF 다운로드Download PDF

이 항목에서는 특정 이전 빌드의 웹 패키지 및 데이터베이스 스크립트를 스테이징 또는 프로덕션 환경과 같은 새 대상에 배포 하는 방법에 대해 설명 합니다.This topic describes how to deploy web packages and database scripts from a specific previous build to a new destination, like a staging or production environment.

이 항목에서는 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

지금까지이 자습서의 항목은 단일 단계 또는 자동화 된 프로세스의 일부로 웹 응용 프로그램 및 데이터베이스를 빌드, 패키징 및 배포 하는 방법에 중점을 두었습니다.Until now, the topics in this tutorial set have focused on how to build, package, and deploy web applications and databases as part of a single-step or automated process. 그러나 몇 가지 일반적인 시나리오에서는 저장 폴더의 빌드 목록에서 배포 하는 리소스를 선택 하는 것이 좋습니다.However, in some common scenarios, you'll want to select the resources that you deploy from a list of builds in a drop folder. 즉, 최신 빌드는 배포 하려는 빌드가 아닐 수 있습니다.In other words, the latest build may not be the build you want to deploy.

이전 항목에서 설명한 CI (지속적인 통합) 시나리오를 고려 하 여 배포를 지 원하는 빌드 정의를 만듭니다.Consider the continuous integration (CI) scenario described in the previous topic, Creating a Build Definition That Supports Deployment. Team Foundation Server (TFS) 2010에서 빌드 정의를 만들었습니다.You've created a build definition in Team Foundation Server (TFS) 2010. 개발자가 코드를 TFS에 체크 인할 때마다 팀 빌드는 코드를 빌드하고, 웹 패키지와 데이터베이스 스크립트를 빌드 프로세스의 일부로 만들고, 단위 테스트를 실행 하 고, 리소스를 테스트 환경에 배포 합니다.Every time a developer checks code into TFS, Team Build will build your code, create web packages and database scripts as part of the build process, run any unit tests, and deploy your resources to a test environment. 빌드 정의를 만들 때 구성한 보존 정책에 따라 TFS는 특정 개수의 이전 빌드를 유지 합니다.Depending on the retention policy you configured when you created the build definition, TFS will retain a certain number of previous builds.

이제 테스트 환경에서 이러한 빌드 중 하나에 대해 확인 및 유효성 검사 테스트를 수행 했으며 스테이징 환경에 응용 프로그램을 배포할 준비가 되었다고 가정 합니다.Now, suppose you've performed verification and validation testing against one of these builds in your test environment, and you're ready to deploy your application to a staging environment. 한편 개발자는 새 코드를 체크 인할 수 있습니다.In the meantime, developers may have checked in new code. 솔루션을 다시 빌드하고 스테이징 환경에 배포 하지 않고 최신 빌드를 스테이징 환경에 배포 하지 않으려는 경우You don't want to rebuild the solution and deploy to the staging environment, and you don't want to deploy the latest build to the staging environment. 대신 테스트 서버에서 확인 하 고 유효성을 검사 한 특정 빌드를 배포 하려고 합니다.Instead, you want to deploy the specific build that you've verified and validated on the test servers.

이를 위해서는 특정 빌드에서 생성 된 웹 패키지 및 데이터베이스 스크립트를 찾을 수 있는 위치 (MSBuild)를 Microsoft Build Engine (MSBuild)에 알려야 합니다.To accomplish this, you need to tell the Microsoft Build Engine (MSBuild) where to find the web packages and database scripts that a specific build generated.

OutputRoot 속성 재정의Overriding the OutputRoot Property

샘플 솔루션에서 게시 Proj 파일은 outputroot라는 속성을 선언 합니다.In the sample solution, the Publish.proj file declares a property named OutputRoot. 이름에서 알 수 있듯이이 폴더는 빌드 프로세스에서 생성 하는 모든 항목을 포함 하는 루트 폴더입니다.As the name suggests, this is the root folder that contains everything that the build process generates. Publish. proj 파일에서 outputroot 속성은 모든 배포 리소스의 루트 위치를 참조 하는 것을 볼 수 있습니다.In the Publish.proj file, you can see that the OutputRoot property refers to the root location for all deployment resources.

Note

Outputroot 는 일반적으로 사용 되는 속성 이름입니다.OutputRoot is a commonly used property name. 시각적 C# 개체 및 Visual Basic 프로젝트 파일은이 속성을 선언 하 여 모든 빌드 출력의 루트 위치를 저장 합니다.Visual C# and Visual Basic project files also declare this property to store the root location for all build outputs.

<PropertyGroup>
  <!--This is where the .deploymanifest file will be written to during a build-->    
  <_DbDeployManifestPath>
    $(OutputRoot)ContactManager.Database.deploymanifest
  </_DbDeployManifestPath>    
  
  <!-- The folder where the .zip and .cmd file will be located for 
                ContactManager.Mvc Web project -->
  <_ContactManagerDest>
    $(OutputRoot)_PublishedWebsites\ContactManager.Mvc_Package\
  </_ContactManagerDest>
  
  <!-- The folder where the .zip and .cmd file will be located for 
                ContactManager.Service Web project -->
   <_ContactManagerSvcDest>
    $(OutputRoot)_PublishedWebsites\ContactManager.Service_Package\
  </_ContactManagerSvcDest>
  
  <!-- ... -->
</PropertyGroup>

프로젝트 파일에서 이전 TFS 빌드의——출력과 같은 다른 위치에서 웹 패키지 및 데이터베이스 스크립트를 배포 하려는 경우에는 outputroot 속성을 재정의 하기만 하면 됩니다.If you want your project file to deploy web packages and database scripts from a different location—like the outputs of a previous TFS build—you simply need to override the OutputRoot property. 속성 값을 팀 빌드 서버의 관련 빌드 폴더로 설정 해야 합니다.You should set the property value to the relevant build folder on the Team Build server. 명령줄에서 MSBuild를 실행 하는 경우 명령줄 인수로 Outputroot 의 값을 지정할 수 있습니다.If you were running MSBuild from the command line, you could specify a value for OutputRoot as a command-line argument:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj 
  /p:OutputRoot=\\TFSBUILD\Drops\DeployToTest\DeployToTest_20120228.3\

그러나 실제로 빌드 출력을 사용 하지 않으려는 경우에는 솔루션 을 빌드하—는 시점이 없는 빌드 대상을 건너뛸 수도 있습니다.In practice, however, you'd also want to skip the Build target—there's no point in building your solution if you don't plan to use the build outputs. 이렇게 하려면 명령줄에서 실행할 대상을 지정 합니다.You could do this by specifying the targets you want to execute from the command line:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj 
  /p:OutputRoot=\\TFSBUILD\Drops\DeployToTest\DeployToTest_20120228.3\
  /target:GatherPackagesForPublishing;PublishDBPackages;PublishWebPackages

그러나 대부분의 경우에는 배포 논리를 TFS 빌드 정의로 빌드해야 합니다.However, in most cases, you'll want to build your deployment logic into a TFS build definition. 이렇게 하면 큐 빌드 권한이 있는 사용자가 TFS 서버에 대 한 연결을 사용 하 여 Visual Studio 설치에서 배포를 트리거할 수 있습니다.This enables users with the Queue builds permission to trigger the deployment from any Visual Studio installation with a connection to the TFS server.

특정 빌드를 배포 하기 위한 빌드 정의 만들기Creating a Build Definition to Deploy Specific Builds

다음 절차에서는 사용자가 단일 명령을 사용 하 여 스테이징 환경에 대 한 배포를 트리거할 수 있도록 하는 빌드 정의를 만드는 방법을 설명 합니다.The next procedure describes how to create a build definition that enables users to trigger deployments to a staging environment with a single command.

이 경우 빌드 정의에서 사용자 지정 프로젝트 파일의 배포 논리를 실행—하는 데 필요한 모든 항목을 실제로 빌드하지는 않습니다.In this case, you don't want the build definition to actually build anything—you just want it to execute the deployment logic in your custom project file. Publish. proj 파일에는 팀 빌드에서 파일이 실행 중인 경우 빌드 대상을 건너뛰는 조건부 논리가 포함 됩니다.The Publish.proj file includes conditional logic that skips the Build target if the file is running in Team Build. 팀 빌드에서 프로젝트 파일을 실행 하는 경우 자동으로 true 로 설정 되는 기본 제공 BuildingInTeamBuild 속성을 평가 하 여이를 수행 합니다.It does this by evaluating the built-in BuildingInTeamBuild property, which is automatically set to true if you run your project file in Team Build. 따라서 빌드 프로세스를 건너뛰고 단순히 프로젝트 파일을 실행 하 여 기존 빌드를 배포할 수 있습니다.As a result, you can skip the build process and simply run the project file to deploy an existing build.

배포를 수동으로 트리거하는 빌드 정의를 만들려면To create a build definition to trigger deployment manually

  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. 일반 탭에서 빌드 정의 이름 (예: deploytostaging) 및 설명 (선택 사항)을 지정 합니다.On the General tab, give the build definition a name (for example, DeployToStaging) and an optional description.

  3. 트리거 탭에서 수동-체크 인이 새 빌드를 트리거하지 않습니다.를 선택 합니다.On the Trigger tab, select Manual – Check-ins do not trigger a new build.

  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).

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

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

  10. 빌드할 항목 대화 상자에서 확인을 클릭 합니다.In the Items to Build dialog box, click OK.

  11. 빌드 프로세스 매개 변수 테이블에서 고급 섹션을 확장 합니다.In the Build process parameters table, expand the Advanced section.

  12. MSBuild Arguments 행에서 환경 관련 프로젝트 파일의 위치를 지정 하 고 빌드 폴더의 위치에 대 한 자리 표시자를 추가 합니다.In the MSBuild Arguments row, specify the location of your environment-specific project file and add a placeholder for the location of your build folder:

    /p:TargetEnvPropsFile=EnvConfig\Env-Stage.proj;
    OutputRoot=PLACEHOLDER
    

    Note

    빌드를 큐에 대기 시킬 때마다 Outputroot 값을 재정의 해야 합니다.You'll need to override the OutputRoot value every time you queue a build. 이에 대해서는 다음 절차에서 설명 합니다.This is covered in the next procedure.

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

빌드를 트리거할 때 배포 하려는 빌드를 가리키도록 Outputroot 속성을 업데이트 해야 합니다.When you trigger a build, you need to update the OutputRoot property to point to the build you want to deploy.

빌드 정의에서 특정 빌드를 배포 하려면To deploy a specific build from a build definition

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

  2. 큐 빌드 대화 상자의 매개 변수 탭에서 고급 섹션을 확장 합니다.In the Queue Build dialog box, on the Parameters tab, expand the Advanced section.

  3. MSBuild Arguments 행에서 outputroot 속성의 값을 빌드 폴더의 위치로 바꿉니다.In the MSBuild Arguments row, replace the value of the OutputRoot property with the location of your build folder. 다음은 그 예입니다.For example:

    /p:TargetEnvPropsFile=EnvConfig\Env-Stage.proj;
       OutputRoot=\\TFSBUILD\Drops\DeployToTest\DeployToTest_20120228.3\
    

    Note

    빌드 폴더 경로 끝에 후행 슬래시를 포함 해야 합니다.Be sure to include a trailing slash at the end of the path to your build folder.

  4. 를 클릭 합니다.Click Queue.

빌드를 큐에 대기 시 프로젝트 파일은 Outputroot 속성에 지정한 빌드 저장 폴더에서 데이터베이스 스크립트와 웹 패키지를 배포 합니다.When you queue the build, the project file will deploy the database scripts and web packages from the build drop folder you specified in the OutputRoot property.

결론Conclusion

이 항목에서는 분할 프로젝트 파일 배포 모델을 사용 하 여 특정 이전 빌드에서 웹 패키지 및 데이터베이스 스크립트와 같은 배포 리소스를 게시 하는 방법에 대해 설명 했습니다.This topic described how to publish deployment resources, like web packages and database scripts, from a specific previous build using the split project file deployment model. Outputroot 속성을 재정의 하는 방법 및 배포 논리를 TFS 빌드 정의에 통합 하는 방법에 대해 설명 했습니다.It explained how to override the OutputRoot property and how to incorporate the deployment logic into a TFS build definition.

추가 참고 자료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.