2

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

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

4

3 回答 3

1

I would write a PowerShell script to achieve this. In build definition create a variable to store the settings.job file location and another variable to store the schedule. Then using PowerShell script utility in VSTS I would update the settings file.

Below code would update the file.

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
于 2017-05-08T03:46:48.147 回答
0

根据您的描述,我建议您可以使用 MSbuild 来满足您的要求。

我建议您首先使用发布为 webjob 选项卡生成发布文件,并在项目根路径中添加一个空白的 settings.job 文件。

结果如下:

在此处输入图像描述

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

AzureWebTest20170214103506-开发-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。

于 2017-04-06T08:17:42.437 回答
0

您可以只拥有多个 json 文件,例如 settings.debug,然后使用预构建事件,该事件将使用 $(ConfigurationName) 宏来复制和覆盖 settings.job

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

于 2017-04-06T10:51:50.133 回答