dotnet运行命令挂在天蓝色管道中

时间:2020-09-18 13:10:36

标签: azure-devops yaml azure-pipelines

我正在尝试在蔚蓝管道中进行柏树测试。为此,我需要先运行“ 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

3 个答案:

答案 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'

enter image description here

注意:

由于我用于测试的项目是带有一个计时器的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/