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

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

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

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 库分支。

直到今天为止,必须显式指定分支进行签出,并在分支发生更改时更改管道代码。

现在,可以使用模板表达式选择存储库资源的分支。 请参阅用于管道的非主分支的 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上运行管道,它将扩展存储库分支中的devtemplates文件指定的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 管道中定义endpointoptionsvolumesportscontainer资源的属性时添加了对模板表达式的支持。 这是我们开发者社区要求很高的功能。

现在,可以编写 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 文件中定义的变量,但不能使用管道 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