git - 用于多层应用程序的 Azure CICD 流程
问题描述
我们有 Web 应用程序:前端应用程序 + 由多个逻辑层组成的后端。这是简化的架构:
客户端应用程序通过 web api 到达聚合器,该聚合器调用 sdk,然后更新和增强数据。Sdk 具有其他 DAL 或 Web api 的包装器。服务直接与聚合器对话。
我们使用 Visual Studio 进行开发,最初 vs 解决方案将所有层包含在一个地方:
- 网页 API
- 网络 API 模型
- 聚合器
- 聚合器模型
- sdk
- sdk模型
- 服务
- 网络工作
- ETC
我们使用 microsoft stack 和 azure devops 来部署 Web api 和其他应用程序,例如 Web 作业和服务。为此,我们使用 CICD 流程(我们定义了构建和发布定义 + 触发器)。
将新代码推送到 git 时开始构建。发布发生在创建新版本时。
问题是如果我们需要发布 web api,那么所有项目都已构建并执行相应的发布。所以我们决定解耦所有的东西。现在我们有几个解决方案而不是一个,我们将它们按层分解,如上图所示:
解决方案1:
- 网页 API
- 网络 API 模型
解决方案2:
- 聚合器
- 聚合器模型
解决方案3:
- sdk
- sdk模型
解决方案4:
- 服务
解决方案 5:
- 网络工作
解决方案 N...
- ETC
为了连接层,我们决定使用 Nuget 包,以便 sdk 在一个 nuget 中,sdk.models 在另一个中,等等......
现在的问题是,假设我想在 sdk.models 中进行更改,这里是更新所有内容的手动步骤(没有 CICD):
- 添加对 sdk.models 的更改
- 将 sdk.models 包推送到 nuget
- 更新 sdk 项目中的 nugets
- 将 sdk 包推送到 nuget
- 更新聚合器项目中的 nuget
- 将聚合器包推送到 nuget
- 更新所有客户端应用程序以具有最新的聚合器 nuget 包
纯粹的疯狂...
...但它允许人们在每一层上独立工作。这可以被认为是一个优势。
现在我们回到 CICD。触发器链接到 git push 事件,如果提交了新代码,则创建构建,然后发布定义发布内容。因此,例如在 sdk 的情况下,解决方案包含两个项目:sdk 和 sdk.models,所以如果我将新代码添加到 sdk.models 并推送到 git,然后触发器会为 sdk 和 sdk.models 激活构建,并且一旦构建准备好然后发布将两个 nuget 包推送到 nuget 提要。但这是不正确的,因为 sdk 应该更新对 sdk.models 包的较新版本的引用,然后再发布。我看到如何解决它的唯一方法是将 sdk.models 移动到不同的解决方案/存储库。没关系,只是我们将有更多的解决方案和存储库需要管理,并且调试和开发将变得更加困难......
问:你觉得我说的都说得通吗?如何改进/改变它?拥有更高效的环境。请有任何建议、批评或建议。
感谢您的阅读。
解决方案
推荐阅读
- angular - Facebook登录弹出窗口在成功登录后没有关闭,我没有得到任何回应
- java - 如何在复合/装饰模式中减少样板代码
- powershell - 将列添加到输出
- c# - StyleCop公司名称和版权如何设置?(带有 R# 的 VS2019)
- signalr - 从另一台计算机发出时,跨域 SignalR 不起作用
- java - 从 JIRA Web 面板调用 Java 类
- javascript - 带有年、月、日、小时和分钟的 date-fns 倒计时
- reactjs - 如何使用 React js 附加元素以在完整日历事件中显示更多文本?
- java - java.sql.SQLRecoverableException - 从 jdbc 重新连接
- angular - 如何使用来自另一个组件的布尔值以角度隐藏和显示组件中的两个 div