我在Azure,Sandbox,Test和Prod有3个环境。
我有yaml管道在天蓝色的发展中,它建立了基础设施。构建的环境依赖于terraform代码中的变量。
根据yaml文件中的条件,使用相同的pipleline部署到所有环境。我希望Dev在合并时触发到主,但只需要手动部署test和prod。如何在yaml文件中设置此文件?
发布于 2022-07-27 03:56:48
对于Dev,您可以设置分支“Master”的构建验证:

在主分支中,YML文件应该如下所示:
trigger:
- master
pool:
vmImage: ubuntu-latest
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'这可以确保主分支(Dev环境)的管道只在PR合并完成后触发。
对于测试和prod环境,您可以创建一个与管道查找的名称相同的分支。并使用以下YML定义:
trigger:
- none
pool:
vmImage: ubuntu-latest
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'这可以确保测试和prod只能手动触发。
以上解决方案只需一条管道即可。
发布于 2022-07-27 07:52:50
根据您的需求,您可以在YAML管道中添加条件。
在合并到主服务器时触发
您可以设置变量:Build.Reason和System.PullRequest.TargetBranch。
例如:
condition: and(eq(variables['Build.Reason'], 'PullRequest'), eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/master'))希望测试和prod能够手动部署
您可以设置变量:Build.Reason
condition: eq(variables['Build.Reason'], 'Manual')YAML示例:
stages:
- stage: Dev
condition: and(eq(variables['Build.Reason'], 'PullRequest'), eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/master'))
jobs:
- job: A
steps:
- xx
- stage: Prod
condition: eq(variables['Build.Reason'], 'Manual')
jobs:
- job: B
steps:
- xx
- stage: Test
condition: eq(variables['Build.Reason'], 'Manual')
jobs:
- job: C
steps:
- xx当管道由拉请求触发并且目标分支是主分支时,开发阶段将运行。
当手动触发管道时,测试和Prod阶段将运行。
https://stackoverflow.com/questions/73120033
复制相似问题