如何使用其他“设置”工具'通过VSTS的每个环境

时间:2017-04-05 15:08:16

标签: azure azure-webjobs webjob

我们正在将计划的Web作业部署到Azure。 Web作业是使用Visual Studio 2015开发的。' settings.job'文件包含计划定义。但是,我们希望根据我们是否部署到“开发”来使用不同的计划。环境或分期/生产'环境。实现这一目标的最佳方法是什么?

这是对上述问题的更新。当我们从GitHub部署时,Sentinel下面的答案工作。但是,现在我们使用Visual Studio Team Services进行Azure的构建和部署,该方法不再有效。几乎就像VSTS将原始settings.job文件复制到预构建事件之前的其他位置,该事件将每个环境版本复制到原始settings.job上并且正在使用这些副本创建部署包。任何见解或建议都将不胜感激。

3 个答案:

答案 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文件。

结果如下:

enter image description here

然后,您可以定义一个文件夹来存储不同的settings.job文件。 注意:您需要将文件名更改为与PublishProfiles的名称相同。 如下所示:

AzureWebTest20170214103506-development - Web Deploy.job enter image description here

最后,您可以使用xcopy更改csproj文件,将文件复制到项目路径。

1.卸载项目

2.右键单击项目名称--->编辑project.csproj

enter image description here

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

可以在项目设置中编辑预构建事件。