【问题标题】:How to get information about resources in an Azure Pipelines run?如何获取有关 Azure Pipelines 运行中资源的信息?
【发布时间】:2026-01-22 19:45:02
【问题描述】:

我在一个平台团队工作,该团队构建并支持 Azure Pipelines YAML 模板和这些管道的各种自定义脚本。我组织中的人员使用这些 YAML 模板,例如:

resources:
  repositories:
    - repository: templates
      type: git
      name: PROJECT/cicd_stuff
      ref: refs/heads/releases/v0.21
extends:
  template: our_awesome_template.yml@templates
  parameters:
    ...

为了可靠地将我们的脚本版本与 YAML 模板的版本相匹配,我们现在在管道模板中包含一个额外的构建阶段,用于检查 repo 模板 repo 并将我们的所有脚本放入一个工件中以供使用在那次运行中。使用“发布分支”可以让我们安全地发布和测试管道的新功能和修复:团队可以按照自己的节奏升级他们的管道,旧版本仍然支持一段时间。

我想开始将 Azure Artifacts 用于我们的脚本工件,但现在我想知道“如何确定我应该从 Azure Artifacts 下载哪个版本的脚本?”资源块中包含的信息对我有用,但我似乎无法使用表达式或预定义变量访问它。我目前能想到的唯一解决方案是使用 az pipelines cli。有什么想法吗?

【问题讨论】:

  • 我不知道使用 Azure Artifacts 会带来什么。您认为与您现在使用的方法相比有哪些优势?我已经多次成功地使用了您现在使用的方法;唯一的区别是我们使用标签而不是分支。
  • 我们已经开始将这些部署脚本打包为 PowerShell 模块中的函数,并且我们也开始使用 Python。我看到其他团队对使用我们的脚本很感兴趣,我认为如果他们可以从 Azure Artifacts 提要中获取它们会非常有用。当然,我可以同时做到这两点:对我们的管道使用当前方法将我们的包发布到 Azure Artifacts。在这里使用两种不同的方法只是很痒。

标签: azure-devops azure-pipelines azure-pipelines-yaml


【解决方案1】:

如何确定我应该从 Azure Artifacts 下载哪个版本的脚本?

如果功能版本是目标版本,您可以尝试以下 yaml 来获取其值。详情请见:Repository details

resources:
  repositories:
    - repository: templates
      type: git
      name: PROJECT/cicd_stuff
      ref: releases/v0.21

variables:
  tools.ref: $[ resources.repositories['templates'].ref ]
  
pool:
  vmImage: ubuntu-latest

steps:
- bash: |
    echo "Tools version: $TOOLS_REF"

您还可以参考以下文档:Use other repositoriesChecking out a specific ref,使用 tagref: refs/tags/v1.0 # optional ref to pin to 尝试 Daniel 的解决方案。

更新>>目前没有可用的预定义变量与用于包含存储库资源的名称(在本例中为“模板”)有关。如果我们知道存储库别名,则可以通过$[ resources.repositories['templates'].name] 解析存储库名称。

另一个发现是存储库资源将作为构建工件添加,我们可以从 API 获取它:GET https://dev.azure.com/{organization}/{project}/_build/results?buildId={buildId}&view=artifacts&__rt=fps&type=consumedArtifacts(我从浏览器开发工具中获取此 API)。而buildId 可以使用变量Build.BuildId 获得。有关详细信息,请参阅:Build variables (DevOps Services)。从响应中,搜索consumedSources 字段以找到下面的 json 段,这将返回所有工件,您可以找到存储库资源及其所有详细信息。

【讨论】:

  • 我对这个解决方案的主要问题是我需要知道用于包含存储库资源的名称(在本例中为“模板”)。
  • 目前没有可用的预定义变量与用于包含存储库资源的名称(在本例中为“模板”)有关。有关详细信息,请参阅我的更新答案。
  • 感谢您的工作,爱德华。我已经找到了与您类似的解决方案,但是通过利用 az pipelines CLI 并绕道检索和解析用于定义管道的实际 YAML 文件!