azure-devops - Azure DevOps 管道存储库触发器不会触发
问题描述
语境
我正在为具有此存储库配置的应用程序(同一组织和项目中的每个存储库)创建 CI/CD 配置:
- 前端存储库 ( r1 )
- API 服务存储库 ( r2 )
- 基础设施即代码回购 ( r3 )
在存储库r3中有解决方案的 Azure DevOps Pipelines,每个管道都已配置为手动和计划触发器在开发分支上:
- 前端 CI 管道p1
- 后端 CI 管道p2
- 部署管道p3
我想要的行为是
- r1 repo上的 Git 提交
- 触发repo r3上的管道p1(这将创建工件,应用标签并通知)
- 由 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 }}
...
问题
即使一步一步遵循官方文档中公开的所有规则:
- 管道p1永远不会被r1存储库中开发分支上的任何提交触发
- 即使手动运行 Pipeline p1,也不会触发Pipeline p3
评论
- 如管道 YAML 参考中所述,默认情况下启用触发器
- 在同一文档中,如果没有表达分支包含过滤器,则触发器将发生在所有分支上
- 如Checkout Multiple repositories in pipelines触发器中所述,触发器仅发生在 Azure DevOps 存储库中的存储库中
- 是否可以禁用管道 CI 触发器 (
trigger: none
) 并让资源的存储库触发器发生 - 构建代理用户已被授权访问和排队新构建
解决方案
结合可能的解决方案。
首先相信你的问题是:
trigger: none
这意味着管道只能手动工作。在您引用的文档中:
默认情况下,所有资源都启用触发器。但是,您可以选择覆盖/禁用每个资源的触发器。
我认为实现您正在尝试的一种可能方法是trigger:none
从p1和p3中删除
如果我正确阅读了您的问题,您正在尝试在存储库上进行 CI/CD 构建部署。如果是这样,我可以建议该场景是否合适(即构建将始终触发部署)然后将这些管道组合成一个并if
在部署阶段周围放置一个类似于以下内容的语句:
- ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master')}}:
此外,如果部署到多个环境,则可以在一行中缩进一个循环:
- ${{ each environmentNames in parameters.environmentNames }}:
我注意到您已经在使用模板,所以这只是将模板调用从作业移动到舞台并让它充当包装器。随时提供反馈。如果这个答案不合适,我可以相应地更新它。
推荐阅读
- ruby-on-rails - Heroku 应用程序部署成功,但在加载站点时收到应用程序错误
- python - 使用 Python 的过滤方法预测文本 MDDropdown
- c# - 将 DateTime 压缩为字符串的最佳方法?
- c# - 如何使用 VS Code 调试 .NET MVC 项目
- java - springboot中的Teradata JDBC连接错误
- javascript - Safari 上的 stroke-dashoffset 会出现故障吗?移动和Mac
- python - 在 SQLite 内存数据库中的事务中创建表未回滚
- php - 使用 PHP 将 Foreach 内部的 Foreach 推送到相同的 Keys 对象中
- google-sheets - 水平范围...内部(垂直)ARRAYFORMULA?
- python - configparser -- 从 ini 导入后 SQL 查询中的额外 witespaces