How to tell TFS to deploy multiple webapps containing in one solution?

前端 未结 4 939
温柔的废话
温柔的废话 2020-12-13 15:48

We have a single solution which contains one webapp project and some accompanying projects. Our TFS 2010 is building this solution every night and deploys the webapp to an I

相关标签:
4条回答
  • 2020-12-13 16:00

    One option would be to write this in a MSBuild task. In this way, you could support multiple IE unlimited webapp deployments. I have yet to port over our existing proj files that do this which is why I haven't ran into this issue. Anyway, here is an article that outlines that process:

    Article

    Hope that helps

    0 讨论(0)
  • 2020-12-13 16:02

    It took me 2 days on this problem. I found a freaking simple solution that works for me.

    I created 2 more configurations by using solution's Configuration Manager named DeployMvc1, DeployMvc2. Uncheck build for MVC2 project in DeployMvc1 and uncheck build for MVC1 project in DeployMvc2.

    Next, I created 2 build definitions DeployMvc1Build and DeployMvc2Build. The first one listens to MVC1 project with

    /p:DeployObBuild=true
    /p:Deploytarget=MsDeployPublish
    /p:Configuration=DeployMvc1
    /p:Platform="Any CPU"
    /p:MSDeployPublishMethod=WMSvc
    /p:MsDeployServiceUrl="https://{server1}:8172/MsDeploy.axd"
    /p:DeployIisAppPath="mvc1"
    /p:AllowUntrustedCertificate=True
    /p:Username="{username}"
    /p:Password={password}
    

    The second one listens to MVC2 project with

    /p:DeployObBuild=true
    /p:Deploytarget=MsDeployPublish
    /p:Configuration=DeployMvc2
    /p:Platform="Any CPU"
    /p:MSDeployPublishMethod=WMSvc
    /p:MsDeployServiceUrl="https://{server2}:8172/MsDeploy.axd"
    /p:DeployIisAppPath="mvc2"
    /p:AllowUntrustedCertificate=True
    /p:Username="{username}"
    /p:Password={password}
    

    Then my problem solved.

    0 讨论(0)
  • 2020-12-13 16:05

    As Vishal describes in the blog article you linked to yourself, all the MSBuild paramaters can be moved inside the csproj. This then means each project can have its own settings.

    I have a single solution with 6 projects, 4 class libraries and 2 web (WCF and MVC app). I followed the directive from Vishal's blog and simply moved all my MSBuild paramaters into each csproj file.. i.e.

      <PropertyGroup>
        <DeployOnBuild>True</DeployOnBuild>
        <DeployTarget>MsDeployPublish</DeployTarget>
        <CreatePackageOnPublish>True</CreatePackageOnPublish>
        <MSDeployPublishMethod>InProc</MSDeployPublishMethod>
        <MSDeployServiceUrl>localhost</MSDeployServiceUrl>
        <DeployIisAppPath>Dev.Auzzy\Web</DeployIisAppPath>
        <UserName>Username</UserName>
        <Password>Password</Password> 
        ...
    

    Make sure you then remove the paramaters from the build definition.

    TFS then deploys as expected.. each project into the correct folder specified as the home directory for each IIS site.

    Also its worth noting that you can not include the DeployIisAppPath in the PropertyGroup as above but use the project's properties page to specify this for each build configuration. (Right Click on each project > Properties > Package/Publish Web).

    0 讨论(0)
  • 2020-12-13 16:08

    I have a similar situation where I have a TFSBuild.proj build file and I generate a handful of installers and packages at the end of the build, targetting each of the deployment environments: Development, Test, Staging, and Production. Properties defined in @Matt Shepherd's answer can also be provided directly to the MSBuild task instead of writing them into the individual project files.

    <!-- After build -->
    <Target Name="AfterCompileSolution">
    
      <!-- Create SynchWorkflow deployment packages -->
      <CallTarget Targets="PackageSynchWorkflow" />
    
    </Target>
    
    <!-- Build deployment package for each target environment -->
    <ItemGroup>
      <BuildMode Include="Development"/>
      <BuildMode Include="Test"/>
      <BuildMode Include="Staging"/>
      <BuildMode Include="Production"/>
    </ItemGroup>
    <PropertyGroup>
      <PackageLocation>$(OutDir)</PackageLocation>
    </PropertyGroup>
    
    <Target Name="PackageSynchWorkflow" Outputs="%(BuildMode.Identity)">
      <Message Text="Building %(BuildMode.Identity)"/>
    
      <MSBuild Projects="$(SolutionRoot)\SynchWorkflow\SynchWorkflow.csproj"
               Properties="Platform=Any CPU;
                           Configuration=%(BuildMode.Identity);
                           DeployOnBuild=true;
                           DeployTarget=Package;
                           DeployIisAppPath=Default Web Site/SynchWorkflow;
                           OutputPath=$(PackageLocation)\SynchWorkflow.%(BuildMode.Identity)Package;"/>
    </Target>
    

    In this case it is possible to specify the DeployIisAppPath and that value will be written to the deployment package parameters file.

    0 讨论(0)
提交回复
热议问题