2

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

4

2 回答 2

3

NR_Jacob 的回答启发了我,谢谢!我发现您可以将角色设置传递给批处理文件。因此,您添加这样的设置: 云配置设置 并为每个单独的服务配置指定 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 进行修改。

于 2014-06-06T10:58:47.863 回答
1

Microsoft 的这篇文章为此类问题提供了很好的解决方案。总结一下:

将环境变量添加到 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 文件,但会阻止它在生产中执行任何操作。

于 2014-06-05T15:59:15.123 回答