2016-02-29 56 views
0

我正在测试一个利用Add-Type添加一些自定义C#代码的工作流程Runbook。PowerShell会话/环境隔离 - 共享相同上下文的作业?

突然之间,我开始在随后的测试作业中出现'type already exists'错误,好像没有创建新的PSSession。

换句话说,它看起来像新的工作共享相同的执行上下文。如果我尝试每个PS实例运行两次相同的命令,我只能在本地获得。

有问题的类型是带有一些扩展方法的静态类。由于它也恰好是在源代码块中声明的第一种类型,我不怀疑其他非静态类型也会引发错误。

我已经执行了这么多次,所以我完全期待'最终'这会停止发生,但我似乎无法强制它,并且我不知道我能做些什么来绊倒它也陷入了这种情况。

看到共享的执行上下文的证据跨越这样的工作 - 即使是(特别是?)如果只是时间 - 使我怀疑,如果部分或全部制作&进行部署时,我们已经看到在过去的一般执行不一致的改变&表演不久后的测试与此有关。

我很想知道这只是测试任务和“真实”测试任务之间差异的一部分,但这引发了关于测试任务本身WRT模拟已发布任务的有效性的问题。

是否所有的Azure自动化作业都应该在隔离中执行?这可以被开发人员控制/利用吗?

回答

1

每个自动化帐户在其作业运行时都有自己独立的沙箱。这些沙箱分布在许多工作机器中。对于测试作业,为了改进作业开始时间,因为反复进行[更改代码,重新测试]非常常见,如果尚未清理沙盒,自动化将重复使用与此Runbook以前的测试作业相同的沙箱,因此沙箱不必为每个独特的测试工作而分解(沙箱创建是延长作业启动时间的理由之一)。由于这种行为,如果您在很短的时间内执行同一个Runbook的测试作业,您将会看到上面看到的行为。

但是,即使是生产作业,同一自动化帐户(跨Runbook)的作业也可以共享相同的沙箱。我们在工作机器上随机分配作业,因此其可能的作业A排队等待执行并放置在工作人员W上,然后5分钟后,作业B排队等待执行并放置在工作人员W上。如果作业A和作业B具有相同的自动化帐户,并且在模块/模块版本方面具有相同的“要求”,则如果作业A的沙箱仍在附近,它们将被放置在同一个沙箱中。 “模块/模块版本需求”并不意味着Runbook使用的模块,而是计划作​​业启动时自动化帐户中存在的模块/最新模块版本/计划(针对按计划启动的作业)/运行手册被分配到一个网络挂接

(就业透过WebHook开始)在解决您的具体问题而言,你可以环绕添加型与尝试,catch语句,或者可能使用Add-Type -IgnoreWarnings

+0

感谢乔 - 这是一个真正有助于解释执行过程。这是否更详细地记录在其他地方?理想情况下,这将作为一个模块(而不是内联c#)进行部署,在这种情况下,get-module流程可以很好地抵御它,如果需要的话。很有必要了解sanbox重用的潜力,以便主动编写一致的执行代码。 – JoeBrockhaus