Azure devops 指定管道和依赖项的顺序

Azure devops 指定管道和依赖项的顺序,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,老实说,我很难掌握这一点。 目前,我的实验室项目如下: PR to master->触发预构建管道作为合并代码的条件-> 只有在“我的基础结构”文件夹中发生任何更改时,才会运行“合并”基础结构管道 在合并时,我想运行部署管道将我的web应用部署到Azure 有问题的管道做了它们应该做的事情,即 预构建构建、发布工件、运行单元测试、验证ARM模板 Infra pipe为我的web应用部署必要的Infra,如资源组、应用程序计划、应用程序服务、密钥库 部署管道下载预部署中生成的工件,并部署到后台插

老实说,我很难掌握这一点。 目前,我的实验室项目如下:

PR to master->触发预构建管道作为合并代码的条件->

只有在“我的基础结构”文件夹中发生任何更改时,才会运行“合并”基础结构管道

在合并时,我想运行部署管道将我的web应用部署到Azure


有问题的管道做了它们应该做的事情,即

预构建构建、发布工件、运行单元测试、验证ARM模板

Infra pipe为我的web应用部署必要的Infra,如资源组、应用程序计划、应用程序服务、密钥库

部署管道下载预部署中生成的工件,并部署到后台插槽,然后将其交换到生产插槽


我似乎无法开始工作的是通过依赖项的管道链接,如果主控中的infra和web app代码都发生了更改,我希望infra管道先运行
,只有成功后才运行deploy管道

如果我只合并应用程序代码,我希望只运行部署管道,不管infra管道是否运行

如果我只合并infra代码,我希望只运行infra管道

如果我合并应用程序和infra代码,我希望infra和deploy管道都能按特定顺序运行

我觉得这应该不是很难做到,但我花了太多时间试图解决这个问题,但没有结果,有人能帮忙吗?:)


编辑:

嘿,抱歉@HughLin MSFT一直试图解决这个问题,因为我们试图避免左右运行脚本。:)

我看到您在即将发布的版本中已经计划好构建队列,所以现在我认为我们可能不得不等待

如果要合并部署和infra管道,我可以使用:

trigger:
  branches:
    include:
    - master
  paths:
    include:
    - Infrastructure/*
在舞台级别,以某种方式跳过某个舞台?
看到多篇文章提到“如果跳过,则继续”,但找不到有关如何实际跳过某个阶段的任何信息。

对于第一种和第二种情况,您只需在触发器中设置
路径筛选器,管道仅在指定路径的文件更改时触发。请参阅

对于第三种情况,您可以尝试在
infra管道
中添加两个代理作业,将
触发Azure DevOps管道
任务添加到第二个代理作业以触发
部署管道
,然后仅在作业2的
运行此作业
下拉框中设置
。此外,您需要在
触发Azure DevOps管道
任务之前添加powershell任务,并使用脚本检测是否存在应用程序代码,如果存在则运行job2,如果没有则取消job2

更新

  • 首先,您可以创建一个新管道并创建一个变量:
    changedcode
  • 使用RESTAPI获取提交,然后使用RESTAPI获取更改的代码文件夹
  • 将更改的代码文件夹名称作为值分配给
    changedcode
    变量
  • 为代理作业设置。在
    Infra
    作业中,如果
    changedcode
    变量值为
    Infra
    ,则运行
    Infra
    作业。在
    Infra
    作业中,使用rest api或
    Trigger Azure DevOps管道
    任务触发
    Infra
    管道。
    Deploy
    job也是如此,唯一的区别是自定义条件表达式
  • 以下是yaml中的示例结构:

    jobs:
      variables: 
        changedcode: ""
    - job:
      steps:
      - powershell: |
        #Get the changed code folder with rest api
    
    - job: Infra 
      condition: containsValue($(changedcode), "Infra"))
      - powershell: |
        #queue Infra pipeline with rest api or Trigger Azure DevOps Pipeline task
    
    - job: Deploy
      condition: (containsValue($(changedcode), "deploy")),and ....
     - powershell: |
      #queue Deploy pipeline with rest api or Trigger Azure DevOps Pipeline task
    

    好几天没有收到您的回复,请您分享您关于此问题的最新信息好吗?如果您有任何问题,请随时在此处分享。@HughLin MSFT在我的问题中添加了:)
    在阶段级别,并以某种方式跳过一个阶段?
    对于此问题,当您运行管道时,您可以选择。@HughLin MSFT我想这在代码中还不可用?我的意思是,就像为PR添加了一个用于构建验证的我在更新中给出了一个粗略的想法,请查看。此外,我不清楚构建策略与此问题有何关系。