目前我们正在与Jenkins合作作为我们的CI和CD,我们也在使用敏捷方法(sprint)。我想知道如何管理我的软件版本。
例如,我们正在为企业开发购物网站。该开发包括一个消耗3个微服务的应用程序。
组件:
应用程序:是用户界面
微服务1:销售
微服务2:用户
微服务3:产品
购物网站的初始状态:
我们从头开始开发购物网站。正如我之前所说,我们正在使用敏捷方法论(Sprints)。
Sprint 1:
- 开发产品微服务。
- 开发用户微服务。
冲刺结束1
此时我只能应用微服务测试,如单元测试,合同测试等。由于我没有准备好应用程序,我无法进行端到端测试或功能测试。整个系统,我也可以部署到UAT环境(向用户显示测试版),因为用户无法进行探索性测试。所以现在我需要等到应用程序和销售微服务完成,这样我才能向用户展示测试版并应用任何其他类型的测试。
Sprint 2:
- 开发销售微服务。
- 开发应用程序。
冲刺结束2
现在已完成所需的所有组件以完成用户需求,我们可以继续管道。在我们向用户展示测试版之前应用所有必需的测试。
所以百万美元的问题是,你会如何使用Jenkins和GitLab做这个场景?
我知道微服务应该独立于系统中的每个组件,但最后整个系统相互依赖,例如,如果我添加一个新的微服务,如" shipping",这应该在应用程序界面中看到新功能,因此这意味着在发布新系统之前,我依赖于"运输"微服务和应用程序接口,因为没有这两个开发,我无法在部署到生产之前完全测试用户需求。
P.S。对于这篇文章中的任何混淆我感到抱歉,但我在这个主题上完成了新的内容。
答案 0 :(得分:0)
微服务的“独立”方面在这里至关重要。基本上,您应该能够将每个服务视为一个独立的应用程序,并且您的UI不应该依赖于销售/用户/产品服务作为“libs”(例如C#DLL,Java Jars等),而应该使用某种类型的API(例如REST API)互相调用。
为了说明不同之处,你不应该这样:
但你应该有类似的东西。
现在让我们假设您在UI和每个服务之间使用REST API处于精彩的微服务世界。
在詹金斯,它变得相当简单。对于每个服务(+主应用程序),您需要在目标服务器上编译,测试和部署服务的作业。
只要您的服务是独立的,并且正确处理应用版本,您就不需要在任何Jenkins作业之间进行任何同步。
当然,构建/测试/部署过程将在公共管道文件中外部化,以便您可以在不同的作业中重复使用它。在提交使用新销售终端的UI部件之前,只需在销售服务上提交一个新的API端点......但我认为这只是常识!
如果你是詹金斯的新手,那么pipeline documentation就是一个好的开始!