我正在为具有此存储库配置的应用程序创建 CI/CD 配置(同一组织和项目中的每个存储库):
在存储库 r3 中有解决方案的 Azure DevOps Pipelines,每个管道都已针对 develop 分支上的手动和计划触发器进行配置:
我想要的行为是
管道 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 }}
...
即使按照官方文档中公开的所有规则一步一步来:
trigger: none
) 并让资源的存储库触发器发生答案 0 :(得分:0)
几种可能的解决方案。
首先相信您的问题在于:
trigger: none
这意味着管道只能手动工作。在您引用的文档中:
<块引用>触发器在所有资源上默认启用。但是,您可以选择覆盖/禁用每个资源的触发器。
The way this is configured all push triggers are disabled。
我认为实现您正在尝试的一种可能方法是从 p1 和 p3
中删除trigger:none
如果我正确阅读了您的问题,您正在尝试在存储库上进行 CI/CD 构建部署。如果是这样,我是否可以建议该场景是否合适(即构建将始终触发部署),然后将这些管道合并为一个,并在部署阶段放置一个 if
语句,类似于:
- ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master')}}:
此外,如果部署到多个环境,可以在一行中缩进一个循环:
- ${{ each environmentNames in parameters.environmentNames }}:
我注意到您已经在使用模板,因此这只是将模板调用从作业移到舞台并使其充当包装器。随时提供反馈。如果这个答案不合适,我可以相应地更新它。