【问题标题】:Azure devops pipeline gives different results on two different self hosted agents of the same versionAzure devops 管道在相同版本的两个不同的自托管代理上给出不同的结果
【发布时间】:2020-07-08 09:12:20
【问题描述】:

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

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

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

这次在运行管道时一切都按预期工作。

这似乎表明问题不是 Powershell 任务或代理。 然而,我现在已经到了一个我真的不知道问题出在哪里的地步。

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

- 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 中的日志记录工具实际上将其记录为错误。

这使得了解警告和实际错误的概览变得困难。

【问题讨论】:

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


    【解决方案1】:

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

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

      ignoreLASTEXITCODE: true
      pwsh: true
      continueOnError: true
    

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

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

    【讨论】:

    • 所以问题实际上是,一些工具安装在代理显然没有权限的目录中。当我在不同的目录中重新安装这些工具时,一切都按预期工作。但是我仍然看到像这样的奇怪行为:“”##[error]handler/can_ha/Test_can_ha.c:267:65:警告:从不兼容的指针类型传递“can_write_data”的参数1 [-Wincompatible-pointer-types] “”。编译器报告一个警告,但它被记录为错误
    • 在powershell中直接运行命令时你在哪个目录?确保在管道中运行 ps 任务之前 cd 到同一目录。另外,请确保您在管理员帐户中启动代理。
    • 命令在正确的目录中运行,我现在已将代理配置为在管理员帐户上运行,但问题尚未解决。
    • 您好,很抱歉回复缓慢。不,我不使用 Cmake 命令行。我使用 GNU make 和 GCC。我已经用一些更多细节和一些新发现更新了这个问题。
    最近更新 更多