我正在尝试在蔚蓝管道中进行柏树测试。为此,我需要先运行“ dotnet run”,然后再运行测试。我有一个管道任务,可以成功运行“ dotnet run”命令,但是由于它从未退出,因此管道永远不会到达下一个任务。是否可以使用YAML使管道作业转到下一步,同时保持'dotnet run'命令运行?
如果不可能,是否有办法在Azure管道中运行cypress测试时在后台运行“ dotnet run”?
这是我的YAML代码的一部分:
- task: DotNetCoreCLI@2
displayName: 'dotnet run'
inputs:
command: run
projects: Api/Api.csproj
arguments: '--configuration Release --verbosity normal'
- script: 'npx cypress verify' // pipeline job never gets to this step
displayName: 'Verify Cypress Can Run'
failOnStderr: true
答案 0 :(得分:1)
除非当前任务已完成工作,否则“ Azure Devops”任务将不会导航到下一个任务。
由于dotnet run
任务正在运行一个xx.exe / api / ...,该任务一直运行并且不会停止,因此您的任务将挂在这里是预期的行为。
是否有一种使用YAML的方法将管道作业转到下一步 同时保持'dotnet run'命令运行?
作为解决方法,您可以使用cmd任务运行命令。代替直接在CMD任务中调用命令,我们应该调用CMD任务打开新会话来运行dotnet run
命令。这样作业才能转到下一个作业,并且dotnet run
命令可以在后台继续运行。
trigger:
- master
pool:
name: default
steps:
- script: 'start cmd.exe /c dotnet run WpfCore.csproj'
displayName: 'Open new Session to run dotnet run'
- script: 'TaskList'
displayName: 'List running tasks to check if the WpfCore.exe keeps running'
注意:
由于我用于测试的项目是带有一个计时器的Wpf应用程序,因此我必须对interactive mode使用自托管代理。如果在使用Microsoft托管代理时上述解决方法对您不起作用,则您可能需要考虑在适当的模式下使用自托管代理。 (交互式或服务模式)
答案 1 :(得分:0)
我想出了一个解决方案。我将“ dotnet run”放在一个Powershell脚本中,该脚本作为后台进程运行。
powershell脚本:
Start-Process powershell -ArgumentList "-NoProfile", "-NonInteractive", "-NoExit", {
dotnet run
}
然后我在powershell构建步骤中运行powershell脚本:
- task: PowerShell@2
inputs:
targetType: 'filePath' # Optional. Options: filePath, inline
filePath: $(Build.SourcesDirectory)\Api\dotnetrun.ps1
errorActionPreference: 'stop'
failOnStderr: false # Optional
workingDirectory: ./Api
displayName: 'Run dotnet run as background process'
构建步骤将运行,并根据需要转到下一步。
答案 2 :(得分:0)
您也可以使用 linux 代理/使用 bash 任务来运行它:
dotnet run &
来源:https://linuxize.com/post/how-to-run-linux-commands-in-background/