支持存储库和容器资源定义中的模板表达式

在此更新中,我们在存储库和容器资源定义中包含对模板表达式的支持。 现在,可以在 YAML 管道中定义 ref 资源的属性 repository 时使用模板表达式来选择存储库资源的分支。 此外,我们还添加了在 YAML 管道中定义 endpoint资源的 、 volumesportsoptions 属性 container 时对模板表达式的支持。

有关详细信息,请查看发行说明。

Azure Boards

Azure Pipelines

Azure Boards

以前,更改工作项链接至少需要三个步骤才能完成。 例如,若要将父链接更改为相关链接,需要复制工作项 ID,删除父链接,添加类型为相关的新现有链接,最后粘贴复制的 ID 并保存。 这是一个繁琐的过程。

通过允许你直接编辑和更改链接类型,我们解决了该问题。 只需一个步骤即可快速更改链接类型。

用于演示的 Gif 编辑工作项链接类型。

注意

此功能仅适用于 新板中心 预览版。

创建临时查询 REST 终结点

我们已看到多个扩展作者实例尝试通过查询字符串传递工作项查询语言 (WIQL) 语句来运行未保存的查询。 除非有一个达到浏览器查询字符串长度限制的大型 WIQL 语句,否则这可以正常工作。 为了解决此问题,我们创建了一个新的 REST 终结点,允许工具作者生成临时查询。 使用响应中的 ID 通过 querystring 传递可消除此问题。

有关详细信息,请参阅 临时查询 REST API 文档页

批量删除 API (个人预览版)

目前,从回收站中删除工作项的唯一方法是使用此 REST API 一次删除一个工作项。 此过程可能很慢,在尝试执行任何类型的大规模清理时,会受到速率限制。 作为响应,我们添加了一个新的 REST API 终结点,用于批量删除和/或销毁工作项。

如果有兴趣参与此新终结点的私人预览版,请 直接向我们发送电子邮件

@CurrentIteration 交付计划中宏

通过此更新,我们添加了对交付计划中样式的 @CurrentIteration 宏的支持。 此宏可让你从计划中每一行的团队上下文中获取当前迭代。

用于演示交付计划中 CurrentIteration 宏的 Gif。

Azure Pipelines

存储库资源定义中的模板表达式

我们在 YAML 管道中定义 ref 资源的 属性 repository 时添加了对模板表达式的支持。 这是我们开发者社区高度要求的功能

当希望管道检查同一存储库资源的不同分支时,存在一些用例。

例如,假设你有一个生成自己的存储库的管道,为此,它需要从资源存储库检查库。 此外,假设你希望管道检查自己使用的同一库分支。 例如,如果管道在main分支上运行,则应检查库main存储库的分支。 如果管道在分支上运行dev,则应检查库dev分支。

直到今天,必须显式指定分支以检查,并在分支更改时更改管道代码。

现在,可以使用模板表达式来选择存储库资源的分支。 请参阅以下用于管道非main分支的 YAML 代码示例:

resources:
  repositories:
    - repository: library
      type: git
      name: FabrikamLibrary
      ref: ${{ variables['Build.SourceBranch'] }}

steps:
- checkout: library
- script: echo ./build.sh
- script: echo ./test.sh

运行管道时,可以指定要为library存储库检查的分支。

指定要在生成队列时扩展的模板版本

模板 是减少代码重复 提高管道安全性的好方法。

一个常用的用例是将模板存放在他们自己的存储库中。 这会减少模板与扩展模板的管道之间的耦合,并使模板和管道独立发展更容易。

请考虑以下示例,其中模板用于监视步骤列表的执行。 模板代码位于存储库中 Templates

# template.yml in repository Templates
parameters:
- name: steps
  type: stepList
  default: []

jobs:
- job:
  steps:
  - script: ./startMonitoring.sh
  - ${{ parameters.steps }}
  - script: ./stopMonitoring.sh

假设你有一个用于扩展此模板的 YAML 管道,该管道位于存储库 FabrikamFiber中。 直到今天,在将存储库用作模板源时,无法动态指定 ref 存储库资源的 属性 templates 。 这意味着,如果希望管道能够:从其他分支扩展模板,则无论在哪个分支上运行管道,都需从与管道相同的分支名称扩展模板,而必须更改管道的代码

在存储库资源定义中引入模板表达式后,可以按如下所示编写管道:

resources:
  repositories:
    - repository: templates
      type: git
      name: Templates
      ref: ${{ variables['Build.SourceBranch'] }}

extends:
  template: template.yml@templates
  parameters:
    steps:
      - script: echo ./build.sh
      - script: echo ./test.sh

通过这样做,管道将扩展与管道运行所在的分支相同的分支中的模板,因此可以确保管道和模板的分支始终匹配。 也就是说,如果在分支 dev上运行管道,它将扩展存储库分支templatesdev文件指定的template.yml模板。

或者,可以在生成队列时通过编写以下 YAML 代码来选择要使用的模板存储库分支。

