我想根据构建配置或服务配置启用或禁用启动任务。我希望实现的是我可以在我们的测试环境中禁用New Relic,但启用舞台和制作环境的启动任务。那可能吗?
答案 0 :(得分: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进行修改。
答案 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文件,但会阻止它在生产中执行任何操作。