Docker最全教程——从理论到实战(八)
<p><strong>在本系列教程中,笔者希望将必要的知识点围绕理论、流程(工作流程)、方法、实践来进行讲解,而不是单纯的为讲解知识点而进行讲解。也就是说,笔者希望能够让大家将理论、知识、思想和指导应用到工作的实际场景和实践之中,而不是拿着字典写文章,抱着宝典写代码。至于很多具体的语法、技术细节,除了常用的知识点,笔者更希望大家阅读官方文档——毕竟看官网比看书靠谱多了,官网会一直更新和改进,而书和教程自出版或发布之后,基本上就“死“了。</strong></p><p><strong>本系列教程预计全部完成还需要2到3个月的时间。在这个过程中,您可以加入我们一起讨论、交流和分享这一块的技术。我们也希望得到大家的支持,请多多点赞,你们的支持是我们前进的最大动力!</strong></p>
<h2><span style="font-family: 宋体">使用</span>Azure<strong style="font-size: 1.17em"> DevOps</strong><strong style="font-size: 1.17em"><span style="font-family: 宋体">来完成</span>CI</strong></h2>
<p>Azure DevOps<span style="font-family: 宋体">,以前叫</span>VSTS<span style="font-family: 宋体">,现在被微软改名部正式更名为</span><span style="font-family: Calibri">Azure</span> DevOps<span style="font-family: 宋体">,说明微软云为先之心仍然蠢蠢欲动。不过和</span>VSTS<span style="font-family: 宋体">一样,微软都提供了免费的使用额度,对于小团队和个人开发者来说,完全是足够了。</span></p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092320482-1692738252.png" alt=""></p>
<h3><strong>什么是</strong><strong>DevOps</strong><strong>?</strong></h3>
<p>DevOps<span style="font-family: 宋体">(</span><span style="font-family: Calibri">Development</span><span style="font-family: 宋体">和</span><span style="font-family: Calibri">Operations</span><span style="font-family: 宋体">的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序</span><span style="font-family: Calibri">/</span><span style="font-family: 宋体">软件工程)、技术运营和质量保障(</span><span style="font-family: Calibri">QA</span><span style="font-family: 宋体">)部门之间的沟通、协作与整合。</span><span style="font-family: 宋体">它是一种重视</span>“软件开发人员(Dev<span style="font-family: 宋体">)</span><span style="font-family: Calibri">”</span><span style="font-family: 宋体">和</span><span style="font-family: Calibri">“IT</span><span style="font-family: 宋体">运维技术人员(</span><span style="font-family: Calibri">Ops</span><span style="font-family: 宋体">)</span><span style="font-family: Calibri">”</span><span style="font-family: 宋体">之间沟通合作的文化、运动或惯例。透过自动化</span><span style="font-family: Calibri">“</span><span style="font-family: 宋体">软件交付</span><span style="font-family: Calibri">”</span><span style="font-family: 宋体">和</span><span style="font-family: Calibri">“</span><span style="font-family: 宋体">架构变更</span><span style="font-family: Calibri">”</span><span style="font-family: 宋体">的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。</span>它的出现是由于软件行业日益清晰地认识到:<strong>为了按时交付软件产品和服务,开发和运营工作必须紧密合作。</strong></p>
<p><img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092339320-10500400.png" alt=""> </p>
<p>DevOps<span style="font-family: 宋体">的引入能对产品交付、测试、功能开发和维护(包括</span><span style="font-family: Calibri">──</span><span style="font-family: 宋体">曾经罕见但如今已屡见不鲜的</span><span style="font-family: Calibri">──“</span><span style="font-family: 宋体">热补丁</span><span style="font-family: Calibri">”</span><span style="font-family: 宋体">)起到意义深远的影响。在缺乏</span><span style="font-family: Calibri">DevOps</span><span style="font-family: 宋体">能力的组织中,开发与运营之间存在着信息</span><span style="font-family: Calibri">“</span><span style="font-family: 宋体">鸿沟</span><span style="font-family: Calibri">”──</span><span style="font-family: 宋体">例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务用户的需求则是更快地将更多的特性发布给最终用户使用。这种信息鸿沟就是最常出问题的地方。</span></p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092352197-1383508220.png" alt=""></p>
<p>DevOps<span style="font-family: 宋体">经常被描述为</span><span style="font-family: Calibri">“</span><span style="font-family: 宋体">开发团队与运营团队之间更具协作性、更高效的关系</span><span style="font-family: Calibri">”</span><span style="font-family: 宋体">。由于团队间协作关系的改善,整个组织的效率因此得到提升,伴随频繁变化而来的生产环境的风险也能得到降低。</span></p>
<p><span style="font-family: 宋体">总之,通过</span>DevOps,各专业团队之间的协调和协作得到改善,缩短了将更改提交到系统与将更改投入到生产之间的时间。它还可确保此过程符合安全性和可靠性标准。结果:产品质量改善、交付速度加快、客户满意度提升。</p>
<h3><strong>DevOps<span style="font-family: 宋体">对应用程序发布的影响</span></strong></h3>
<p>在很多企业中,应用程序发布是一项涉及多个团队、压力很大、风险很高的活动。然而在具备DevOps<span style="font-family: 宋体">能力的组织中,应用程序发布的风险很低,原因如下</span>:</p>
<ol>
<li><strong>减少变更范围</strong></li>
</ol>
<p>与传统的瀑布式开发模型相比,采用敏捷或迭代式开发意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长。</p>
<p> </p>
<ol>
<li><strong>加强发布协调</strong></li>
</ol>
<p>靠强有力的发布协调人来弥合开发与运营之间的技能鸿沟和沟通鸿沟;采用电子数据表、电话会议、即时消息、企业门户(wiki<span style="font-family: 宋体">、</span><span style="font-family: Calibri">sharepoint</span><span style="font-family: 宋体">)等协作工具来确保所有相关人员理解变更的内容并全力合作。</span></p>
<p> </p>
<ol>
<li><strong>自动化</strong></li>
</ol>
<p>强大的部署自动化手段确保部署任务的可重复性、减少部署出错的可能性。</p>
<p><span style="font-family: 宋体">与传统开发方法那种大规模的、不频繁的发布(通常以</span>“季度”或“年”为单位)相比,敏捷方法大大提升了发布频率(通常以“天”或“周”为单位)。减少变更范围与传统的瀑布式开发模型相比,采用敏捷或迭代式开发意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长。加强发布协调靠强有力的发布协调人来弥合开发与运营之间的技能鸿沟和沟通鸿沟;采用电子数据表、电话会议、即时消息、企业门户(wiki<span style="font-family: 宋体">、</span><span style="font-family: Calibri">sharepoint</span><span style="font-family: 宋体">)等协作工具来确保所有相关人员理解变更的内容并全力合作。强大的自动化部署手段能够确保部署任务的可重复性、减少部署出错的可能性。</span></p>
<p> </p>
<h3><strong>适用于容器的</strong><strong> CI/CD </strong><strong>流程</strong></h3>
<p>使用容器,可轻松地持续生成和部署应用程序。</p>
<p>Azure DevOps 可以<span style="font-family: 宋体">通过设置持续版本以生成容器映像和业务流程,让</span>我们<span style="font-family: 宋体">能更快、更可靠地进行部署。</span><span style="font-family: 宋体">以下是一个适用于容器和</span>Azure<span style="font-family: 宋体">的</span><span style="font-family: Calibri">C</span>I/CD 流程:</p>
<p><img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092727986-1884715932.png" alt=""> </p>
<p>步骤说明:</p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092737562-971507376.png" alt=""></p>
<h3><strong><span style="font-family: 宋体">使用</span>Azure</strong><strong> </strong><strong>DevOps<span style="font-family: 宋体">来配置一个简单的</span><span style="font-family: "Calibri Light"">CI</span><span style="font-family: 宋体">流程</span></strong></h3>
<h3> </h3>
<p>Azure DevOps服务涵盖了整个开发生命周期,可帮助开发人员更快地高质量地交付软件,其提供了Azure Pipelines、Azure Boards、Azure Artifacts、Azure Repos和Azure Test Plans<span style="font-family: 宋体">。关于</span>Azure DevOps我们就介绍到这里,毕竟是免费介绍。</p>
<p>现在,我们需要侧重介绍的是Pipelines,也就是代码流水线。看,多形象,所以以前自诩为码农是错误的,我们应该是码工,广大流水线工人的一环,无产阶级之一,共产主义接班人。不好意思,又偏题了,我们继续:</p>
<p><img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092805895-1126859391.png" alt=""> </p>
<p><span style="font-family: 宋体">首先,我们需要定义一个流水线,为了便于演示,我这里就定义一些针对</span>Docker<span style="font-family: 宋体">的简单步骤,大家可以按需添加步骤,比如单元测试步骤等等。</span></p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092818599-1332988674.png" alt=""></p>
<p><span style="font-family: 宋体">如图所示,步骤很简单,首先设置代码源,这里我们直接对接</span>Magicodes.Admin<span style="font-family: 宋体">框架的</span>git库地址。Git<span style="font-family: 宋体">库地址大家可以在这里找到:</span><span style="text-decoration: underline">https://gitee.com/xl_wenqiang/Magicodes.Admin.Core</span>。</p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092832816-122740150.png" alt=""></p>
<p>因为代码是托管再码云,所以我们选择如上图所示的最后一种方式,并且选择对应的分支。</p>
<p><span style="font-family: 宋体">接下来,我们需要添加</span>job<span style="font-family: 宋体">和</span><span style="font-family: Calibri">task</span><span style="font-family: 宋体">。</span><span style="font-family: Calibri">job</span><span style="font-family: 宋体">添加一个默认的即可,无需设置什么条件和参数。接下来我们添加</span><span style="font-family: Calibri">task</span><span style="font-family: 宋体">,实际上就是步骤。</span></p>
<p>第一步,构建镜像。</p>
<p><span style="font-family: 宋体">我们需要添加一个</span>docker task:</p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092849255-1301288828.png" alt=""></p>
<p><span style="font-family: 宋体">然后设置</span>command<span style="font-family: 宋体">命令为</span>build<span style="font-family: 宋体">,也就是构建:</span></p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092859391-211007445.png" alt=""></p>
<p><img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092913861-1537424907.png" alt=""></p>
<p>构建配置我们可以根据自己的需求来设置,比如根据分支设置镜像版本等等。</p>
<p>第二步,登录腾讯云镜像仓库并且推送。</p>
<p><span style="font-family: 宋体">这一步,就有点门槛了,原生的</span>docker<span style="font-family: 宋体">命令并不好使,因为</span><span style="font-family: Calibri">task</span><span style="font-family: 宋体">之间的上下文是断开的,也就是</span><span style="font-family: Calibri">lo</span>gin<span style="font-family: 宋体">了你也没法</span>push<span style="font-family: 宋体">。这时候,还是命令行靠谱,简单粗暴。所以我们需要添加一个</span><span style="font-family: Calibri">Comman</span>d line task<span style="font-family: 宋体">:</span></p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092927548-1422575942.png" alt=""></p>
<p>然后编写命令脚本:</p>
<p><img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092939156-1239076938.png" alt=""> </p>
<p><span style="font-family: 宋体">简单粗暴的两个步骤就搞定了,大家可以根据自己的持续集成流程来定制,毕竟微软在开发者服务这块淫荡多年,还是相当给力的。我们可以初步看看支持的</span>task<span style="font-family: 宋体">:</span></p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226092957645-1484526574.png" alt=""></p>
<p>非常之多,足够我们随便玩了。而且玩坏了还不用赔钱。</p>
<p>接下来,跑起来:</p>
<p><img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226093007203-1717865787.png" alt=""> </p>
<p>点开还能看到详细的过程:</p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226093016456-2121455975.png" alt=""></p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226093212885-664719110.png" alt=""></p>
<p> 激不激动,简单不简单?就这么几下就搞定了。产品很强大,就是拉取代码有点慢,看起来是托管在国外。顺手一查,额,美国:</p>
<p> <img src="https://img2018.cnblogs.com/blog/70544/201812/70544-20181226093227386-434423588.png" alt=""></p>
<p><span style="font-family: 宋体">因此,我们不是很推荐使用</span>Azure DevOps<span style="font-family: 宋体">来完成</span><span style="font-family: Calibri">CI</span><span style="font-family: 宋体">,网络的延迟足够拖垮我们焦虑的神经。但是如果我们的代码托管在</span><span style="font-family: Calibri">Github</span><span style="font-family: 宋体">,那么使用</span><span style="font-family: Calibri">Azure</span> DevOps<span style="font-family: 宋体">是不错的选择。在接下来的教程中,我们会讲解如何打造自己的</span>Github<span style="font-family: 宋体">开源库的</span>CI<span style="font-family: 宋体">流程——不仅完全自动化,而且还支持在</span><span style="font-family: Calibri">read</span>me页面添加各种动态图标。</p>
<p> </p>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter">
<h2><strong>往期内容链接</strong></h2>
</div>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter">Docker最全教程——从理论到实战(一)</div>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter">
<p>Docker最全教程——从理论到实战(二)</p>
</div>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter">Docker最全教程——从理论到实战(三)</div>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter">
<p>Docker最全教程——从理论到实战(四)</p>
Docker最全教程——从理论到实战(五)</div>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter">Docker最全教程——从理论到实战(六)<br></div>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter"> Docker最全教程——从理论到实战(七)</div>
<div class="ace-line gutter-noauthor text-align-type-justify pap-stylesheet-name-normal emptyGutter">我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1uzymsc0hstza</div>
</div>
<div id="MySignature" role="contentinfo">
作者:雪雁<br>出处:http://www.cnblogs.com/codelove/
<br>如果喜欢作者的文章,请关注【CodeSpirit-码灵】公众号以便第一时间获得最新内容。本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。<br><b>静听鸟语花香,漫赏云卷云舒。</b>
<br>
<img src="https://images.cnblogs.com/cnblogs_com/codelove/315887/o_251224070213_%E5%85%AC%E4%BC%97%E5%8F%B7.jpg" width="100" height="100"><br><br>
来源:https://www.cnblogs.com/codelove/p/10177467.html
頁:
[1]