我已经查看了我在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>
答案 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>