【问题标题】:Specify order of pipelines and dependencies指定管道和依赖项的顺序
【发布时间】:2020-06-11 14:04:50
【问题描述】:

说实话,我很难理解这一点。 目前我的实验室项目如下:

PR to master -> 触发 Pre-Build Pipeline 作为合并代码的条件 ->

合并时基础设施管道仅在我的基础设施文件夹发生任何更改时才运行 ->

在合并时,我想运行我的部署管道以将我的 Web 应用程序部署到 Azure。


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

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

基础设施管道为我的网络应用部署必要的基础设施,例如资源组、应用计划、应用服务、密钥保管库。

Deploy Pipe 下载预部署中生成的工件并部署到阶段槽并将其交换到生产槽。


我似乎无法开始工作的是通过依赖项链接的管道,如果 master 中的基础设施和 Web 应用程序代码都发生更改,我希望基础设施管道首先运行 并且只有在成功时才部署管道。

如果我合并仅应用代码,我希望仅部署管道运行,无论基础设施管道是否运行。

如果我合并仅基础架构代码,我希望仅运行基础架构管道

如果我合并应用程序和基础架构代码,我希望基础架构和部署管道按特定顺序运行

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


编辑:

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

我看到你在即将发布的版本中计划了构建队列,所以现在我想我们可能不得不等待。

如果我要合并我的部署和基础设施管道,我可以使用:

trigger:
  branches:
    include:
    - master
  paths:
    include:
    - Infrastructure/*

在阶段级别并以某种方式跳过一个阶段? 看到多篇文章提到“如果跳过则继续”,但找不到有关如何实际跳过某个阶段的任何信息。

【问题讨论】:

  • 好几天没有收到您的回复,能否分享一下您对此问题的最新信息?如果您有任何疑虑,请随时在此处分享。
  • @HughLin-MSFT 已添加到我的问题中:)
  • At stage level and somehow skip a stage instead?对于这个问题,运行pipeline的时候可以选择which stages to run
  • @HughLin-MSFT 我认为这在代码中还不可用?我的意思是像为 PR 的 Build 验证添加一个 Build policy? :)
  • 我在更新中给出一个粗略的想法,请查看。另外,我不清楚构建策略与这个问题有什么关系。

标签: azure-devops azure-pipelines


【解决方案1】:

对于第一种和第二种情况,只需要在Triggers中设置Path filters,管道只有在指定路径的文件发生变化时才会触发。请参考this

对于第三种情况,可以尝试在infra pipe中添加两个代理作业,在第二个代理作业中添加Trigger Azure DevOps Pipeline任务触发deploy pipe,然后在Run this jobdrop中设置Only when all previous jobs have succeeded -job2 的下拉框。另外,还需要在Trigger Azure DevOps Pipeline任务前添加一个powershell任务,用脚本检测是否有app代码,有则运行job2,没有则取消job2。

更新

  1. 首先可以新建一个管道并创建一个变量:changedcode
  2. 使用Builds - Getrest api 获取提交,然后使用Commits - Get Changesrest api 获取更改的代码文件夹。
  3. 将更改的代码文件夹名称作为值分配给changedcode 变量。
  4. 为代理作业设置custom conditions。在Infra作业中,如果changedcode变量值为Infra,则运行Infra作业。在Infra 作业中,使用Builds-Queue rest api 或Trigger Azure DevOps Pipeline 任务触发Infra 管道。 Deploy 作业也是如此,唯一的区别是自定义条件表达式。

这是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多