Azure devops 如何使用Azure和NX部署多个应用程序(monorepo)

Azure devops 如何使用Azure和NX部署多个应用程序(monorepo),azure-devops,monorepo,Azure Devops,Monorepo,我正在使用工具来管理包含多个应用程序的monorepo,我正在努力理解如何使用Azure和发布管道进行部署 免责声明:总体而言,我对Azure和devops非常陌生 我的理解是: 我创建了一个管道(不是发布管道,如果有意义的话,只是一个“常规管道”)并插入一个yml。此外,管道链接到Azure Repos上的一个repo,这意味着每次我推送到这个repo时,它都会触发管道并运行yaml命令。 在这个命令上,我运行lint、test和build 这就是我能做和能理解的,以下内容变得更加模糊了: 如

我正在使用工具来管理包含多个应用程序的monorepo,我正在努力理解如何使用Azure和发布管道进行部署

免责声明:总体而言,我对Azure和devops非常陌生

我的理解是: 我创建了一个管道(不是发布管道,如果有意义的话,只是一个“常规管道”)并插入一个yml。此外,管道链接到Azure Repos上的一个repo,这意味着每次我推送到这个repo时,它都会触发管道并运行yaml命令。 在这个命令上,我运行lint、test和build

这就是我能做和能理解的,以下内容变得更加模糊了:

如果我在master上进行pusing/merging,构建作业应该创建一个工件,我可以对其进行条件化。 现在我可以创建一个发布管道,当它链接到repo时,它将被触发,从而创建一个工件。然后,该发布管道可以将该工件发送到应用程序服务,该应用程序服务是应用程序将驻留的插槽

好的,但我使用的是monorepo,这意味着构建将生成多个应用程序,并且这些应用程序中的每一个都应该部署到正确的应用程序服务

经过一些研究,总体思路是为每个应用程序创建一个发布管道。这些发布管道都链接到同一个monorepo,但它们有一个过滤器,它是一个构建标记。在使用yml文件构建应用程序时添加build标记

这些基本上就是我对所有这些的理解。下面是问题:

  • 构建标签到底是什么?它位于哪里?它是否以某种方式与神器相关联
  • 想法是为每个工件创建一个构建标记,对吗
  • 我未能创建生成标记,如何创建
  • 压缩和发布工件的正确方法是什么

    以下是我正在使用的yaml:

  • 当运行这个时,test、lint和builds都在工作,但我不认为它添加了build标记,下面是日志:

    看起来好像什么都没发生。。。如何正确添加标记并触发发布管道

    我还找到了这个片段来压缩和发布工件,但我不知道我是否可以使用它,因为在monorepo中,我们应该——我认为——创建多个工件

    5) 最后一个问题是:我如何创建多个工件,这是一件好事吗


    非常感谢您的帮助,我知道这是一篇冗长乏味的文章,帮助一个noob可能会很无聊,但我一直坚持这一点,因为它太长了……

    1,您可以从UI页面(构建摘要页面,见下文)或使用添加构建标签。它可以用于在构建之间进行过滤。如果您的构建管道生成了多个工件,那么构建标记将无法过滤在一个构建中生成的工件

    2,因此您可以考虑如何分离管道中每个应用程序的构建工件

    您可以使用压缩构建工件并使用发布

    请参见下面的yaml示例:我使用两个归档文件任务分别打包了app1和app2的构建工件。并将压缩后的工件保存在文件夹
    $(Build.ArtifactStagingDirectory)
    中。 然后发布构建工件任务将工件发布到azure devops云。(发布管道将下载要部署到应用服务器的工件)

    3,然后您可以在发布管道中使用多个阶段并使用。例如:

    在第一阶段中,添加
    Azure应用程序服务部署任务
    ,并将包设置为
    $(System.DefaultWorkingDirectory)/**/app1/dist1.zip以部署app1。在第二阶段,将其设置为$(System.DefaultWorkingDirectory)/**/app2/dist2.zip以部署app2。
    

    在monorepo中部署多个应用程序的另一个解决方法是创建多个构建/发布管道,每个应用程序一个。并且在构建管道中使用,仅当更新相应的应用程序时才触发构建管道

    trigger:
      paths:
        include:
        - root/app1/*
    

    希望以上帮助

    1,您可以从UI页面(构建摘要页面,见下文)或使用添加构建标记。它可以用于在构建之间进行过滤。如果您的构建管道生成了多个工件,那么构建标记将无法过滤在一个构建中生成的工件

    2,因此您可以考虑如何分离管道中每个应用程序的构建工件

    您可以使用压缩构建工件并使用发布

    请参见下面的yaml示例:我使用两个归档文件任务分别打包了app1和app2的构建工件。并将压缩后的工件保存在文件夹
    $(Build.ArtifactStagingDirectory)
    中。 然后发布构建工件任务将工件发布到azure devops云。(发布管道将下载要部署到应用服务器的工件)

    3,然后您可以在发布管道中使用多个阶段并使用。例如:

    在第一阶段中,添加
    Azure应用程序服务部署任务
    ,并将包设置为
    $(System.DefaultWorkingDirectory)/**/app1/dist1.zip以部署app1。在第二阶段,将其设置为$(System.DefaultWorkingDirectory)/**/app2/dist2.zip以部署app2。
    

    在monorepo中部署多个应用程序的另一个解决方法是创建多个构建/发布管道,每个应用程序一个。并且在构建管道中使用,仅当更新相应的应用程序时才触发构建管道

    trigger:
      paths:
        include:
        - root/app1/*
    

    希望以上帮助

    您好,您有机会尝试下面的解决方案吗?进行得如何?您好,很抱歉,尽管信息丰富,但我没有花时间回答这篇帖子。我自己找到了这个解决方案,有很多来回,看起来很像你的解决方案,除了第一部分,在我的解决方案中,我用vso.addBuildTags在yaml文件中动态添加了标记。我想找到一个解决方案来归档和发布受影响的应用程序,而不必为ya中的每个应用程序手动执行
    trigger:
      paths:
        include:
        - root/app1/*