设置azure-pipelines.yaml以在发生更改或手动触发时在子目录上运行
年初我问了以下问题: 基本上,我的设置是我的“微服务”是monorepo中的子目录。我希望根据这些子目录中是否有更改,为每个子目录分别设置触发器。我试图避免polyrepo,但这听起来似乎是解决办法。否则,只要项目中的任何地方发生了变化,就会触发所有内容进行重建和重新部署 我开始遇到问题,所以我禁用了它。以下两个主要问题:设置azure-pipelines.yaml以在发生更改或手动触发时在子目录上运行,azure,azure-devops,azure-pipelines,Azure,Azure Devops,Azure Pipelines,年初我问了以下问题: 基本上,我的设置是我的“微服务”是monorepo中的子目录。我希望根据这些子目录中是否有更改,为每个子目录分别设置触发器。我试图避免polyrepo,但这听起来似乎是解决办法。否则,只要项目中的任何地方发生了变化,就会触发所有内容进行重建和重新部署 我开始遇到问题,所以我禁用了它。以下两个主要问题: 似乎当管道在CI或CD阶段失败时,我会手动触发它,但由于某种原因,它找不到更改,也不会运行。我必须修改azure pipeline.yaml,方法是注释掉检查更改的任务,
- 似乎当管道在CI或CD阶段失败时,我会手动触发它,但由于某种原因,它找不到更改,也不会运行。我必须修改azure pipeline.yaml,方法是注释掉检查更改的任务,然后运行。或者我必须做出一些小的改变,重新承诺,重新启动,等等
- 有时我只是想手动触发子目录及其关联的管道,我必须执行前面的操作
您需要结合两件事:
- 一个是检测子文件夹中的更改,如(代码在powershell中)
$editedFiles=git diff HEAD~--仅限名称
$editedFiles | ForEach对象{
开关-通配符($\ux){
'SubFolderA/*'{Write Output“##vso[task.setvariable=MicroserviceA]true}
#剩下的路径过滤器
}
}
(您也可以通过检测更改来实现)
- 并使用变量
Build.reason
or(eq(variables['MicroserviceA'], true), eq(variables['Build.Reason'], 'Manual'))
如果使用阶段进行分离,则需要创建一个新阶段,并在其中设置检测子文件夹更改的逻辑,使其他阶段依赖于此阶段,并在其他阶段条件下使用。但是,您需要记住[阶段依赖项及其命名]
阶段:
-阶段:A
工作:
-职位:A1
步骤:
-powershell:|
$editedFiles=git diff HEAD~--仅限名称
$editedFiles | ForEach对象{
开关-通配符($\ux){
'SubFolderA/*'{Write Output“##vso[task.setvariable=MicroserviceA;isooutput=true]true}
#剩下的路径过滤器
}
}
姓名:detectChange
-阶段:B
条件:或(和(successed(),eq(dependencies.A.outputs['A1.detectChange.MicroserviceA'],true)),eq(变量['Build.Reason'],'Manual'))
德彭森:A
工作:
-职位:B1
步骤:
-脚本:从B阶段回显hello
上述方式触发手动触发的所有零件,如果您希望能够选择一个您可以使用
参数:
-名称:configs
类型:字符串
默认值:“全部”
触发器:无
工作:
-${{如果或(包含(parameters.configs,'MicroserviceA'),包含(parameters.configs,'all'))}:
-工作:微服务
步骤:
-脚本:echo构建微服务。。。
-${{如果或(包含(parameters.configs,'MicroserviceB'),包含(parameters.configs,'all'))}:
-工作:微服务
步骤:
-脚本:echo Building MicroService B。。。
-${{如果或(包含(parameters.configs,'MicroserviceC'),包含(parameters.configs,'all'))}:
-工作:微服务
步骤:
-脚本:echo Building MicroService。。。
如何实现此功能?您所指的具体功能是什么?Hi@eox.dev,此票证是否有任何更新?如果您有任何问题,请随时告诉我。如果答案可以帮助,你可以考虑接受它。
or(eq(variables['MicroserviceA'], true), eq(variables['Build.Reason'], 'Manual'))