Azure devops 无法在Azure DevOps任务中运行az管道命令
尝试通过YAML管道中的Azure DevOps任务从变量组动态检索所有变量。最初尝试利用AzureCLI@2使用以下代码执行任务以检索variableGroupID,该ID将用于获取其中的变量: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
$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的方法相同
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的方法相同
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.