【问题标题】:VSTS build definition - prevent PowerShell exit behavior causing processes terminationVSTS 构建定义 - 防止 PowerShell 退出行为导致进程终止
【发布时间】:2017-04-04 09:58:31
【问题描述】:

我的定义中有一个 PowerShell 任务,它自己调用另一个脚本文件,它负责在我的构建代理上运行几件事(启动几个不同的进程) - 模拟器、node.js 应用程序等。

在完成此步骤并继续运行之前,一切都很好。上面提到的所有东西都会在大多数底层进程被杀死的情况下关闭,因此,任何进一步的执行(例如运行测试)都注定会失败。

我的假设是这些过程在某种程度上依赖于 VSTS 为处理该步骤而生成的最外层(临时)脚本。

我尝试使用脚本参数列表中指定的 -NoExit 开关,但无济于事。我还在某处读到了一个建议,默认情况下使用 powershell.exe 的注册表项进行设置 - 仍然没有。

同样的工作流程在 Jenkins 中是可以的。我该如何解决这个问题?

这些是我的任务:

最后一个 PowerShell 任务调用一个指定的 PowerShell 文件,该文件自己调用其他几个。他们确保开始执行测试所需的一些本地依赖项和流程,例如一个正在运行的 Node.js 应用程序(例如在单独的控制台中启动并且运行良好)。

当任务完成并且成功后,最后一个测试将失败,因为 Node.js 应用程序已关闭,以及在上一步中启动的任何其他应用程序都已关闭。它只是停止一切。这就是为什么我目前在同一个任务中运行测试,直到我发现如何克服这种行为。

【问题讨论】:

  • 所以最后,我使用了一个调用 bat 文件的任务,其内容如下: powershell -command %1 然后在构建任务本身,我在单个参数中提供 PowerShell 脚本文件的路径和所有参数(设置为来自另一个任务的运行时变量),例如"& '$(MyScriptPath)' $(MyArgs)"

标签: powershell azure-pipelines azure-pipelines-build-task


【解决方案1】:

我不确定您如何在 PowerShell 脚本中调用依赖项和应用程序。但我尝试在 PowerShell 脚本任务中使用以下命令来运行 Node.js 应用程序:

invoke-expression 'cmd /c start powershell -Command {node main.js}'

在 PowerShell 脚本任务通过并完成后,应用程序会继续运行,这应该符合您的要求。有关详细信息,请参阅此问题:PowerShell launch script in new instance

但是你需要记住在测试完成后关闭进程。

【讨论】:

  • 这与“-noexit”开关一起似乎是通常情况下的解决方案。我通过调用另一个脚本来尝试此操作,该脚本随后调用了其他几个脚本,并且运行良好。但是,我很难从这里和那里重定向输出。所以我做了其他事情 - 一个调用 bat 文件的构建任务,该文件调用入口点脚本。是的,定义中的清理任务也是如此。现在一切正常。尽管如此,仍会将其标记为首要线索。谢谢!
【解决方案2】:

出错时继续选项(控制选项部分)。如果为 true(选中),则构建过程将继续,但构建结果将部分成功

您还可以使用 PowerShell 或 VSTS 任务命令输出错误或警告(取消选中 高级 部分中的 Fail on Standard Error 选项)并终止当前的 PowerShell 进程通过使用 exit 关键字,例如:

Write-Warning “warning”
Write-Error “error”
Write-Host " ##vso[task.logissue type=warning;]this is the warning"
Write-Host " ##vso[task.logissue type=error;sourcepath=consoleapp/main.cs;linenumber=1;columnnumber=1;code=100;]this is an error "

更多关于VSTS任务命令的信息,可以参考:Logging Commands

【讨论】:

  • 任务本身是绿色的,它运行得很好——没有错误。我需要以某种方式阻止它关闭在它运行时在后台启动的所有内容,因为接下来的任务取决于此设置。
  • @lvayloangelov 您能否提供该场景的详细信息(例如脚本、工作流程、结果等...)
  • 感谢您的回复和您对此的活动。我在问题本身中添加了更多细节。
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 2010-10-09
  • 2015-08-03
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2022-07-18
  • 1970-01-01
相关资源
最近更新 更多