在Azure DevOps中的不同项目之间共享变量



我希望你们都好!

我需要问一个关于azure devops的问题,我已经阅读了文档,但我没有找到解决这些疑问的方法

我有X、Y和Z项目,在X项目中创建管道>gt;Libray一组名为general的变量,我希望与Y和Z管道共享,当配置该组时,我启用了选项";允许访问所有管道"。

在Y和Z管道的YAML中,我进行了以下配置:**变量:

  • 组:一般**

根据下面的打印,运行管道时,他返回授权请求,甚至单击授权:

打印授权错误

There was a resource authorization issue: 
"An error occurred while loading the YAML build pipeline.  
Variable group was not found or is not authorized for use.  
For authorization details, refer to https://aka.ms/yamlauthz."

我的问题是,有没有任何方法可以在不同目的的管道之间共享变量,如果有,你能给我发一些文档来帮助我配置吗?

在我这边测试,我可以重现这个问题,设置允许访问所有管道选项将使变量组可以访问当前项目中的任何管道,而不是跨项目。这应该是一个已知的限制,这就是反馈票。你可以投票并关注这张票。您也可以在此处创建一个新的建议票证。产品组将定期审查这些票证,并考虑将其作为路线图。

此外,作为一种变通方法,您可以尝试将这些共享变量添加到Azure密钥库,然后使用Azure密钥库任务从库中获取所有机密或机密子集的最新值,并将其设置为可在管道的后续任务中使用的变量。有关详细信息,请参阅:在Azure管道中使用Azure密钥库机密。

此链接提供了在Azure DevOps管道中使用变量的良好概述:

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables

在最常见的情况下,设置变量并在YAML文件。

在YAML文件中,您可以在不同的范围内设置一个变量:

  • 在根级别,使其可用于管道中的所有作业
  • 在阶段级别,使其仅适用于特定阶段
  • 在作业级别,使其仅可用于特定作业

Q:听起来你想YAML管道根之间共享变量,对吗?您当前正在尝试使用变量组来完成此操作,对吗?

另一种解决方案是让您的管道从";共享文件";。例如:

有没有办法从Azure DevOps YAML读取文件?

您可以使用任何您喜欢的脚本语言来解析文件"吐出";作为构建变量所需的一切,并在以后使用上。以下是我一直在做的事情:

- script: echo "##vso[task.setvariable variable=dp]$(cat $(Build.Repository.LocalPath)/deployment/dp)"
- script: az group delete -n $(dp)-k8s -y --no-wait

换句话说:

  • 创建一个包含您希望";"出口";。它可以是任何脚本格式:Powershell、bash等。

  • 修改你的管道以读取文件;导入";运行时的变量定义。

  • 有很多方法可以做到这一点。上面的SO链接只是一个例子。

最新更新