VSTS构建定义 - 阻止PowerShell退出行为导致进程终止

时间:2017-04-04 09:58:31

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

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

在此步骤完成并继续运行之前,一切都很好。所有上述内容都被关闭,大多数底​​层进程被杀死,因此,任何进一步的执行(例如测试运行)都注定要失败。

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

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

在詹金斯,同样的工作流程也没问题。我该如何解决这个问题?

这些是我的任务:

VSTS tasks

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

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

2 个答案:

答案 0 :(得分:2)

I am not sure how you call the dependencies and applications in your PowerShell script. But I tried with the following command in PowerShell script task to run a Node.js application:

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

The application keeps running after the PowerShell script task is passed and finished which should meet your requirement. Refer to this question for details: PowerShell launch script in new instance.

But you need to remember to close the process after the test is finished.

答案 1 :(得分:0)

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

您还可以使用PowerShell或VSTS任务命令输出错误或警告(取消选中高级部分中的标准错误失败选项)并终止当前的PowerShell进程使用退出关键字,例如:

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