当TFS版本定义在多个环境中同时运行时,new-webapplication命令失败,获得null异常

时间:2017-03-30 02:39:52

标签: powershell iis tfs continuous-deployment tfs2017

我正在尝试同时为多个环境运行发布定义。作为此定义的一部分,我运行一个PowerShell脚本,使用某些参数执行new-webapplication命令。我有9种不同的环境。作为步骤的一部分,我运行的PowerShell脚本在按顺序运行发布定义时不会失败,我的意思是,如果前一个发布环境成功运行每个发布环境,那么我就不会得到任何错误。但是,如果我假装同时为所有环境运行相同的版本定义。然后失败了。

这些只是我此版本环境的一个小例子

enter image description here

这是我得到的错误

    ##[error]Object reference not set to an instance of an object.
    + CategoryInfo          : NotSpecified: (:) [New-Item], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.NewItemCommandBut this just happens when I run the script with release agents in parallel, not in sequence as you can see on this configuration where all them have this option **Automated:After release creation** 

enter image description here

这是powershell上的脚本代码,它作为powershell任务在每个环境中运行

Param
(
  [string]$remoteserver,
  [string]$directory_path,
  [string]$website_name,
  [string]$app_n
)
$ScriptBlockContent =
{
$eventlog = $args[0]
$num = $args[1]
$app_name = $args[2]

$targetdir= $eventlog+'\'+$num+'\'+$app_name
 write-host $targetdir
 write-host 'THE PATH ' $targetdir ' NOT EXIST'
 write-host 'CREATING ' $app_name' DIRECTORY'
 new-item -itemtype directory -path $targetdir -force
write-host 'CREATING ' $app_name' APPLICATION'
new-webapplication -name $app_name -force -site $num -physicalpath $targetdir 
}

Invoke-Command -Computer $remoteserver -ScriptBlock $ScriptBlockContent -ArgumentList $directory_path, $website_name, $app_n

使用-Verbose参数打印每个命令后,我意识到new-webapplication命令失败并出现此空引用异常。 IIS是否无法同时从多个线程管理此命令的请求? 有没有改写myscript?

while(iis-is-failing)
   //re-run new-webapplication ...

1 个答案:

答案 0 :(得分:0)

首先请仔细检查排队政策。排队政策在部署条件标签的选项部分中定义。

enter image description here

确保您在触发器中的其他环境上成功部署后未选择并选择允许同时部署多个版本。有关每个设置的详细信息,请参阅Deployment conditions

创建新环境时,默认设置是检查触发器。

enter image description here

另请注意此问题中提到的 Daniel Mann 许可Release Management TFS 2015 - No Parallel Tasks