Azure devops 无法在Azure DevOps任务中运行az管道命令

Azure devops 无法在Azure DevOps任务中运行az管道命令,azure-devops,azure-pipelines,azure-cli2,Azure Devops,Azure Pipelines,Azure Cli2,尝试通过YAML管道中的Azure DevOps任务从变量组动态检索所有变量。最初尝试利用AzureCLI@2使用以下代码执行任务以检索variableGroupID,该ID将用于获取其中的变量: $variableGroupId = $(az pipelines variable-group list --org $(System.CollectionUri) --project $(System.TeamProject) --query "[?name=='{{ parameter

尝试通过YAML管道中的Azure DevOps任务从变量组动态检索所有变量。最初尝试利用AzureCLI@2使用以下代码执行任务以检索variableGroupID,该ID将用于获取其中的变量:

$variableGroupId = $(az pipelines variable-group list --org $(System.CollectionUri) --project $(System.TeamProject) --query "[?name=='{{ parameters.variableGroupName }}'].id" -o tsv)
此命令在本地工作,但在MS托管代理上执行时不起作用,如下所示:

parameters:
  variableGroupName: ''

steps:
- task: AzureCLI@2
  displayName: Azure CLI
  inputs:
    azureSubscription: ${{ parameters.azureSubscriptionName }}
    scriptType: pscore
    scriptLocation: inlineScript
    inlineScript: |
      az upgrade
      $variableGroupId = $(az pipelines variable-group list --org $(System.CollectionUri) --project $(System.TeamProject) --query "[?name=='{{ parameters.variableGroupName }}'].id" -o tsv)
      write-Host $variableGroupId
      $variables = $(az pipelines variable-group variable list --group-id $variableGroupId  --org $(System.CollectionUri)  --project $(System.TeamProject) -o yaml)
      write-Host $variables
此操作失败,错误如下:

Before you can run Azure DevOps commands, you need to run the login command (az login if using AAD/MSA identity else az devops login if using PAT token) to setup credentials. Please see https://aka.ms/azure-devops-cli-auth for more information
我已经打开了一个

与此同时,我试着运行

但是,当同时使用最新的Ubuntu代理和文档中指定的代理时,会出现错误:

WARNING: Failed to store PAT using keyring; falling back to file storage.
WARNING: You can clear the stored credential by running az devops logout.
WARNING: Refer https://aka.ms/azure-devops-cli-auth to know more on sign in with PAT.

我打开了一个窗口,至少提供的步骤不起作用。任何帮助都将不胜感激

您可以使用RESTAPI而不是Azure CLI来获取信息。它可以与Microsoft托管代理上已有的标准工具一起使用。它只需要vanilla powershell或powershell内核,这意味着可以在windows和linux代理上工作。下面的示例已在
windows最新版本
/和
ubuntu最新版本
/

该方法与Azure CLI的方法相同

  • 按名称筛选以检索有问题的变量组
  • 使用步骤中的变量组id
  • 事实上,管道还有一个现成的PAT令牌,可用于对变量组的读取访问。它存储在变量中。使用它而不是手动管理将进一步简化事情

    下面的脚本在
    pwsh
    步骤中执行,这是Powershell核心模式中的脚本

    -pwsh:|
    #构造PAT身份验证头
    $base64AuthInfo=[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(“{0}:{1}”-f“user”,“$env:SYSTEM_ACCESSTOKEN)))
    $headers=@{Authorization=(“基本{0}”-f$base64AuthInfo)}
    #检索变量组id。通过设置groupName查询参数筛选结果
    $variableGroupId=$(调用RestMethod-Headers$Headers“$(System.CollectionUri)$(System.TeamProject)/\u api/distributedtask/variablegroups?groupName=${{parameters.variableGroupName}}}&api version=6.0-preview.2”)。值[0]。id
    #检索id为$variableGroupId的变量组中的变量
    $variables=$(调用RestMethod-Headers$Headers“$(System.CollectionUri)$(System.TeamProject)/\u api/distributedtask/variablegroups/${variableGroupId}?api版本=6.0-preview.2”)。变量
    #将变量打印为json(用于演示)
    $variables |转换为Json
    环境:
    SYSTEM_ACCESSTOKEN:$(SYSTEM.ACCESSTOKEN)
    displayName:“检索变量”
    
    在具有两个变量的变量组上对项目中的上述管道进行测试,得到以下输出:

    {
    “变量1”:{
    “值”:“值1”
    },
    “变量2”:{
    “值”:“值2”
    }
    }
    
    您可以使用RESTAPI而不是Azure CLI来获取信息。它可以与Microsoft托管代理上已有的标准工具一起使用。它只需要vanilla powershell或powershell内核,这意味着可以在windows和linux代理上工作。下面的示例已在
    windows最新版本
    /和
    ubuntu最新版本
    /

    该方法与Azure CLI的方法相同

  • 按名称筛选以检索有问题的变量组
  • 使用步骤中的变量组id
  • 事实上,管道还有一个现成的PAT令牌,可用于对变量组的读取访问。它存储在变量中。使用它而不是手动管理将进一步简化事情

    下面的脚本在
    pwsh
    步骤中执行,这是Powershell核心模式中的脚本

    -pwsh:|
    #构造PAT身份验证头
    $base64AuthInfo=[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(“{0}:{1}”-f“user”,“$env:SYSTEM_ACCESSTOKEN)))
    $headers=@{Authorization=(“基本{0}”-f$base64AuthInfo)}
    #检索变量组id。通过设置groupName查询参数筛选结果
    $variableGroupId=$(调用RestMethod-Headers$Headers“$(System.CollectionUri)$(System.TeamProject)/\u api/distributedtask/variablegroups?groupName=${{parameters.variableGroupName}}}&api version=6.0-preview.2”)。值[0]。id
    #检索id为$variableGroupId的变量组中的变量
    $variables=$(调用RestMethod-Headers$Headers“$(System.CollectionUri)$(System.TeamProject)/\u api/distributedtask/variablegroups/${variableGroupId}?api版本=6.0-preview.2”)。变量
    #将变量打印为json(用于演示)
    $variables |转换为Json
    环境:
    SYSTEM_ACCESSTOKEN:$(SYSTEM.ACCESSTOKEN)
    displayName:“检索变量”
    
    在具有两个变量的变量组上对项目中的上述管道进行测试,得到以下输出:

    {
    “变量1”:{
    “值”:“值1”
    },
    “变量2”:{
    “值”:“值2”
    }
    }
    
    同意@wallezzi的观点,我们建议您,这使您能够更好地控制安装构建和部署所需的相关软件。并使用管道中的自托管代理将在您的本地生成环境上生成。对此不确定,我不必运行自托管代理来运行本机azure cli命令和扩展。另外,不可能使用自托管代理。您似乎已经在此处找到了解决此问题的方法:,如果您在stackoverflow中共享您的方法会更好,这将有助于其他遇到相同问题的社区成员,非常感谢。@EdwardHan MSFT请注意下面已经发布的评论。此解决方案首先在stackoverflow上确定,并更新了社区通知单以反映这一点。同意@wallezzi,我们建议您,这使您能够更好地控制安装构建和部署所需的依赖软件。并使用管道中的自托管代理将构建在您的loc上
    WARNING: Failed to store PAT using keyring; falling back to file storage.
    WARNING: You can clear the stored credential by running az devops logout.
    WARNING: Refer https://aka.ms/azure-devops-cli-auth to know more on sign in with PAT.