我在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中的日志记录工具实际上将其记录为错误。
这使得很难获得警告和实际错误的概述。
答案 0 :(得分:0)
当它在带有Powershell @ 2任务的管道中运行时,警告为 报告为导致任务失败的错误,即使任务不应该失败。
1。通常PS任务不会因警告而失败,请尝试在下面添加脚本:
ignoreLASTEXITCODE: true
pwsh: true
continueOnError: true
2。如果#1不能解决问题,则应检查是否选择了正确的机器来运行管道。假设您的座席池中有多个座席,则可以添加demands来指定座席。
pool:
name: Default
demands:
- Agent.Name -equals YourAgentName