YAML 管道中无法识别术语“System.DefaultWorkingDirectory”

Posted

技术标签:

【中文标题】YAML 管道中无法识别术语“System.DefaultWorkingDirectory”【英文标题】:The term 'System.DefaultWorkingDirectory' is not recognized in YAML pipeline 【发布时间】:2021-05-13 14:52:45 【问题描述】:

我有一个带有 PowerShell 任务的管道,它运行一些 python 脚本。它没有任何问题。 在我将管道转换为 YAML 格式以将其存储为代码并得到类似这样的内容(整个 yaml 管道的一部分)之后:

    variables:
      Build.SyncSources: false
      REPO_PATH_DA: '/asdfg/qwerty'
      REPO_PATH_DS: '/zxcvbn/tyuio'
      PIP_REPO_HOST: 'bbbb.nnnn.yyyy.com'
      PIP_REPO_URL: 'https://$(PIP_REPO_HOST)/api/pypi/pypi/simple'
      PIP_VENV_NAME: 'my_test_venv'
      SelectedBranch: ''
      WorkingDirectory: $(System.DefaultWorkingDirectory)
    
…………………………………………….

    - task: PowerShell@1
      displayName: 'Install package'
      inputs:
        scriptType: inlineScript
        inlineScript: |
         .\$(PIP_VENV_NAME)\Scripts\activate
         python.exe -m pip install --index-url=$(PIP_REPO_URL) --trusted-host=$(PIP_REPO_HOST) mypackage
         python.exe -m pip install --index-url=$(PIP_REPO_URL) --trusted-host=$(PIP_REPO_HOST) $(WorkingDirectory)$(REPO_PATH_DA)\qwerty

在我运行这个管道后,我得到一个错误:

##[error]System.DefaultWorkingDirectory : The term 'System.DefaultWorkingDirectory' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

我尝试更改格式为 $(env:System_DefaultWorkingDirectory) 的变量名称,但没有成功。我想预定义的变量没有传递到 yaml 管道中。你有什么解决办法吗?

【问题讨论】:

嗨@GolovDanil。从您的票证标签看来,您使用的是 TFS,对吧?或者您正在使用 azure devops 服务。您可以参考答案并检查它是否可以为您提供帮助。如果还是不行,您可以与我们分享代理类型和版本。 【参考方案1】:

根据我的测试,相同的脚本可以在我的 yaml 管道中正常运行。 $(WorkingDirectory) 将被转换为路径 xxx/xx/s。

检查预定义变量:$(System.DefaultWorkingDirectory) 是否已传递给 Yaml Pipeline。

您可以添加一个任务来列出所有环境变量:

steps:
- script: SET | more

在任务日志中,您可以搜索SYSTEM_DEFAULTWORKINGDIRECTORY并检查变量是否存在。

例如:

如果此环境变量存在,您可以尝试使用以下格式:$env:SYSTEM_DEFAULTWORKINGDIRECTORY

示例如下:

   variables:
      Build.SyncSources: false
      .....
      WorkingDirectory: '$env:SYSTEM_DEFAULTWORKINGDIRECTORY'

如果找不到这个变量,也可以检查是否有等价的变量。

例如:

BUILD_SOURCESDIRECTORY , BUILD_REPOSITORY_LOCALPATH

【讨论】:

这很奇怪,但我没有任何这些变量。我输出了所有环境变量:有很多变量,但没有关于构建目录。有一个环境指向 D:\vsts\Agent001_work 但我认为它不是工作目录的完整路径 @GolovDanil。是的。真奇怪。从路径中,您正在使用自托管代理。可以分享一下代理版本吗?您可以尝试创建一个新代理或更新到latest version。 另一方面,您使用的是什么产品? Azure Devops Service 还是 Azure Devops Server 或 Tfs? 我使用 TFS。最后我得到了临时决定。我使用了一些指向代理目录的变量,并在那里手动创建了新的工作目录(而不是 System.DefaultWorkingDirectory)。它工作正常,但它仍然很奇怪。非常感谢【参考方案2】:

这是构建还是发布管道?如果是发布版,您可能需要使用 $(Pipeline.Workspace) 而不是 $(System.DefaultWorkingDirectory)。

另外,您是否尝试过在 Powershell 任务中直接使用 $(System.WorkingDirectory),而不是声明引用它的变量?

【讨论】:

以上是关于YAML 管道中无法识别术语“System.DefaultWorkingDirectory”的主要内容,如果未能解决你的问题,请参考以下文章

无法将环境变量传递给 azure 管道 yaml 中的 powershell 脚本(非内联)

无法识别术语“nodemon”

一些常见网络安全术语

如何组织 azure-pipeline.yaml 文件

无法识别术语“添加迁移”

TypeScript 安装/版本错误:无法识别术语“tsc”