我们正在将计划的Web作业部署到Azure。 Web作业是使用Visual Studio 2015开发的。' settings.job'文件包含计划定义。但是,我们希望根据我们是否部署到“开发”来使用不同的计划。环境或分期/生产'环境。实现这一目标的最佳方法是什么?
这是对上述问题的更新。当我们从GitHub部署时,Sentinel下面的答案工作。但是,现在我们使用Visual Studio Team Services进行Azure的构建和部署,该方法不再有效。几乎就像VSTS将原始settings.job文件复制到预构建事件之前的其他位置,该事件将每个环境版本复制到原始settings.job上并且正在使用这些副本创建部署包。任何见解或建议都将不胜感激。
答案 0 :(得分:1)
我会写一个PowerShell脚本来实现这一目标。 在构建定义中,创建一个变量来存储settings.job文件位置,另一个变量来存储调度。然后在VSTS中使用PowerShell脚本实用程序,我会更新设置文件。
下面的代码会更新文件。
param(
[Parameter(Mandatory=$true)][string]$configFile,
[Parameter(Mandatory=$true)][string]$schedule
)
$j = Get-Content $configFile -Raw | ConvertFrom-Json
$j.schedule = $schedule
$j | ConvertTo-Json | set-content $configFile
答案 1 :(得分:0)
根据您的描述,我建议您使用MSbuild来达到您的要求。
我建议您首先使用publish as webjob选项卡生成发布文件,然后在项目根路径中添加一个空的settings.job文件。
结果如下:
然后,您可以定义一个文件夹来存储不同的settings.job文件。 注意:您需要将文件名更改为与PublishProfiles的名称相同。 如下所示:
AzureWebTest20170214103506-development - Web Deploy.job
最后,您可以使用xcopy更改csproj文件,将文件复制到项目路径。
1.卸载项目
2.右键单击项目名称--->编辑project.csproj
3.更改后目标如下:
<Target Name="AfterBuild">
<PropertyGroup>
<test>"$(ProjectDir)sec\$(_PublishProfileName).job"</test>
</PropertyGroup>
<Message Text="Test = $(_PublishProfileName)">
</Message>
<Exec Command="xcopy.exe $(test) $(ProjectDir)settings.job /Y" WorkingDirectory="C:\Windows\" />
</Target>
发布webjob时,它会根据'PublishProfileName.job'内容复制正确的job.settings。
答案 2 :(得分:0)
您可以拥有多个json文件,例如settings.debug,然后使用prebuild事件,该事件将使用$(ConfigurationName)宏来复制和覆盖settings.job
可以在项目设置中编辑预构建事件。