我有一个Windows Azure站点,它部署到两个单独的托管服务。一个用于测试,一个用于生产。当我们准备推向生产时,我们在生产服务中启动暂存部署,推送到那里,然后进行VIP交换。一切都好。
问题是,现在我们想要从XS Web实例升级,但在测试部署上花费额外资金并没有多大意义。有没有办法使用XS实例进行测试,然后说中型实例用于生产?我知道我可以更改每个服务配置的实例数,但我只能更改所有配置的实例大小。
我正在考虑将XS留在配置中,然后在部署到生产之前记住将其切换到中等。我有什么理由不这样做吗?还有更好的方法吗?
干杯!
答案 0 :(得分:24)
有几种方法可以做到这一点...更简单的方法是对CCPROJ文件进行一些“黑客攻击”:
1)为与配置名称(Release / Debug / QA / UAT / etc)匹配的每个环境创建CSDEF文件的克隆: ServiceDefinition.Release.csdef,ServiceDefinition.Debug.csdef等。
2)使用记事本编辑器
手动将这些文件添加到CCPROJ文件中3)定义一个Pre-Build Event命令,将ServiceDefinition。$(ConfigurationName).csdef复制到ServiceDefintion.csdef
瞧,现在您的ServiceDefintion将适应您正在使用的任何配置。如果您想获得更多信息或查看更多详细信息,请查看此博客条目,该条目可帮助您统一切换各种设置
编辑:这是一个有效的配置。请注意,其他文件包含在“无”类型而不是ServiceDefinition中,以避免多重定义错误。
<ItemGroup>
<ServiceConfiguration Include="ServiceConfiguration.Local.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.Development 1.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.Development 2.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.Local Dev 1.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.Local Dev 2.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.QA 1.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.QA 2.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.Pre-Production 1.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.Production.cscfg" />
<ServiceDefinition Include="ServiceDefinition.csdef" />
<None Include="ServiceDefinition.Local.csdef" />
<None Include="ServiceDefinition.Development 1.csdef" />
<None Include="ServiceDefinition.Development 2.csdef" />
<None Include="ServiceDefinition.Local Dev 1.csdef" />
<None Include="ServiceDefinition.Local Dev 2.csdef" />
<None Include="ServiceDefinition.QA 1.csdef" />
<None Include="ServiceDefinition.QA 2.csdef" />
<None Include="ServiceDefinition.Pre-Production 1.csdef" />
<None Include="ServiceDefinition.Production.csdef" />
</ItemGroup>
答案 1 :(得分:14)
您可以使用Web发布TransformXml
MSBuild任务仅转换所需的ServiceDefinition部分(就像您现在可以使用Web.Config一样)。
ServiceDefinition.[BuildConfigName].csdef
文件(您可能需要在文件资源管理器中执行此操作) <ServiceDefinition name="Cloud.JobsWorker"
xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"
xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"
schemaVersion="2013-10.2.2">
<ServiceDefinition Include="ServiceDefinition.csdef" />
<None Include="ServiceDefinition.Release.csdef" />
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<PropertyGroup>
<ServiceDefinitionTransform>ServiceDefinition.$(Configuration).csdef</ServiceDefinitionTransform>
</PropertyGroup>
<Target Name="TransformServiceDefinition" BeforeTargets="ResolveServiceDefinition" Condition="exists('$(ServiceDefinitionTransform)')">
<!-- Generate transformed service config in the intermediate directory -->
<TransformXml Source="@(ServiceDefinition)" Destination="$(IntermediateOutputPath)%(Filename)%(Extension)" Transform="$(ServiceDefinitionTransform)" />
<!--Force build process to use the transformed configuration file from now on.-->
<ItemGroup>
<ServiceDefinition Remove="ServiceDefinition.csdef" />
<ServiceDefinition Include="$(IntermediateOutputPath)ServiceDefinition.csdef" />
</ItemGroup>
</Target>
当您打包或发布您的云应用时,您的csdef应根据您正在使用的构建配置进行转换。
这可以从这里改编:http://blogs.staykov.net/2011/06/windows-azure-configuration-settings.html
答案 2 :(得分:2)
使用转换为David Faivre建议更加清晰,并且在添加单个属性后无需更新所有文件的开销。
这是用于更改vm大小的转换xml:
<?xml version="1.0"?>
<ServiceDefinition name="CloudServiceName"
xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6"
xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<WorkerRole name="WorkerRoleName.Role" vmsize="Medium" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</ServiceDefinition>
答案 3 :(得分:1)
VM大小在ServiceDefinition.csdef文件中处理,这是您无法在运行或部署时编辑的。您需要更改.csdef中的设置,重新打包您的解决方案,然后重新部署。
一种解决方案可能是设置多个Windows Azure部署项目。一个项目将是您的“测试”项目,其中.csdef配置为使用XS。另一个项目是使用更大实例的“生产”项目。这将允许您使用标准的Windows Azure / Visual Studio工具来管理项目 - 这可能会很好,具体取决于您的过程。
答案 4 :(得分:0)
David Faivre提出good solution。我几点评论:
<TransformXml Source="@(ServiceDefinition)" Destination="ServiceDefinition.csdef.transformed" Transform="$(ServiceDefinitionTransform)" />
$(Configuration)
变量对应于构建配置(调试,发布等)。如果要进行特定于配置文件的转换(对应于ServiceConfiguration..cscfg),则需要使用$(TargetProfile)
变量: <ServiceDefinitionTransform>ServiceDefinition.$(TargetProfile).csdef</ServiceDefinitionTransform>