parameters:
  - name: branch
    default: main

resources:
  repositories:
    - repository: templates
      type: git
      name: Templates
      ref: ${{ parameters.branch }}

extends:
  template: template.yml@templates
  parameters:
    steps:
      - script: echo ./build.sh
      - script: echo ./test.sh

现在,可以在一次运行中让分支 main 上的管道从分支 dev 扩展模板,从另一个运行中的分支 main 扩展模板,而无需更改管道的代码。

ref 存储库资源的 属性指定模板表达式时,可以使用 parameters 和 系统预定义变量,但不能使用 YAML 或 Pipelines UI 定义的变量。

容器资源定义中的模板表达式

我们在 YAML 管道中定义endpoint资源的 、、 volumesportsoptions 属性container时添加了对模板表达式的支持。 这是我们开发者社区高度要求的功能

现在,可以编写 YAML 管道,如下所示。

parameters:
  - name: endpointName    
    default: AzDOACR
    type: string

resources:
  containers:
    - container: linux
      endpoint: ${{ parameters.endpointName }}
      image: fabrikamfiber.azurecr.io/ubuntu:latest

jobs:
- job:
  container: linux
  steps:
  - task: CmdLine@2
    inputs:
      script: 'echo Hello world'

可以在模板表达式中使用 parameters.variables. 。 对于变量,只能使用 YAML 文件中定义的变量,而不能使用 Pipelines UI 中定义的变量。 如果重新定义变量(例如,使用代理日志命令),则它不会有任何影响。

审核审批更改事件

通过审批 ,可以控制阶段应何时运行。 这通常用于控制向生产环境进行的部署。 通过审核 ,可以满足合规性要求并监视 Azure DevOps 组织的安全性。

当用户被要求批准要部署到特定阶段的管道时,该用户可以选择将审批重新分配给其他人。

审核审批更改事件

到目前为止,审核日志中未记录此类操作。 此问题现已修复。

审核日志将包含类似于以下内容的条目。

[
    {
        "Id": "2517368925862632546;00000264-0000-8888-8000-000000000000;839ad1ba-f72b-4258-bc3f-88be7a4553b5",
        "CorrelationId": "8392d1ba-f76b-4258-bc3f-88be7a4553b5",
        "ActivityId": "a298a06c-965f-4e60-9643-2593f2066e37",
        "ActorCUID": "fe950802-bf07-755b-826d-e8dcc066252c",
        "ActorUserId": "fe950802-bf07-755b-826d-e8dcc066252c",
        "ActorUPN": "silviu@fabrikam.app",
        "AuthenticationMechanism": "AAD_Cookie",
        "Timestamp": "2022-10-10T11:26:53.7367453Z",
        "ScopeType": "Organization",
        "ScopeDisplayName": "Fabrikam (Organization)",
        "ScopeId": "547a7316-cdf4-40d2-af16-3215f97d053e",
        "ProjectId": "4bf16944-3595-421f-9947-79d9eb190284",
        "ProjectName": "FabrikamFiber",
        "IpAddress": "127.0.0.1",
        "UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.37",
        "ActionId": "ApproverReassigned",
        "Data": {
            "ApprovalId": "dae6e7c9-2a10-4cd8-b63a-579a6e7ba78d",
            "OldApproverUserId": "692b6e2a-dd61-4872-866a-85498da390fc",
            "OldApproverDisplayName": "[FabrikamFiber]\\Build Administrators",
            "NewApproverUserId": "fe95080b-bf07-655b-226d-e8dcc066252c",
            "NewApproverDisplayName": "Jack Fabrikam",
            "Comment": "All admins are OOO"
        },
        "Details": "Reassigned approver of Approval dae6e7c9-9a10-4cd8-b63a-579a6e7ba78d in Project \"FabrikamFiber\" from \"[FabrikamFiber]\\Build Administrators\" to \"Jack Fabrikam\" with comment \"All admins are OOO\".",
        "Area": "Checks",
        "Category": "Modify",
        "CategoryDisplayName": "Modify",
        "ActorDisplayName": "Silviu"
    }
]

此外,它还将显示在审核 UI 中。

审核 UI 中的日志条目

任务库公开代理托管模型

想要确定代理是否在 Microsoft 托管池中运行的任务作者现在可以使用任务库函数 getAgentMode() 来确定托管模型。 如果任务希望根据是否访问客户的网络来影响行为,这非常有用。 如果任务是从驻留在客户网络的自承载代理或规模集代理执行的,则任务可能会尝试通过专用终结点访问 Azure 服务。 请参阅 任务参考

后续步骤

注意

这些功能将在未来两到三周内推出。

前往 Azure DevOps 并了解一下。

如何提供反馈

我们很想听听你对这些功能的看法。 使用帮助菜单报告问题或提供建议。

提出建议

你还可以在 Stack Overflow 上获得社区的建议和问题的答案。

此致

Vijay Machiraju