首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Azure DevOps任务中运行az管道命令

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

Stack Overflow用户
提问于 2021-02-04 04:30:41
回答 2查看 3.6K关注 0票数 3

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

代码语言:javascript
复制
$variableGroupId = $(az pipelines variable-group list --org $(System.CollectionUri) --project $(System.TeamProject) --query "[?name=='{{ parameters.variableGroupName }}'].id" -o tsv)

此命令在本地工作,但在这样的MS托管代理上执行时不起作用:

代码语言:javascript
复制
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

这与错误失败:

代码语言:javascript
复制
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

我开了一个问题

同时,我试图运行通过脚本安装所需部件的命令

代码语言:javascript
复制
   strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureRmWebAppDeployment@3
            inputs:
              azureSubscription: Example - Dev
              WebAppName: wapp-Example-dev-eus
              Package: $(Pipeline.Workspace)/drop/Web.Example.zip
              TakeAppOfflineFlag: True
          - task: UsePythonVersion@0
            inputs:
              versionSpec: '3.x'
              architecture: 'x64'
          - task: CmdLine@2
            displayName: 'Upgrade pip'
            inputs:
              script: python -m pip install --upgrade pip
          - task: CmdLine@2
            displayName: 'upgrade azure cli'
            inputs:
              script: pip install --pre azure-cli --extra-index-url https://azurecliprod.blob.core.windows.net/edge
          - task: CmdLine@2
            displayName: 'Show Azure CLI version'
            inputs:
              script: az --version
          - task: CmdLine@2
            displayName: 'Install Azure DevOps Extension'
            inputs:
              script: az extension add -n azure-devops
          - task: CmdLine@2
            env:
              AZURE_DEVOPS_CLI_PAT: $(patCredential)
            displayName: 'Login Azure DevOps Extension'
            inputs:
              script: echo ${AZURE_DEVOPS_CLI_PAT} | az devops login
          - task: CmdLine@2
            displayName: 'Show List of Variables'
            inputs:
              script: |
                $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

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

代码语言:javascript
复制
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.

我已经打开了一个与文件小组的问题,至少提供的步骤不起作用。如能提供任何帮助,将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-10 22:11:03

您可以使用REST而不是Azure来获取信息。它可以与Microsoft宿主代理上已经存在的标准工具一起使用。它只需要普通的powershell或powershell核心,这意味着可以同时在windows和linux代理上工作。以下示例已在windows-latest/windows-2019ubuntu-latest/ubuntu-20.04上成功测试

这种方法与Azure相同。

  1. 列出所有可用的组按名称进行筛选以检索所讨论的变量组
  2. 获取变量组中的所有变量使用步骤中的变量组id

实际上,管道也有一个开箱即用的PAT令牌,可以读取变量组。它存储在变量System.AccessToken中。使用它而不是手动管理的,将进一步简化事情。

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

代码语言:javascript
复制
- pwsh: |
    # Construct PAT authentication header
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "user",$env:SYSTEM_ACCESSTOKEN)))
    $headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
    
    # Retrieve variable group id. Filter the result by setting the groupName query parameter
    $variableGroupId = $(Invoke-RestMethod -Headers $headers "$(System.CollectionUri)$(System.TeamProject)/_apis/distributedtask/variablegroups?groupName=${{ parameters.variableGroupName }}&api-version=6.0-preview.2").value[0].id
    
    # Retrieve variables in variable group with id $variableGroupId
    $variables = $(Invoke-RestMethod -Headers $headers "$(System.CollectionUri)$(System.TeamProject)/_apis/distributedtask/variablegroups/${variableGroupId}?api-version=6.0-preview.2").variables
    
    #Print variables as json (for demo purpose)
    $variables | ConvertTo-Json
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  displayName: 'Retrieve variables'

在带有两个变量的变量组上测试项目中的上述管道将产生以下输出:

代码语言:javascript
复制
{
  "Variable 1": {
    "value":  "Value 1"
  },
  "Variable 2": {
    "value":  "Value 2"
  }
}
票数 2
EN

Stack Overflow用户

发布于 2021-09-24 22:46:30

我也得到了同样的错误,并通过添加以下内容使我的错误得以工作:

代码语言:javascript
复制
echo $(System.AccessToken) | az devops login

到我的内联脚本的顶部。看上去是这样的:

代码语言:javascript
复制
  variables:
    variableGroupName: 'my-variable-group'
    ...

          - task: AzureCLI@2
            displayName: 'Set environment variables'
            inputs:
              azureSubscription: '$(azureSubscription)'
              scriptType: 'pscore'
              scriptLocation: 'inlineScript'
              inlineScript: |
                echo $(System.AccessToken) | az devops login

                $groupId = (az pipelines variable-group list `
                --organization $(System.CollectionUri) `
                --project $(System.TeamProject) `
                --group-name $(variableGroupName) | ConvertFrom-Json).id
                
                ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66039377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档