无法将 Env 变量传递给 azure pipelines yaml 中的 powershell 脚本(非内联)

Unable to pass on Env variables to powershell script (not inline) in azure pipelines yaml

我的 azure pipelines yaml 运行 是存储在 repo 中的 powershell 脚本。

该 powershell 脚本需要 3 个变量:工作目录、Oauth 访问令牌和源分支名称(触发管道)。

但似乎,每当我尝试传递参数时,powershell 脚本都无法识别它们,并且出现错误

The term 'env:SYSTEM_ACCESSTOKEN' is not recognized as the 
name of a cmdlet, function, script file, or operable program

The term 'env:BUILD_SOURCEBRANCHNAME' is not recognized as the 
name of a cmdlet, function, script file, or operable program

我的 yaml 如下所示:

name: $(Build.DefinitionName)_$(Build.SourceBranchName)_$(Build.BuildId)

trigger:
  branches:
    include:
      - '*'

variables:
  system_accesstoken: $(System.AccessToken)

jobs:
  - job: NoteBookMergeAndOnPremSync
    displayName: Merge Notebooks to Notebooks branch and sync to on prem git
    pool:
      name: Poolname
    steps:
    - task: PowerShell@2
      displayName: 'Merge to Notebooks branch in Azure and Sync to On Prem'
      inputs:
        targetType: filePath
        filePath: ./deploy/MergeAndSync.ps1
        arguments: '-workingdir $(System.DefaultWorkingDirectory)\ -featurebranch $(env:BUILD_SOURCEBRANCHNAME) -accesstoken $(env:SYSTEM_ACCESSTOKEN)'
    

当使用 GUI 使用“发布定义”时,我能够 运行 成功地将 powershell 脚本作为“在线 powershell 脚本”,但我希望所有这些都在 azure 管道中( yaml)在 yaml 中,但不幸的是,我找不到传递这些环境变量的方法。

如何将 BUILD_SOURCEBRANCHNAME 和 env:SYSTEM_ACCESSTOKEN 从 azure pipeline yaml 传递给 powershell 脚本?

此外,我想避免使用“内联 powershell 脚本”,而是将逻辑保存在我的存储库中。

您似乎在混合使用 Azure 宏语法 ($(name)) 与 PowerShell 变量引用 语法 ($env:name,用于环境变量)。

也就是说,由于您正在调用带参数的 脚本文件 - 这可能意味着使用了 PowerShell CLI 的 -File 参数 - 您无法引用arguments 中的环境变量,因为 PowerShell 然后解释类似 $env:BUILD_SOURCEBRANCHNAME verbatim 的内容(作为文字字符串)而不是作为环境-变量引用(后者只能在 内部 脚本或使用 -Command 的 CLI 调用中工作。

因此,我认为解决方案是仅使用 Azure 宏语法将感兴趣变量的 作为参数传递:

arguments: >-
  -workingdir $(System.DefaultWorkingDirectory)\
  -featurebranch $(Build.SourceBranchName)
  -accesstoken $(system_accesstoken)

更新:如您所述,您不需要 任何 variables 定义:直接引用 $(System.AccessToken) 也可以:

arguments: >-
  -workingdir $(System.DefaultWorkingDirectory)\
  -featurebranch $(Build.SourceBranchName)
  -accesstoken $(System.AccessToken)