PowerShell session/environment 隔离 - 共享相同上下文的作业?
PowerShell session/environment isolation - Jobs sharing same context?
我正在测试工作流 运行本书,该书利用 Add-Type 添加一些自定义 C# 代码。
突然间,我开始在后续测试作业中收到 'type already exists' 错误,就好像没有创建新的 PSSession 一样。
换句话说,看起来新作业共享相同的执行上下文。如果我尝试 运行 每个 PS 实例两次相同的命令,我只会在本地获得此信息。
有问题的类型是具有一些扩展方法的静态 class。因为它也恰好是源代码块中声明的第一个类型,所以我不怀疑其他非静态类型也会抛出错误。
我已经执行过几次了,所以我完全希望 'eventually' 这会停止发生,但我似乎无法强迫它,而且我不知道我能做什么done 让它陷入这种情况,要么。
看到像这样跨作业共享执行上下文的证据 - 即使(尤其是?)如果只是暂时的 - 让我想知道我们过去在进行和部署更改时是否看到过一些或所有的一般执行不一致 &不久之后进行后续测试与此有关。
我很想认为这只是测试作业和 'real' 之间区别的一部分,但这引发了关于测试作业本身 WRT 模仿已发布作业的有效性的问题。
是否所有 Azure 自动化作业都应该在隔离中执行?这可以是开发人员 controlled/exploited 吗?
每个自动化帐户都有自己独立的沙箱,其工作 运行。这些沙箱分布在许多工作机器中。对于测试作业,为了尝试缩短作业启动时间,因为一遍又一遍地 [进行代码更改、重新测试] 是很常见的,Automation 会重复使用与此 运行 本书之前的测试作业相同的沙箱,如果沙箱具有尚未清理,因此不必为每个独特的测试作业启动沙箱(创建沙箱是作业启动时间比预期时间长的原因之一)。由于这种行为,如果您在短时间内对同一本书 运行 执行测试作业,您将得到上面看到的行为。
但是,即使对于生产作业,同一自动化帐户(跨 运行 本书)的作业也可以共享相同的沙箱。我们在我们的 worker 机器上随机分配作业,因此它可能的作业 A 排队等待执行并放置在 worker W 上,然后 5 分钟后,作业 B 排队等待执行并也放置在 worker W 上。如果作业 A 和作业 B 属于同一个自动化帐户并且在模块/模块版本方面具有相同的 "demands",如果作业 A 的沙箱仍然存在,它们将被放置在同一个沙箱中。 "Module / module version demands" 不是指 运行book 使用的模块,而是指作业开始时自动化帐户中存在的模块/最新模块版本/运行book 已安排(对于通过计划启动的作业)/运行图书已分配给网络挂接(对于通过网络挂接启动的作业)
就解决您的具体问题而言,您可以在 Add-Type 周围加上 try、catch 语句,或者使用 Add-Type -IgnoreWarnings
我正在测试工作流 运行本书,该书利用 Add-Type 添加一些自定义 C# 代码。
突然间,我开始在后续测试作业中收到 'type already exists' 错误,就好像没有创建新的 PSSession 一样。
换句话说,看起来新作业共享相同的执行上下文。如果我尝试 运行 每个 PS 实例两次相同的命令,我只会在本地获得此信息。
有问题的类型是具有一些扩展方法的静态 class。因为它也恰好是源代码块中声明的第一个类型,所以我不怀疑其他非静态类型也会抛出错误。
我已经执行过几次了,所以我完全希望 'eventually' 这会停止发生,但我似乎无法强迫它,而且我不知道我能做什么done 让它陷入这种情况,要么。
看到像这样跨作业共享执行上下文的证据 - 即使(尤其是?)如果只是暂时的 - 让我想知道我们过去在进行和部署更改时是否看到过一些或所有的一般执行不一致 &不久之后进行后续测试与此有关。
我很想认为这只是测试作业和 'real' 之间区别的一部分,但这引发了关于测试作业本身 WRT 模仿已发布作业的有效性的问题。
是否所有 Azure 自动化作业都应该在隔离中执行?这可以是开发人员 controlled/exploited 吗?
每个自动化帐户都有自己独立的沙箱,其工作 运行。这些沙箱分布在许多工作机器中。对于测试作业,为了尝试缩短作业启动时间,因为一遍又一遍地 [进行代码更改、重新测试] 是很常见的,Automation 会重复使用与此 运行 本书之前的测试作业相同的沙箱,如果沙箱具有尚未清理,因此不必为每个独特的测试作业启动沙箱(创建沙箱是作业启动时间比预期时间长的原因之一)。由于这种行为,如果您在短时间内对同一本书 运行 执行测试作业,您将得到上面看到的行为。
但是,即使对于生产作业,同一自动化帐户(跨 运行 本书)的作业也可以共享相同的沙箱。我们在我们的 worker 机器上随机分配作业,因此它可能的作业 A 排队等待执行并放置在 worker W 上,然后 5 分钟后,作业 B 排队等待执行并也放置在 worker W 上。如果作业 A 和作业 B 属于同一个自动化帐户并且在模块/模块版本方面具有相同的 "demands",如果作业 A 的沙箱仍然存在,它们将被放置在同一个沙箱中。 "Module / module version demands" 不是指 运行book 使用的模块,而是指作业开始时自动化帐户中存在的模块/最新模块版本/运行book 已安排(对于通过计划启动的作业)/运行图书已分配给网络挂接(对于通过网络挂接启动的作业)
就解决您的具体问题而言,您可以在 Add-Type 周围加上 try、catch 语句,或者使用 Add-Type -IgnoreWarnings