azure-devops - Azure Dev Ops 警告内联 shell 脚本
问题描述
问题
我在 Azure Dev Ops 管道中通过 SSH 在远程计算机上运行内联 shell 脚本。根据某些条件,运行管道应引发自定义警告。
该功能有效,尽管方式非常扭曲:运行管道时,总是会出现警告。更准确地说:
- 如果条件不满足,则出现一次警告。
- 如果满足条件,则会出现两次警告。
下面的例子应该清楚地说明这个问题。
例子
假设我们有以下.yaml
管道模板。请根据您的设置调整pool
和sshEndpoint
设置。
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 脚本都回显到了日志中——但这只是一个假设。
问题
如何确保警告仅在满足条件时出现在已执行的管道中?
解决方案
看起来SSH 任务在执行之前将脚本记录到控制台。您可能可以欺骗日志解析器:
HASHHASH="##"
echo $HASHHASH"vso[task.logissue type=warning]Something is fishy..."
我认为脚本按原样附加到日志是一个错误。我已经提交了一个问题。(一些解析似乎也发生了)......
推荐阅读
- flutter - 颤动问题中的HTTP调用类型转换错误
- gremlin - Gremlin:如何找到源自起始节点并与特定其他节点有连接的节点?
- javascript - 如何在没有推送序列的情况下验证弹出序列?
- python - 无法在带有 Python 3.8 的 Conda 环境中安装 matplotlib
- python - 在 matplotlib.pyplot 中绘制带有日期的线性回归
- django - 努力显示 django 验证消息
- c++ - 菜单按钮触发另一个窗口
- python - 将两个时间序列与 tz 感知的日期时间索引相结合
- angular - 您如何处理动态加载内容上的“检查后表达式已更改”?
- go - 读取请求标头时出现 Fasthttp 错误:标头键“http/1.1\r\nuser-Agent”无效