如何将文件复制到主目录并进行部署

时间:2014-05-01 16:18:41

标签: asp.net teamcity msdeploy webdeploy

我已经查看了我在StackOverflow和各种Google链接上找到的所有问题,但没有找到。

我们有3个不同的服务器,需要部署最后3个版本中的一个。这就是我在本地构建级别上处理它的方式:

<PostBuildEvent>
  start xcopy /Y /Q "$(TargetDir)EncompassSDKDlls\$(ConfigurationName)\*.*" "$(TargetDir)"
</PostBuildEvent>

这很有效。但是,当它尝试进行部署时,它会在此之前运行它。我确实尝试过做一些像MSDeploy Extra Files这样的事情,但这似乎并没有复制部署中的文件,只是复制了bin目录中的原始文件。

这是我上次尝试的内容:

<PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
        CustomCollectFiles;
        $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
    <CopyAllFilesToSingleFolderForMsdeployDependsOn>
        CustomCollectFiles;
        $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
    <ItemGroup>
        <_CustomFiles Include="Dlls\$(ConfigurationName)\*" />

        <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>(Filename)%(Extension)</DestinationRelativePath>
        </FilesForPackagingFromProject>
    </ItemGroup>
</Target>
<PropertyGroup>

2 个答案:

答案 0 :(得分:0)

我认为您可以通过在构建步骤中使用TeamCity中的%build.number%参数来获得一些工作。

您提到需要3个不同的服务器,这些服务器需要部署最后3个版本之一。

我们已经使用%build.number%作为我们打包步骤的参数,这将生成一个部署.zip文件,其中包含内置编号。

考虑如下的包装构建步骤:

Build Step:
Runner type: MSBuild
Step Name: Package
Build file path: <path to ASP.NET project file >.csproj
Command line parameters:
/T:Package 
/P:configuration =BUILD 
/P:DeployServiceUrl=http://build.server:8091 
/p:DeployIisAppPath="IIS_App_Name";PackageLocation ="c:\Packages\%build.number%\Iis_App_Name_%build.number%.zip" 
/p:_PackageTempDir=c:\Packages\Temp

PackageLocation参数包含内部版本号 - 因此构建100 - 102的输出类似于以下内容:

c:\Packages\100\Iis_App_Name_100.zip
c:\Packages\101\Iis_App_Name_101.zip
c:\Packages\102\Iis_App_Name_102.zip

然后,您可以使用powershell脚本,该脚本将build.number作为参数,计算最后三个构建,并将它们部署到您需要的任何服务器。

作为示例,以下TeamCity构建步骤将部署最新版本:

Build Step: 
Runner type: MSBuild
Run : Custom Script
c:\Packages\100\Iis_App_Name_%build.number%.deploy.cmd /Y

希望这有帮助。

答案 1 :(得分:0)

让它发挥作用。副本确实需要在post build事件中,但FilesForPackagingProject没有所有正确的设置来识别新文件。我想发布这个包装它可以帮助将来的任何人:

<ItemGroup>
  <_CustomFiles Include="EncompassSDKDlls\$(ConfigurationName)\*" />
  <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
    <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
  </FilesForPackagingFromProject>
</ItemGroup>