首页 > 解决方案 > Azure DevOps 管道存储库触发器不会触发

问题描述

语境

我正在为具有此存储库配置的应用程序(同一组织和项目中的每个存储库)创建 CI/CD 配置:

在存储库r3中有解决方案的 Azure DevOps Pipelines,每个管道都已配置为手动和计划触发器在开发分支上:

  1. 前端 CI 管道p1
  2. 后端 CI 管道p2
  3. 部署管道p3

我想要的行为是

  1. r1 repo上的 Git 提交
  2. 触发repo r3上的管道p1(这将创建工件,应用标签并通知)
  3. 由 p1 完成触发的管道p3 (这将部署工件)

管道p1如下所示

trigger: none

resources:
  containers:
    - container: running-image
      image: ubuntu:latest
      options: "-v /usr/bin/sudo:/usr/bin/sudo -v /usr/lib/sudo/libsudo_util.so.0:/usr/lib/sudo/libsudo_util.so.0 -v /usr/lib/sudo/sudoers.so:/usr/lib/sudo/sudoers.so -v /etc/sudoers:/etc/sudoers"
  repositories:
    - repository: frontend
      name: r1
      type: git
      ref: develop
      trigger:
        branches:
          include:
            - develop
          exclude:
            - main

name: $(SourceBranchName)_$(date:yyyyMMdd)$(rev:.r) - Frontend App [CI]

variables:
  - name: imageName
    value: fronted-app
  - name: containerRegistryConnection
    value: apps-registry-connection

pool:
  vmImage: "ubuntu-latest"

stages:
  - stage: Build
    displayName: Build and push
    jobs:
      - job: JobBuild
        displayName: Build job
        container: running-image
        steps:
          - checkout: frontend
            displayName: Checkout Frontend repository
            path: fe
            persistCredentials: true

...

管道p3如下所示

name: $(SourceBranchName)_$(date:yyyyMMdd)$(rev:.r) - App [CD]
trigger: none

resources:
  containers:
    - container: running-image
      image: ubuntu:latest
      options: "-v /usr/bin/sudo:/usr/bin/sudo -v /usr/lib/sudo/libsudo_util.so.0:/usr/lib/sudo/libsudo_util.so.0 -v /usr/lib/sudo/sudoers.so:/usr/lib/sudo/sudoers.so -v /etc/sudoers:/etc/sudoers"
  pipelines:
    - pipeline: app-fe-delivery
      source: "p1"
      trigger:
        stages:
          - Build
        branches:
          include:
            - develop


pool:
  vmImage: "ubuntu-latest"
stages:
  - stage: Delivery
    jobs:
      - job: JobDevelopment
        steps:
          - template: ../templates/template-setup.yaml # Template reference
            parameters:
              serviceDisplayName: ${{ variables.serviceDisplayName }}
              serviceName: ${{ variables.serviceName }}
...

问题

即使一步一步遵循官方文档中公开的所有规则:

评论

标签: azure-devopsazure-pipelinesazure-pipelines-yaml

解决方案


结合可能的解决方案。

首先相信你的问题是:

trigger: none

这意味着管道只能手动工作。在您引用的文档中:

默认情况下,所有资源都启用触发器。但是,您可以选择覆盖/禁用每个资源的触发器。

这种配置方式所有推送触发器都被禁用

我认为实现您正在尝试的一种可能方法是trigger:nonep1p3中删除

如果我正确阅读了您的问题,您正在尝试在存储库上进行 CI/CD 构建部署。如果是这样,我可以建议该场景是否合适(即构建将始终触发部署)然后将这些管道组合成一个并if在部署阶段周围放置一个类似于以下内容的语句:

  - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master')}}:

此外,如果部署到多个环境,则可以在一行中缩进一个循环:

  - ${{ each environmentNames in parameters.environmentNames }}:

我注意到您已经在使用模板,所以这只是将模板调用从作业移动到舞台并让它充当包装器。随时提供反馈。如果这个答案不合适,我可以相应地更新它。


推荐阅读