Azure devops 在Azure Devop中触发YAML管道

Azure devops 在Azure Devop中触发YAML管道,azure-devops,azure-pipelines,azure-pipelines-release-pipeline,Azure Devops,Azure Pipelines,Azure Pipelines Release Pipeline,我是Azure Devops中YAML构建管道的新手,我正试图了解触发器功能。困扰我的是,我希望在不同的分支上使用不同的触发器,但我希望使用相同的管道 让我们说我想要 基于主分支上的所有签入构建,并且应该将其部署到服务器 每天晚上,我都想构建开发分支并将其部署到另一台服务器上 我很困惑,因为yaml文件也被签入Git。我读到,如果你有计划的触发器,你不能有CI触发器以及 我需要两个.yml文件吗?一个定义一个?重复所有步骤似乎并不酷 或者我应该在每个分支中拥有相同文件的不同版本?这不会在某个时候

我是Azure Devops中YAML构建管道的新手,我正试图了解触发器功能。困扰我的是,我希望在不同的分支上使用不同的触发器,但我希望使用相同的管道

让我们说我想要

  • 基于主分支上的所有签入构建,并且应该将其部署到服务器
  • 每天晚上,我都想构建开发分支并将其部署到另一台服务器上
  • 我很困惑,因为yaml文件也被签入Git。我读到,如果你有计划的触发器,你不能有CI触发器以及

    我需要两个.yml文件吗?一个定义一个?重复所有步骤似乎并不酷

    或者我应该在每个分支中拥有相同文件的不同版本?这不会在某个时候被合并吗


    附加问题:如果您在Developemt分支上推一个构建管道,并在master上触发它会怎么样?(啊,我头晕)

    你说你不能有定时触发器和CI触发器,但这不是真的。请检查文件

    如果只想通过使用计划触发器来运行管道,那么 必须通过指定PR来禁用PR和持续集成触发器: 无和触发器:YAML文件中无。如果您使用的是Azure Repos Git、PR生成是使用分支策略配置的,必须禁用 在那里

    这里有两个选项:

  • 将所有内容保存在一个YAML文件中,并检查触发构建的分支或方式,以便部署到适当的服务器
  • 您可以有两个构建,但为了避免重复,请将常见的内容提取到模板中,并在构建定义中重用它们(因此,实际上在本例中,您将有3个yaml文件)
  • 几个例子:

    • 您希望仅为主分支运行作业:
    作业:
    -工作:A
    步骤:
    -脚本:回声你好
    -工作:B
    德彭森:A
    条件:和(successed(),eq(变量['build.sourceBranch'],'refs/heads/master'))
    步骤:
    -脚本:echo这只对master运行
    
    • 您希望提取公共步骤并在生成定义中重用它们
    常见步骤:

    #文件:simple-param.yml
    参数:
    -name:yesNo#参数名称;必修的
    类型:参数的布尔#数据类型;必修的
    默认值:false
    步骤:
    -脚本:echo${{parameters.yesNo}
    
    生成定义:

    #文件:azure-pipelines.yml
    触发:
    -主人
    延伸:
    模板:simple-param.yml
    参数:
    yesNo:false#设置为非布尔值以使生成失败
    
    您可以在中阅读有关模板的信息,也可以在my上查看示例

    如果您想拥有经典的发布管道,您需要定义两个带有触发器到特定分支的发布管道

    总而言之:你可以做你想做的事,你有不止一种方法来实现这一点。我个人的建议是使用带有模板的单独管道,因为它使生成定义比条件更干净,以检查哪个分支或如何触发生成

    在此变量
    Build.Reason
    中,您可以检查分支是如何触发的:

    • 手动:用户手动将生成排队
    • IndividualCI:由Git推送或TFVC签入触发的持续集成(CI)
    • BatchedCI:由Git推送或TFVC签入触发的连续集成(CI),已选择批更改
    • 调度:调度触发器。ValidateShelveset:用户手动将 构建特定的TFVC搁置集
    • CheckInShelveset:选通签入触发器
    • PullRequest:生成是由需要生成的Git分支策略触发的
    • BuildCompletion:该生成由另一个生成触发
    • ResourceTrigger:生成是由资源触发器触发的
    然后可以在条件中使用此变量。更多信息请点击这里

    结束此操作时,请注意有一种特殊的
    作业
    ,称为部署。如果你打算使用YAML流水线部署你的应用程序,请考虑使用这个。

    对于您的奖励问题:您可以覆盖您构建的设置。我的意思是你可以为大师和唯一的大师分支触发。但您仍然可以为其他分支(如开发分支)运行构建(例如,通过手动运行)。然后呢?生成将为新定义的分支运行。最后,这是构建定义和触发器,用于控制自动构建执行

    我需要两个.yml文件吗?一个定义一个?重复所有步骤似乎并不酷

    经过一段时间的研究,我个人建议您最好使用两个具有不同构建管道的
    .yml
    文件

    最直接的问题是
    master
    分支和
    development
    分支上的代码没有实时同步。当两个分支上的代码不同时,生成的结果也不同。如果它们在同一管道中,我们需要手动检查生成失败时错误来自哪个分支。这是一件痛苦的事情

    另一个deep问题是我们可以在一个yaml文件中定义
    CI触发器
    Scheduled触发器
    ,如下所示:

    trigger: 
     branches:
        include:
          - master
    
    
    schedules:
    - cron: "* 10 * * *"
      always: true
      displayName: Daily midnight build (UTC 22:00)
      branches:
        include:
         - Development
    
    为了实现这一点,我们需要在
    Development
    分支上设置这个yaml。如果我们更改主分支中的任何代码,它将触发此管道但是,它只在
    开发
    分支上构建代码,它不在主代码中包含更改的代码。所以这个CI触发器将毫无意义

    我应该在每个分支中拥有相同文件的不同版本吗?不会 这会在某个时候被合并吗

    个人建议您最好使用不同名称的不同yaml文件。正如您所说,相同的文件在以后的分支m中容易出现不必要的风险
    trigger: 
     branches:
        include:
          - master
          - Development