Docker最全教程——从理论到实战(八)
使用Azure DevOps来完成CI
Azure DevOps,以前叫VSTS,现在被微软改名部正式更名为Azure DevOps,说明微软云为先之心仍然蠢蠢欲动。不过和VSTS一样,微软都提供了免费的使用额度,对于小团队和个人开发者来说,完全是足够了。
什么是DevOps?
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。
DevOps的引入能对产品交付、测试、功能开发和维护(包括──曾经罕见但如今已屡见不鲜的──“热补丁”)起到意义深远的影响。在缺乏DevOps能力的组织中,开发与运营之间存在着信息“鸿沟”──例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务用户的需求则是更快地将更多的特性发布给最终用户使用。这种信息鸿沟就是最常出问题的地方。
DevOps经常被描述为“开发团队与运营团队之间更具协作性、更高效的关系”。由于团队间协作关系的改善,整个组织的效率因此得到提升,伴随频繁变化而来的生产环境的风险也能得到降低。
总之,通过DevOps,各专业团队之间的协调和协作得到改善,缩短了将更改提交到系统与将更改投入到生产之间的时间。它还可确保此过程符合安全性和可靠性标准。结果:产品质量改善、交付速度加快、客户满意度提升。
DevOps对应用程序发布的影响
在很多企业中,应用程序发布是一项涉及多个团队、压力很大、风险很高的活动。然而在具备DevOps能力的组织中,应用程序发布的风险很低,原因如下:
- 减少变更范围
与传统的瀑布式开发模型相比,采用敏捷或迭代式开发意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长。
- 加强发布协调
靠强有力的发布协调人来弥合开发与运营之间的技能鸿沟和沟通鸿沟;采用电子数据表、电话会议、即时消息、企业门户(wiki、sharepoint)等协作工具来确保所有相关人员理解变更的内容并全力合作。
- 自动化
强大的部署自动化手段确保部署任务的可重复性、减少部署出错的可能性。
与传统开发方法那种大规模的、不频繁的发布(通常以“季度”或“年”为单位)相比,敏捷方法大大提升了发布频率(通常以“天”或“周”为单位)。减少变更范围与传统的瀑布式开发模型相比,采用敏捷或迭代式开发意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长。加强发布协调靠强有力的发布协调人来弥合开发与运营之间的技能鸿沟和沟通鸿沟;采用电子数据表、电话会议、即时消息、企业门户(wiki、sharepoint)等协作工具来确保所有相关人员理解变更的内容并全力合作。强大的自动化部署手段能够确保部署任务的可重复性、减少部署出错的可能性。
适用于容器的 CI/CD 流程
使用容器,可轻松地持续生成和部署应用程序。
Azure DevOps 可以通过设置持续版本以生成容器映像和业务流程,让我们能更快、更可靠地进行部署。以下是一个适用于容器和Azure的CI/CD 流程:
步骤说明:
使用Azure DevOps来配置一个简单的CI流程
Azure DevOps服务涵盖了整个开发生命周期,可帮助开发人员更快地高质量地交付软件,其提供了Azure Pipelines、Azure Boards、Azure Artifacts、Azure Repos和Azure Test Plans。关于Azure DevOps我们就介绍到这里,毕竟是免费介绍。
现在,我们需要侧重介绍的是Pipelines,也就是代码流水线。看,多形象,所以以前自诩为码农是错误的,我们应该是码工,广大流水线工人的一环,无产阶级之一,共产主义接班人。不好意思,又偏题了,我们继续:
首先,我们需要定义一个流水线,为了便于演示,我这里就定义一些针对Docker的简单步骤,大家可以按需添加步骤,比如单元测试步骤等等。
如图所示,步骤很简单,首先设置代码源,这里我们直接对接Magicodes.Admin框架的git库地址。Git库地址大家可以在这里找到:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core。
因为代码是托管再码云,所以我们选择如上图所示的最后一种方式,并且选择对应的分支。
接下来,我们需要添加job和task。job添加一个默认的即可,无需设置什么条件和参数。接下来我们添加task,实际上就是步骤。
第一步,构建镜像。
我们需要添加一个docker task:
然后设置command命令为build,也就是构建:
构建配置我们可以根据自己的需求来设置,比如根据分支设置镜像版本等等。
第二步,登录腾讯云镜像仓库并且推送。
这一步,就有点门槛了,原生的docker命令并不好使,因为task之间的上下文是断开的,也就是login了你也没法push。这时候,还是命令行靠谱,简单粗暴。所以我们需要添加一个Command line task:
然后编写命令脚本:
简单粗暴的两个步骤就搞定了,大家可以根据自己的持续集成流程来定制,毕竟微软在开发者服务这块淫荡多年,还是相当给力的。我们可以初步看看支持的task:
非常之多,足够我们随便玩了。而且玩坏了还不用赔钱。
接下来,跑起来:
点开还能看到详细的过程:
激不激动,简单不简单?就这么几下就搞定了。产品很强大,就是拉取代码有点慢,看起来是托管在国外。顺手一查,额,美国:
因此,我们不是很推荐使用Azure DevOps来完成CI,网络的延迟足够拖垮我们焦虑的神经。但是如果我们的代码托管在Github,那么使用Azure DevOps是不错的选择。在接下来的教程中,我们会讲解如何打造自己的Github开源库的CI流程——不仅完全自动化,而且还支持在readme页面添加各种动态图标。