多层应用程序的Azure CICD流程

时间:2019-03-29 17:26:55

标签: git azure architecture continuous-integration nuget

我们有一个Web应用程序:前端应用程序+后端,它由几个逻辑层组成。这是简化的架构:

Architecture

通过Web api的客户端应用程序到达聚合器,该聚合器调用sdk,然后更新和增强数据。 SDK可以包装其他DAL或Web API。服务直接与聚合器通信。

我们使用Visual Studio进行开发,最初,vs解决方案将所有层包含在一个地方:

  • 网络API
  • 网络api模型
  • 聚合器
  • aggreagator模型
  • sdk
  • sdk模型
  • 服务
  • 网络工作

我们使用Microsoft Stack和Azure Devops部署Web API和其他应用程序,例如Web作业和服务。为此,我们使用CICD流程(我们定义了构建和发布定义+触发器)。

当新代码被推送到git时,构建开始。创建新版本时会发布。

问题是,如果我们需要发布Web api,则将构建所有项目并执行相应的发行版。因此,我们决定将所有东西分离。现在我们有几种解决方案,而不是一种,我们按上图所示将它们分成几层:

解决方案1:

  • 网络API
  • 网络api模型

解决方案2:

  • 聚合器
  • aggreagator模型

解决方案3:

  • sdk
  • sdk模型

解决方案4:

  • 服务

解决方案5:

  • 网络工作

解决方案N ...

为了连接层,我们决定使用Nuget包,以便sdk位于一个nuget中,而sdk.models位于另一个nuget中,等等...

现在的问题是,例如,如果我想在sdk.models中进行更改,以下是手动步骤(无CICD)来更新所有内容:

  1. 将更改添加到sdk.models
  2. 将sdk.models包推送到nuget
  3. 更新sdk项目中的nugets
  4. 将sdk包推送到nuget
  5. 更新聚合器项目中的nugets
  6. 将聚合程序包推送到nuget
  7. 更新所有客户端应用以具有最新的聚合器nuget包

纯粹的疯狂...

...但是它允许人们在每一层上独立工作。可以认为是优势。

现在,我们回到CICD。触发器链接到git push事件,如果提交了新代码,则创建build,然后发布定义发布内容。因此,例如在sdk的情况下,解决方案包含两个项目:sdk和sdk.models,因此,如果我将新代码添加到sdk.models并推送到git,则触发激活sdk和sdk.models的构建,并且一旦构建就绪然后发布将两个nuget包都推送到nuget feed。但这是不正确的,因为sdk应该更新对sdk.models包的较新版本的引用,然后才能发布。我看到解决问题的唯一方法是将sdk.models移至不同的解决方案/存储库。可以,除了我们将有更多的解决方案和存储库需要管理,而且调试和开发将变得更加困难...

问题: 您认为我所说的一切有意义吗?如何改善/改变它?拥有更高效的环境。请提供任何建议,批评或建议。

感谢您阅读。

0 个答案:

没有答案