首页 > 解决方案 > Azure Dev Ops 警告内联 shell 脚本

问题描述

问题

我在 Azure Dev Ops 管道中通过 SSH 在远程计算机上运行内联 shell 脚本。根据某些条件,运行管道应引发自定义警告。

该功能有效,尽管方式非常扭曲:运行管道时,总是会出现警告。更准确地说:

下面的例子应该清楚地说明这个问题。

例子

假设我们有以下.yaml管道模板。请根据您的设置调整poolsshEndpoint设置。

pool: 'Default'

steps:

- checkout: none
  displayName: Suppress regular checkout

- task: SSH@0
  displayName: 'Run shell inline on remote machine'
  inputs:
    sshEndpoint: 'user@machine'
    runOptions: inline
    inline: |
     if [[ 3 -ne 0 ]]
     then
       echo "ALL GOOD!"
     else
      echo "##vso[task.logissue type=warning]Something is fishy..."
     fi
    failOnStdErr: false

预期行为

因此,上述 bash 脚本应回显ALL GOOD!为 3 is not 0。因此,不应触发警告消息。

当前行为

但是,当我在 Azure Dev Ops 中运行上述管道时,步骤日志概述显示存在警告:

步骤日志概述

日志本身如下所示(连接详细信息已涂黑):

在此处输入图像描述

因此,即使代码采用ALL GOOD!代码路径,也会出现警告消息。我认为这是因为整个 bash 脚本都回显到了日志中——但这只是一个假设。

问题

如何确保警告仅在满足条件时出现在已执行的管道中?

标签: azure-devopsazure-pipelinesazure-pipelines-yaml

解决方案


看起来SSH 任务在执行之前将脚本记录到控制台。您可能可以欺骗日志解析器:

HASHHASH="##"
echo $HASHHASH"vso[task.logissue type=warning]Something is fishy..."

我认为脚本按原样附加到日志是一个错误。我已经提交了一个问题。(一些解析似乎也发生了)......


推荐阅读