根据构建配置禁用/启用Azure启动任务

时间:2014-06-05 06:44:44

标签: azure newrelic azure-cloud-services

我想根据构建配置或服务配置启用或禁用启动任务。我希望实现的是我可以在我们的测试环境中禁用New Relic,但启用舞台和制作环境的启动任务。那可能吗?

2 个答案:

答案 0 :(得分:3)

NR_Jacob的回答激发了我,谢谢!我发现你可以将角色的设置传递给批处理文件。所以你添加这样的设置: Cloud configuration settings 并为每个服务配置指定true或false。

然后在ServiceDefinition.csdef中添加和行:

<Task commandLine="newrelic.cmd" executionContext="elevated" taskType="simple">
  <Environment>
        <Variable name="DisableNewRelic">
            <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='DisableNewRelic']/@value" />
        </Variable>
  </Environment>
</Task>

在newrelic.cmd中,在顶部添加以下行:

IF "%DisableNewRelic%" == "true" (
    ECHO Found setting to disable New Relic, exiting... >> "%RoleRoot%\nr.log" 2>&1
    EXIT /B 0
)

@NR_Jacob:你可以在你的代码库中添加newrelic.cmd行吗?在cmd中有这样的设置没有伤害;-)否则每次对nuget包进行更新时我都必须对newrelic.cmd进行修改。

答案 1 :(得分:1)

Microsoft的这篇文章针对此类问题有一个good solution。总结一下:

将一个Environment变量添加到ServiceDefinition.csdef文件中,如下所示:

<Variable name="ComputeEmulatorRunning">
    <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>

如果您在模拟器中运行,则会将变量设置为true,否则设置为false。接下来,您将需要更改newrelic.cmd文件以包装整个文件:

IF "%ComputeEmulatorRunning%" == "true" (
    REM   This task is running on the compute emulator. Nothing goes here since we want nothing to happen.
) ELSE (
    REM   This task is running on the cloud. Place the entirety of the newrelic.cmd file in here.
)

这仍将调用cmd文件,但会阻止它在生产中执行任何操作。