ice*_*ava 5 msbuild build-automation azure
我们有一个解决方案,其中包含一个Web应用程序项目,该项目旨在作为Windows Azure云服务中的Web角色.它还有一个仅针对云服务的云服务项目(生产槽)
SlnRoot\WebApp1\WebApp1.csproj SlnRoot\CloudDeployment\CloudServiceName\CloudServiceName.ccproj
从Visual Studio发布(部署)非常容易; 只需从云项目的上下文菜单中选择"发布..."选项,然后点击"发布",其中包含所有预配置的云服务设置.
现在我们正在进一步尝试自动化这个过程,所以我在没有Visual Studio的帮助下从命令行和原始MSBuild尝试它.
.nuget\nuget.exe restore
msbuild .\CloudDeployment\CloudServiceName\CloudServiceName.ccproj /t:Publish /p:PublishDir=..\..\pubout\ /fl1 /v:d
Run Code Online (Sandbox Code Playgroud)
但看来,Publish目标实际上是Visual Studio中的Package选项,只生成必须手动上传到Windows Azure门户的cspkg文件.当然,这不行.是否有一个单独的目标来指定执行Visual Studio如此轻松执行的附加步骤(部署不是它;没有这样的目标)?
谢谢你的建议.然而,我所知道的差距的真正答案 - MSBuild和PowerShell如何在一起凝聚在一起 - 来自我的同事,他制作了一个自定义的MSBuild proj文件,让它们一起工作.一个基本的样本跟随评论
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Declare configuration properties for this deployment -->
<!-- This custom.proj file is in a sub-directory in solution root -->
<PropertyGroup>
<SolutionDir Condition=" '$(SolutionDir)'=='' ">$(MSBuildThisFileDirectory)..\</SolutionDir>
<SolutionPath Condition=" '$(SolutionPath)'=='' ">$(MSBuildThisFileDirectory)..\CloudService.sln</SolutionPath>
<OutDir Condition=" '$(OutDir)'=='' ">$(MSBuildThisFileDirectory)\Output\Binaries\</OutDir>
<PackageOutDir>$(MSBuildThisFileDirectory)Output\Packages\</PackageOutDir>
<TargetCloudService>targetcloudservice</TargetCloudService>
<DeployConfig>BuildConfig</DeployConfig>
<PubSettingsPath>$(MSBuildThisFileDirectory)subscription.publishsettings</PubSettingsPath>
<SubscriptionName>subscription name</SubscriptionName>
<StorageAccount>targetstorageaccount</StorageAccount>
</PropertyGroup>
<!-- Target to restore all Nuget packages on a clean repo pull. -->
<Target Name="RestorePackages">
<Message Text="Restoring nuget..."/>
<Exec Command=""$(SolutionDir).nuget\NuGet.exe" restore "$(SolutionPath)"" />
</Target>
<!--
Target to package the indicated cloud project,
which will build the referenced web role project first with desired build config.
-->
<Target Name="PackageCloud" DependsOnTargets="RestorePackages">
<Message Text="Creating package for cloud deployment ..."/>
<MSBuild
Projects="$(MSBuildThisFileDirectory)..\CloudDeployment\$(TargetCloudService)\$(TargetCloudService).ccproj"
Properties="OutputPath=$(PackageOutDir)$(TargetCloudService)\;Configuration=$(DeployConfig);"
Targets="Publish"/>
</Target>
<!--
Target to deploy the package produced by the dependency target.
This is the part that launches PowerShell to execute custom ps1 script
with all the cloud service parameters (MSBuild variables above)
and cspkg package for deployment.
The custom script uses the Azure module cmdlets to make service checks and publish.
-->
<Target Name="DeployCloud" DependsOnTargets="PackageCloud">
<Message Text="Deploying package to cloud service ..."/>
<Exec WorkingDirectory="$(MSBuildThisFileDirectory)"
Command="$(windir)\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -f $(MSBuildThisFileDirectory)PublishCloudService.ps1 -packageLocation "$(PackageOutDir)$(TargetCloudService)\app.publish\$(TargetCloudService).cspkg" -cloudConfigLocation "$(PackageOutDir)$(TargetCloudService)\app.publish\ServiceConfiguration.Cloud.cscfg" -subscriptionDataFile "$(PubSettingsPath)" -selectedsubscription "$(SubscriptionName)" -servicename $(TargetCloudService) -storageAccountName $(StorageAccount)" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
因此,一次性部署调用就像是
msbuild.exe custom.proj /t:DeployCloud
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5246 次 |
| 最近记录: |