Azure devops 在Azure Devop中触发YAML管道
我是Azure Devops中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文件吗?一个定义一个?重复所有步骤似乎并不酷 或者我应该在每个分支中拥有相同文件的不同版本?这不会在某个时候
附加问题:如果您在Developemt分支上推一个构建管道,并在master上触发它会怎么样?(啊,我头晕)你说你不能有定时触发器和CI触发器,但这不是真的。请检查文件 如果只想通过使用计划触发器来运行管道,那么 必须通过指定PR来禁用PR和持续集成触发器: 无和触发器:YAML文件中无。如果您使用的是Azure Repos Git、PR生成是使用分支策略配置的,必须禁用 在那里 这里有两个选项:
- 您希望仅为主分支运行作业:
作业:
-工作: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