Azure devops管道在相同版本的两个不同的自托管代理上给出不同的结果

时间:2020-07-08 09:12:20

标签: powershell azure-devops virtual-machine azure-devops-self-hosted-agent

我在Azure上有一个虚拟机,用于运行自托管的DevOps代理(版本2.170.1)。 该管道包含一些运行构建和单元测试的PowerShell任务。 我为此(版本7.0.2)使用PowerShell核心,服务器操作系统为Windows Server 2019 Datacenter 1809。

我试图直接从Powershell核心(版本7.0.2)在服务器上运行任务,并且一切正常。 当它在带有Powershell @ 2任务的管道中运行时,警告被报告为错误,即使该任务不应该执行,也会导致该任务失败。 此外,还会发生其他意外错误,而直接在服务器上运行该错误不会发生。

作为一个实验,我在笔记本电脑上安装了相同版本的代理,然后在该笔记本上运行管道。再次使用Powershell Core(版本7.0.2),笔记本电脑操作系统为Windows 10 Enterprise 1909。 所有的编译器,测试工具等也是相同的版本。

这次运行管道时一切正常。

这似乎表明问题不是Powershell任务还是Agent。 但是,现在我到达了一个我真的不知道问题可能在哪里的地方。

以下是管道正在运行的两个任务的示例。

- task: PowerShell@2
    displayName: Build source code
    inputs:
      targetType: inline
      pwsh: true
      script: 'cd build; make all --jobs 4 --output-sync'

  - task: PowerShell@2
    displayName: Unit test
    inputs:
      targetType: inline
      pwsh: true
      script: 'cd test/unit; ceedling gcov:i2c_ha utils:gcov'

有人知道这个问题可能是什么以及可能的解决方案是什么?

更新:

所以我做了一些进一步的调查,看来问题实际上出在输出错误记录的方式上。

在禁用警告的情况下运行Ceedling时,不会报告任何错误或警告。 启用警告后,所有警告均报告为错误。因此看来Ceedling的输出分析不正确。

A piece of the output from running Ceedling

在链接中,我附加了运行Ceedling的任务的输出日志。可以看出Ceedling仅报告警告,但是Azure DevOps中的日志记录工具实际上将其记录为错误。

这使得很难获得警告和实际错误的概述。

1 个答案:

答案 0 :(得分:0)

当它在带有Powershell @ 2任务的管道中运行时,警告为 报告为导致任务失败的错误,即使任务不应该失败。

1。通常PS任务不会因警告而失败,请尝试在下面添加脚本:

  ignoreLASTEXITCODE: true
  pwsh: true
  continueOnError: true

2。如果#1不能解决问题,则应检查是否选择了正确的机器来运行管道。假设您的座席池中有多个座席,则可以添加demands来指定座席。

pool:
  name: Default
  demands:
  - Agent.Name -equals YourAgentName