Windows托管代理中的’find’命令突然不起作用

82次阅读
没有评论

问题描述

在我们定义ADO构建流水线的YAML文件中,我们有以下部分:

- bash: |
    pip install pylint
    find preprocessing/ subtyping/ visualisations/ -name '*.py' | grep -v hmm | grep -v /test_ | sort | xargs pylint
  displayName: 'Run linter'

在过去的一周内,这段代码突然不起作用了。它仍然可以在ubuntu-latest托管代理上正常工作,但在Windows上(无论是windows-latest还是vs2017-win2016)它现在失败,并显示以下错误信息:

FIND: Parameter format not correct

我们没有做任何更改,但我们的构建流程现在失败了。
– 为什么会导致这种失败?
– 为什么它只在Windows上失败?
– 我如何诊断这个问题?
– 我们调用bash的’find’命令有什么问题吗?

解决方案

请注意以下操作可能存在版本差异,请根据实际情况进行调整。

问题原因

这个问题的原因是在Windows中,’find’命令与posix shell中的’find’命令有着完全不同的功能。而你的构建脚本中使用了类似posix shell中的’find’命令,因此在Windows上会导致错误。

解决方法

为了解决这个问题,你需要使用Windows中正确的’find’命令路径,而不是使用posix shell中的’find’命令。在Windows上,’find’命令通常位于C:\Windows\System32\find.exe

以下是在你的构建流程命令中如何使用Windows的’find’命令的示例:

- bash: |
    pip install pylint
    /c/Windows/System32/find.exe preprocessing/ subtyping/ visualisations/ -name '*.py' | grep -v hmm | grep -v /test_ | sort | xargs pylint
  displayName: 'Run linter'

在上面的示例中,我们将命令中的’find’替换为Windows中的’find’命令的路径/c/Windows/System32/find.exe,从而解决了参数格式错误的问题。

这样,你的构建流程就会在Windows上正常运行,而不会再遇到’FIND: Parameter format not correct’错误。

注意:如果你的构建流程需要在不同的操作系统上运行,可以考虑使用条件语句来根据操作系统选择正确的’find’命令路径。

诊断问题

如果你遇到类似问题,但不确定是什么导致了错误,你可以执行以下步骤来诊断问题:
1. 确认操作系统:首先,确认你的构建流程在哪个操作系统上失败。如果只在Windows上失败,那么问题很可能与操作系统相关。
2. 检查命令:仔细检查你的构建流程中的命令,特别是与’find’命令相关的部分。确保你没有错误地使用了与操作系统不兼容的命令或语法。
3. 查看错误消息:查看详细的错误消息,这有助于确定问题的具体原因。在这个案例中,’FIND: Parameter format not correct’错误提示暗示了参数格式不正确。
4. 检查路径:如果使用了外部命令或工具,确保路径设置正确。在Windows上,路径分隔符为反斜杠\,而在posix系统上为正斜杠/
5. 搜索文档:搜索相关文档或资源,查找类似问题的解决方案。你可能会找到其他开发者遇到过类似问题并提供了解决方法。

通过以上步骤,你可以更好地诊断和解决类似的构建问题。如果问题持续存在,可以进一步调查操作系统和构建环境的配置,以确定根本原因并采取适当的措施。

希望这些信息能够帮助你解决问题并使你的构建流程恢复正常运行!

正文完