为Azure系统生产环境做准备的全面指南
在开发和部署Azure系统时,为不同的应用环境(如测试、质量保证和生产环境)配置合适的构建和部署设置至关重要。以下将详细介绍如何添加构建配置、进行配置转换以及构建网站和云服务部署包。
1. 添加构建配置到解决方案
为了为每个应用环境实现配置,我们需要为解决方案和每个项目创建匹配的构建配置。以创建系统测试环境的新测试配置为例,步骤如下:
1. 右键单击解决方案,选择“属性”,然后在“属性”对话框中选择“配置属性”。
2. 点击“配置管理器”按钮打开“配置管理器”对话框,从“活动解决方案配置”选择器中选择“<新建…>”。
3. 输入新配置的名称,在“从以下配置复制设置”选择器中选择“发布”,这样我们将从发布配置复制设置,并且构建时不会包含调试符号。勾选“创建新的项目配置”,以便所有项目都能获得新配置;若不想所有项目都被新配置修改,也可取消勾选。
4. 在“属性”对话框中,将“配置”切换为“活动(测试)”,然后选择要构建的项目。例如,取消勾选“OrderSim模拟器”项目(因为它不会发布)和“CustomerPhoneApp”项目(由于平台限制,它会导致后续构建失败)。
5. 对所有环境重复上述步骤。
6. 点击“确定”保存更改,此时所有项目和解决方案都会应用这些更改。
7. 对创建的每个解决方案都可进行上述操作。
2. 网站配置转换
我们有一个
Web.config
文件,其中包含所有设置;还有
web.debug.config
和
web.release.config
文件,用于在发布为发布或调试模式时应用转换。转换仅在发布时应用,若不手动修改
.csproj
文件,正常构建时不会应用。
添加新构建配置后,为其添加转换的方法是:右键单击
Web.config
文件,选择“添加配置转换”。新的配置转换文件将出现,我们可以在其中为每个需要根据环境进行转换的设置应用配置。
3. 应用程序配置转换
发布时,云服务的
app.config
文件中需要转换的设置也需要配置转换。但目前没有内置支持来添加这些配置转换或在发布时执行它们,我们将手动修改云服务项目来实现。
手动添加转换文件到项目的步骤如下:
1. 在工作角色项目(而非云服务项目)中为每个环境添加新的应用程序配置文件(如
app.Test.config
、
app.QA.config
和
app.Prod.config
),这些文件不会像
Web.config
文件那样排列在主
app.config
文件下。
2. 若要调整这种排列,可右键单击项目,选择“卸载项目”,再右键单击项目(此时标记为不可用),选择“编辑ProjectName.csproj”,将
.csproj
XML加载到Visual Studio中。
3. 滚动查找配置添加的位置:
<ItemGroup>
<None Include="app.config" />
<None Include="app.Prod.config" />
<None Include="app.QA.config" />
<None Include="app.Test.config" />
<None Include="packages.config" />
<None Include="Performance\Microsoft.ServiceBus.MessagingPerformanceCounters.man" />
</ItemGroup>
-
修改每个转换文件,使其在每个
None元素中包含DependentUpon元素:
<ItemGroup>
<None Include="app.config" />
<None Include="app.Prod.config">
<DependentUpon>app.config</DependentUpon>
</None>
<None Include="app.QA.config">
<DependentUpon>app.config</DependentUpon>
</None>
<None Include="app.Test.config">
<DependentUpon>app.config</DependentUpon>
</None>
<None Include="packages.config" />
<None Include="Performance\Microsoft.ServiceBus.MessagingPerformanceCounters.man" />
</ItemGroup>
-
保存更改,右键单击项目,选择“重新加载项目”,此时文件将像
Web.config文件一样整齐排列。 -
复制一个
Web.config转换文件的内容,粘贴到每个app.config转换文件中,并填写每个环境所需的转换。 -
再次编辑
.csprojXML,添加一个额外的目标来转换app.config。找到以下行:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- 在其后粘贴以下XML块:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterCompile" Condition="exists('app.$(Configuration).config')">
<TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
<ItemGroup>
<AppConfigWithTargetPath Remove="app.config" />
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
-
与
Web.config文件不同,上述代码会在构建时转换app.config文件。这由Target Name="AfterCompile"行控制,确保转换在打包步骤之前进行,否则配置会在转换前被复制。
3. 云配置
处理好云服务的
app.config
文件后,接下来要处理
.cscfg
云配置。为每个环境添加配置的步骤如下:
1. 右键单击云服务项目中“角色”文件夹下的角色,选择“属性”。
2. 从“服务配置”下拉列表中选择“<管理…>”。
3. 选择“云”(因为所有环境都在云中,这是一个不错的起点),然后点击“创建副本”。
4. 选择新副本,点击“重命名”,将其重命名为“测试”、“质量保证”或“生产”(各创建一个)。
5. 依次选择每个设置,并为每个环境填写设置(若暂时不知道设置值,随时可以更改)。此时,我们会看到每个环境都有对应的
.cscfg
文件。
6. 构建时,为了一次性构建所有环境的包,避免为每个环境单独构建,我们需要修改
.ccproj
文件,将
TargetProfile
对象与构建配置关联起来。卸载云服务
.ccproj
文件,在XML中查找以下部分:
<!-- Items for the project -->
<ItemGroup>
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.Local.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.Cloud.cscfg" />
</ItemGroup>
- 在其上方插入以下属性组:
<!-- Tie TargetProfile to Configuration so we get the correct cscfg at build -->
<PropertyGroup>
<TargetProfile Condition=" '$(TargetProfile)' == '' ">$(Configuration)</TargetProfile>
</PropertyGroup>
4. 构建网站部署包
网站可以打包成ZIP文件,并使用MSDeploy部署到远程服务器。这些包可供系统管理员或开发人员将网站部署到适当的环境进行测试或正式上线。
4.1 手动将网站发布到文件系统
虽然手动在Visual Studio中构建包可能不是部署包的最佳选择,但它有助于检查网站内容(如HTML页面、样式表和脚本)是否完整,以及
Web.config
转换是否生效。手动创建包的步骤如下:
1. 右键单击Web项目,选择“发布”。
2. 点击“自定义”按钮,在“新建自定义配置文件”对话框中输入名称(如“TestPackage”),然后点击“确定”。
3. 从“发布方法”选择器中选择“文件系统”,在“目标位置”文本框中输入发布目录,然后点击“下一步”。
4. 更改“配置”设置,例如选择“发布前删除所有文件”,以便在发布前删除目标文件夹中的所有文件,其他设置保持默认(“发布期间预编译”选项可将网站编译到目标平台,使其启动更快,而不是由服务器进行即时编译;“排除App_Data中的文件”主要用于旧版ASP.NET应用程序)。
5. 点击“发布”将网站发布到文件系统。
6. 此时,我们会看到网站已发布到目标目录,可以验证所有文件是否存在,并确保转换已应用。
7. 还可以在IIS中创建一个指向发布目录的虚拟目录的网站,以检查网站是否可以正常运行。
4.2 在构建服务器上构建Web包
我们将创建一个构建定义,为销售解决方案中的所有网站(客户网站、管理网站和移动服务)为每个环境构建包。创建构建定义的步骤如下:
1. 在“团队资源管理器 - 主页”窗口中,点击“构建”按钮。
2. 点击“新建构建定义”链接,为我们的网站创建一个新的构建定义。
3. 在“常规”选项卡中更改“构建定义名称”值,默认值为解决方案名称。
4. 可根据需要更改“触发”设置,这里保持默认的“手动”设置。
5. “源”设置通常没问题,它会自动将源代码控制文件夹映射到构建代理文件夹。
6. 在“构建默认值”选项卡中,保持默认设置“将构建输出复制到服务器”,这会将输出复制到源代码控制中的“Drops”文件夹,并允许我们从Visual Studio Online门户下载构建的Drops ZIP文件。也可将其更改为复制到文件共享或其他源代码控制位置。
7. “过程”选项卡是我们需要进行大部分配置的地方。
8. 从“构建过程模板”选择器中选择“TfvcTemplate.12.xaml”模板(这些模板来自TFS项目根目录下自动创建的“BuildProcessTemplates”文件夹)。
9. 在“构建”部分的“项目”选择器中选择要构建的解决方案(可以从这里构建多个解决方案和项目)。
10. 点击“构建”部分“配置”文本框旁边的省略号按钮,在“配置”对话框中为每个环境添加配置。由于这些名称不会显示在选择器中,需要手动输入。
11. 将“输出位置”设置更改为“每个项目”,以便所有构建输出都放到每个项目的单独文件夹中。
12. 在“高级”部分的“MSBuild参数”框中输入以下参数,这将以项目和环境结构完整的方式将包部署到构建目标:
/p:DeployOnBuild=true;DeployMethod=Package
- 保持“保留策略”设置为默认值,可根据需要进行更改。
- 保存构建定义,它将显示在“构建”选项卡中。构建定义存储在构建服务器上,而不是解决方案中。
-
右键单击定义,选择“排队新构建”,然后在“排队构建”对话框中查看详细信息(此时可以修改参数,例如若不构建所有环境,可以插入
/p:Configuration=OurEnv来选择特定环境)。点击“排队新构建…”开始构建。 - 新构建将显示在“我的构建”列表顶部,显示其当前状态。
- 双击构建,将打开“构建请求”页面,我们可以在此查看构建概述,并通过点击顶部的“查看构建详细信息”链接查看构建详细信息。
- 构建完成后,结果将自动显示。若构建失败或有警告,会在“摘要”部分显示,点击页面顶部的“查看日志”链接可查看更多详细信息。构建成功时,我们会看到许多绿色对勾,显示每个配置的状态,“我的构建”列表中的构建状态也会更新。
- 点击“打开Drops文件夹”链接,将在默认浏览器中打开Visual Studio Online门户。
- 在这里,我们可以看到相同的概述和查看构建日志的选项,还可以点击“下载Drops为ZIP”按钮下载Drops包。
-
下载Drops包并查看文件夹结构,应该会看到每个环境有一个文件夹,每个网站在其下有一个文件夹,其中包含手动发布时看到的相同文件,还有一个带有
_Package后缀的网站文件夹,其中包含ZIP包以及支持部署的脚本和配置。
发布过程会提取可能需要更改的设置,并将其放在
SetParameters.xml
文件中,以便在部署期间轻松更改。这为我们选择如何打包网站提供了更大的灵活性,不仅可以有多个带转换的环境配置,还可以在发布前使用
SetParameters.xml
文件进一步修改配置设置。
5. 构建云服务部署包
通过Visual Studio将云服务发布到Azure时,会创建一个云服务包(
.cspkg
)和一个配套的云服务配置(
.cscfg
,与解决方案中的相同),并自动部署到Azure。我们可以在Visual Studio中手动创建包,也可以在构建服务器上以类似网站的方式创建包,这样就可以从门户或使用PowerShell在Visual Studio之外发布云服务。
5.1 手动构建云服务部署包
与手动发布网站类似,在开发机器上发布云服务不是最佳选择,但它有助于测试包是否按预期工作,以及云配置和应用程序配置转换是否正确。手动从Visual Studio创建云包的步骤如下:
1. 右键单击云服务项目(而非角色项目),选择“打包”。
2. 选择“服务配置”(使用哪个云服务配置)和“构建配置”(使用哪个.NET构建配置)的值。
3. 若要启用远程桌面,可以在此处进行设置。可以勾选“为所有角色启用远程桌面”选项,或点击“设置”配置用户凭据。
4. 也可以在此处启用远程调试器,但要注意,若不部署调试版本的代码,远程调试器将无法工作,并且通常不希望将调试代码部署到生产环境。
5. 点击“打包”,Visual Studio将打包云服务,并在项目的
/bin/Config/app.package
目录中打开Windows资源管理器窗口,我们可以看到
.cspkg
和
.cscfg
文件。
云服务包实际上就是ZIP文件,将文件扩展名更改为
.zip
即可解压查看其内容。其中应该有一个
.cssx
文件,将其扩展名也更改为
.zip
,可以解压该文件并查看目录结构。
5.2 在构建服务器上构建云服务部署包
在构建服务器上构建云服务包的方式与网站类似,但需要不同的MSBuild参数,并且需要一个额外的步骤,即使用构建后PowerShell脚本收集
app.package
文件夹,因为它在Drops阶段不会自动复制。配置“过程”选项卡的步骤与创建网站构建类似,但有以下不同:
1. 将“构建”部分的“输出位置”设置更改为“按配置”,以便控制文件复制到Drops目标的过程。
2. 若目标配置文件与构建配置关联,可使用以下MSBuild参数:
/t:Publish
- 若要手动选择配置文件而不关联目标,可使用以下参数:
/t:Publish /p:TargetProfile=Cloud
-
从TFS构建扩展CodePlex网站(http://tfsbuildextensions.codeplex.com/SourceControl/latest#Scripts/GatherItemsForDrop.ps1)复制
GatherItemsForDrop.ps1脚本。 -
将其保存到Visual Studio Online项目根目录下
BuildProcessTemplates目录中的一个名为Scripts的新文件夹中(每个项目都有一个)。 - 在脚本中找到以下部分:
# This script copies the basic file types for managed code projects.
# You can change this list to meet your needs.
$FileTypes = $("*.exe","*.dll","*.exe.config","*.pdb")
# Specify the sub-folders to include
$SourceSubFolders = $("*bin*","*obj*")
-
将其替换为以下内容,包括
.cspkg和.cscfg文件以及app.publish目录:
# This script copies the basic file types for managed code projects.
# You can change this list to meet your needs.
$FileTypes = $("*.cspkg","*.cscfg*")
#$FileTypes = $("*.exe","*.dll","*.exe.config","*.pdb","*.cspkg","*.cscfg*")
# Specify the sub-folders to include
$SourceSubFolders = $("*bin*","*obj*","*app.publish*")
- 若像示例中那样同时构建多个环境,需要修改复制步骤,使不同环境的包复制到单独的文件夹中,避免相互覆盖。
- 在脚本末尾找到以下部分:
# Copy the binaries
Write-Verbose "Ready to copy files."
if(-not $Disable)
{
foreach ($file in $files)
{
Copy $file $Env:TF_BUILD_BINARIESDIRECTORY
}
Write-Verbose "Files copied."
}
- 将其替换为以下代码:
# Copy the binaries
Write-Verbose "Ready to copy files."
if(-not $Disable)
{
foreach ($file in $files)
{
$targetFile = $Env:TF_BUILD_BINARIESDIRECTORY + $file.FullName.SubString($Env:TF_BUILD_SOURCESDIRECTORY.Length);
New-Item -ItemType File -Path $targetFile -Force;
Copy-Item $file.FullName -destination $targetFile
}
Write-Verbose "Files copied."
}
- 签入脚本。
- 返回构建定义,在“构建 | 高级”部分的“构建后脚本路径”中输入脚本的路径,例如:
$/AzureBakery.Sales/BuildProcessTemplates/Scripts/GatherItemsForDrop.ps1
通过以上步骤,我们可以为不同环境配置合适的构建和部署设置,确保Azure系统在各个环境中稳定运行。在实际操作中,可根据具体需求灵活调整配置和参数,以达到最佳的开发和部署效果。
为Azure系统生产环境做准备的全面指南(续)
6. 总结与注意事项
在完成上述一系列为Azure系统生产环境做准备的操作后,我们对整个流程有了更清晰的认识。以下是一些总结和需要注意的要点:
6.1 构建配置
- 一致性 :确保解决方案和项目的构建配置在各个环境中保持一致,避免因配置差异导致部署失败。
- 灵活性 :根据实际需求,灵活选择是否为所有项目创建新的配置,以及是否一次性构建所有环境的包。
6.2 配置转换
-
Web.config转换
:转换仅在发布时应用,若要在正常构建时应用,需手动修改
.csproj文件。 -
app.config转换
:通过修改
.csprojXML实现构建时的转换,注意转换要在打包步骤之前进行。
6.3 云配置
-
.cscfg文件
:为每个环境创建对应的
.cscfg文件,并确保设置值正确。 -
关联配置
:修改
.ccproj文件,将TargetProfile对象与构建配置关联,以便一次性构建所有环境的包。
6.4 部署包构建
- 网站部署包 :手动构建包可用于检查网站内容和转换效果,在构建服务器上构建包需进行详细的配置。
- 云服务部署包 :手动构建包可用于测试,在构建服务器上构建包需使用不同的MSBuild参数和额外的脚本。
7. 流程图展示
以下是为Azure系统生产环境做准备的主要流程的mermaid流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(添加构建配置):::process
B --> C(网站配置转换):::process
C --> D(应用程序配置转换):::process
D --> E(云配置):::process
E --> F{选择部署包类型}:::decision
F -->|网站| G(构建网站部署包):::process
F -->|云服务| H(构建云服务部署包):::process
G --> I([结束]):::startend
H --> I
8. 表格总结
为了更直观地对比不同配置和部署包的操作步骤,以下是一个表格总结:
| 操作类型 | 具体步骤 |
| ---- | ---- |
| 添加构建配置 | 1. 右键单击解决方案,选择“属性”,选“配置属性”
2. 点击“配置管理器”,选“<新建…>”
3. 输入新配置名称,选“发布”,选是否创建新项目配置
4. 切换配置,选择要构建的项目
5. 对所有环境重复
6. 点击“确定”保存 |
| 网站配置转换 | 1. 右键单击
Web.config
文件,选“添加配置转换”
2. 在新文件中应用配置 |
| 应用程序配置转换 | 1. 在工作角色项目中添加新配置文件
2. 修改
.csproj
文件,调整文件排列
3. 复制
Web.config
转换内容到
app.config
转换文件
4. 编辑
.csproj
XML,添加转换目标 |
| 云配置 | 1. 右键单击角色,选“属性”
2. 选“<管理…>”,选“云”,点击“创建副本”
3. 重命名副本
4. 填写每个环境的设置
5. 修改
.ccproj
文件,关联
TargetProfile
与构建配置 |
| 手动构建网站部署包 | 1. 右键单击Web项目,选“发布”
2. 点击“自定义”,输入名称
3. 选“文件系统”,输入目标目录
4. 更改配置设置,点击“发布” |
| 在构建服务器上构建网站部署包 | 1. 点击“构建”按钮,选“新建构建定义”
2. 更改构建定义名称和触发设置
3. 配置源、构建默认值和过程选项卡
4. 选择构建过程模板和解决方案
5. 添加环境配置,设置输出位置和MSBuild参数
6. 保存定义,排队新构建 |
| 手动构建云服务部署包 | 1. 右键单击云服务项目,选“打包”
2. 选择服务配置和构建配置
3. 可选启用远程桌面和调试器
4. 点击“打包” |
| 在构建服务器上构建云服务部署包 | 1. 设置输出位置为“按配置”
2. 选择MSBuild参数
3. 复制并修改
GatherItemsForDrop.ps1
脚本
4. 签入脚本,输入脚本路径 |
9. 常见问题及解决方法
在为Azure系统生产环境做准备的过程中,可能会遇到一些常见问题,以下是一些解决方法:
9.1 构建失败
- 原因 :可能是配置设置不正确、缺少依赖项或代码错误。
- 解决方法 :检查构建日志,查看错误信息,逐一排查问题。确保所有配置文件和设置值正确,安装所需的依赖项,修复代码错误。
9.2 配置转换未生效
-
原因
:可能是
.csproj文件未正确修改,或者转换文件路径错误。 -
解决方法
:仔细检查
.csproj文件中的配置,确保转换代码正确。检查转换文件的路径和名称是否与配置一致。
9.3 部署包缺少文件
- 原因 :可能是构建过程中某些文件未被正确包含,或者脚本配置错误。
- 解决方法 :检查构建配置和脚本,确保所有需要的文件都被包含在部署包中。查看脚本是否正确复制了文件。
10. 总结
通过本文的详细介绍,我们了解了为Azure系统生产环境做准备的全面流程,包括添加构建配置、进行配置转换、处理云配置以及构建网站和云服务部署包。每个步骤都有其重要性和注意事项,在实际操作中,需要根据具体需求进行灵活调整。同时,通过流程图和表格的总结,我们可以更清晰地把握整个流程,避免出现错误。希望这些内容对大家在Azure系统的开发和部署中有所帮助。
超级会员免费看
34

被折叠的 条评论
为什么被折叠?



