0

我需要在部署后运行控制台应用程序,但该工具只能在每个环境中运行一次。我为每个环境定义了两个角色,DatabaseServer 和 AppServer。该工具应该在 AppServer 机器上运行。

我使用 nuget 包和自定义 PowerShell 脚本部署控制台应用程序,以将其复制到 AppServer 机器上的正确位置。

当 AppServer 角色中只有一台机器时,一切都很好,但我想不出一种优雅的方式来确保当 AppServer 角色中有多台机器时,该工具只运行一次。

我能想到的唯一方法是,如果我为每个环境指定一个变量,其中包含该工具应在其上运行的机器的名称。在 PowerShell 脚本中,我可以检查此值,如果它不等于当前机器名称,则成功退出脚本。虽然这感觉不对 - 每个环境都需要一个变量,如果 AppServer 中的机器发生变化(并且应用程序应该在其上运行的机器被删除),那么部署将被归类为成功,但该工具将不会运行.

有什么简单的我忽略了吗?还是我必须使用这种方法?(这让我很难过)

4

1 回答 1

0

例如,您可以为将运行此工具的 AppServer 机器赋予第二个角色,例如 ToolRunner。然后,您可以创建一个以 ToolRunner 角色为目标的部署流程步骤,并在恰好使用该角色定义的唯一一台机器上执行控制台应用程序。

这不需要更改您的 PowerShell 脚本或 Octopus 变量。但是,如果您从环境中删除带有 ToolRunner 标签的机器,您必须确保将标签分配给新机器,以便您的流程继续按您希望的方式工作。

于 2014-08-18T00:50:12.260 回答