首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用YAML控制Azure Devops中不同环境的触发器

用YAML控制Azure Devops中不同环境的触发器
EN

Stack Overflow用户
提问于 2022-07-26 08:28:16
回答 2查看 281关注 0票数 0

我在Azure,Sandbox,Test和Prod有3个环境。

我有yaml管道在天蓝色的发展中,它建立了基础设施。构建的环境依赖于terraform代码中的变量。

根据yaml文件中的条件,使用相同的pipleline部署到所有环境。我希望Dev在合并时触发到主,但只需要手动部署test和prod。如何在yaml文件中设置此文件?

EN

回答 2

Stack Overflow用户

发布于 2022-07-27 03:56:48

对于Dev,您可以设置分支“Master”的构建验证:

在主分支中,YML文件应该如下所示:

代码语言:javascript
复制
trigger:
- master

pool:
  vmImage: ubuntu-latest

steps:
- script: echo Hello, world!
  displayName: 'Run a one-line script'

这可以确保主分支(Dev环境)的管道只在PR合并完成后触发。

对于测试和prod环境,您可以创建一个与管道查找的名称相同的分支。并使用以下YML定义:

代码语言:javascript
复制
trigger:
- none

pool:
  vmImage: ubuntu-latest

steps:
- script: echo Hello, world!
  displayName: 'Run a one-line script'

这可以确保测试和prod只能手动触发。

以上解决方案只需一条管道即可。

票数 0
EN

Stack Overflow用户

发布于 2022-07-27 07:52:50

根据您的需求,您可以在YAML管道中添加条件。

在合并到主服务器时触发

您可以设置变量:Build.ReasonSystem.PullRequest.TargetBranch

例如:

代码语言:javascript
复制
condition: and(eq(variables['Build.Reason'], 'PullRequest'), eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/master'))

希望测试和prod能够手动部署

您可以设置变量:Build.Reason

代码语言:javascript
复制
condition: eq(variables['Build.Reason'], 'Manual')

YAML示例:

代码语言:javascript
复制
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阶段将运行。

请参阅以下文档:条件预定义变量

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73120033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档