.Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续交付/部署(CD)...

上一次演示了如何.Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续集成(CI),讲到这里我们push一下代码后就自动编译、自动跑单元测试、自动构建镜像、自动推送镜像到私仓。那么离我们最初设定的目标只差那么一小步了,那就是自动部署到测试/生产环境,这一步就是持续交付/部署(CD)。

CD其实是两个意思

(1)Continuous delivery (持续交付)  指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
(2)continuous deployment(持续部署)   指的是代码通过评审以后,自动部署到生产环境。

摘自阮一峰大神的blog

之前我一直以为CD只是持续部署的意思,最近仔细查资料才发其实是有两层意思。虽然是两层意思,但是其实也差不多,都是部署到某个可以运行起来的环境中,把程序跑起来。持续交付一般是部署到测试环境,供测试团队评审;持续部署是指通过测试评审后把程序部署到生产环境。既然差不多这里我就不细分了,因为都是部署,只是部署的位置不一样。

流程


上次的流程到把镜像推送到私仓(阿里云容器镜像服务)后就结束了,后面的流程需要手动跑shell脚本来完成。我们要把后面的流程串起来,让shell脚本自动运行起来,需要一个触发机制,比如webhook。幸好,阿里云容器镜像服务有这么一个功能,可以让我们把流程串起来,那就是触发器功能。这个触发器功能跟webhook其实差不多,当容器镜像服务收到新镜像后会对外发送一个HTTP POST请求。那么我们只需要在服务器上部署一个web服务,当接收到POST请求的时候就运行服务器端的shell脚本,拉取镜像,运行容器,这样程序就部署起来了。

新建PublishHook服务

上面已经说了为了接收容器镜像服务发出的POST请求,需要一个web服务来接收处理请求。这个服务很简单,使用ASP.NET MVC都是杀鸡用牛刀,仅仅是监控一个请求而已。这里我使用另外一个轮子AServerhttps://github.com/kklldog/AServer 。

1. 新建一个控制台程序,取名PublishHook

2. 使用nuget安装AServer

3. 修改Program的main函数

using Agile.FrameworkNetCore.Log;
using System;
using System.Diagnostics;
namespace PublishHook
{class Program{static void Main(string[] args){Console.WriteLine("PublishHook is running now !");var server = new Agile.AServer.Server();server.AddHandler(new Agile.AServer.HttpHandler(){Method = "POST",Path = "/api/hook",Handler = (req, resp) =>{string shell_name = req.Query.shell;if (!string.IsNullOrEmpty(shell_name)){RunShell(shell_name);}return resp.Write("ok");}});server.SetIP("0.0.0.0").SetPort(9000).Run();Console.Read();}static void RunShell(string fileName){var processStartInfo = new ProcessStartInfo(fileName) { RedirectStandardOutput = true };var process = Process.Start(processStartInfo);if (process == null){Console.WriteLine("Can not run shell .");}else{using (var sr = process.StandardOutput){while (!sr.EndOfStream){var str = sr.ReadLine();Console.WriteLine(str);Logger.Info(str);}if (!process.HasExited){process.Kill();}}}}}
}

启动一个http Server监听9000端口,添加一个http handler,接收请求,解析QueryString获取脚本名称,然后运行脚本

运行publish_hook

sudo dotnet restore
sudo dotnet publish


使用dotnet publish命令发布这个程序,然后复制到服务器上。

sudo dotnet PublishHook.dll



使用dotnet命令在服务器上运行这个服务。注意:这个服务不能使用docker运行,因为它要运行shell脚本来操作宿主机的docker。如果这个服务跑在容器内,那么它执行的shell是相对于它的容器来说的,无法操作宿主机的docker环境。

复制上次新建的publishcicdtest.sh脚本文件到PublishHook程序目录并赋予权限

复制上次新建的publishcicdtest.sh脚本文件到PublishHook程序目录,一遍程序能够从根目录读取。

chmod +x publish_cicd_test.sh

使用chmod +x给shell脚本赋值可执行权限

在容器镜像服务新建触发器


点击创建触发器
在新建界面填写触发器名称,触发器url。这个url就是PublishHook监听的地址

测试一下

配置好容器镜像服务的触发器后,我们的配置工作基本都完成了。让我们修改一下CoreCICDTest项目,然后push到Gitee上,看push后能不能全自动的部署成功。

@{ViewData["Title"] = "Home Page";
}
<h3>.NET CORE CICD TEST -- V 3.0
</h3>

修改home/index首页,从V2.0改为V3.0,然后使用git push命令推送代码。等待一会后,访问一下CoreCICDTest的网址。
Wow!可以看到我们的网址已经自动部署成功了,终于完成了我们一开始设定的目标。

总结

回顾整个过程,我们可以发现各个服务之间虽然是彼此独立,但是我们可以通过WebHook功能串联起来。甚至最后我们自己定义了一个WebHook的监听程序来替我们执行对应的脚步。其实通过这种思想我们可以把更多的流程串联起来,实现更多自动化流程。
这次我们顺利的使用阿里云的Codepipeline、容器镜像服务,实现了最基本的CICD。现在各大云服务厂商基本都提供了很多基础功能,而且大部分是免费的,有效的利用这些服务可以节省宝贵的时间,开发者可以更专注在核心业务上面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spyder pyecharts不显示_我的显示器需要定时校色吗?

在对图像色彩有要求的领域中&#xff0c;显示器的色彩准确是相当重要的。专业的显示器&#xff0c;能够具有更大的色域&#xff0c;更大的色深&#xff0c;以及更精确的ΔE色准值。这也是一个专业显示器所应有的品质。但是&#xff0c;我们在讨论色彩准确性的同时&#xff0c;往…

外观模式(Façade Pattern)

概述 在软件开发系统中&#xff0c;客户程序经常会与复杂系统的内部子系统之间产生耦合&#xff0c;而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口&#xff1f;如何将复杂系统的内部子系统与客户程序之间的依赖解耦&#xff1f;这就是要说…

WTM5.0发布,全面支持.net5

点击上方蓝字关注我们WTM5.0全面支持.net5WTM5.0是WTM框架开源2年以来最大的一次升级&#xff0c;全面支持.net5&#xff0c;大幅重构了底层代码&#xff0c;针对广大用户提出的封装过度&#xff0c;不够灵活&#xff0c;性能不高等问题进行了彻底的修改。这次升级使WTM继续保持…

rsa 模数 指数转换 c语言_模数转换,你必须知道的8个经典ADC转换电路方案

模数转换器即A/D转换器&#xff0c;或简称ADC&#xff0c;通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义&#xff0c;仅仅表示一个相对大小。故任何一个模数转换器都需要一…

C语言怎么提出大写字母,c语言函数toupper()如何将小写字母转换为大写字母

c语言函数toupper()如何将小写字母转换为大写字母&#xff1f;大小写字母怎么转换&#xff1f;函数需要引入的头文件&#xff1a;#include toupper()的定义&#xff1a;int toupper(int c);toupper()函数介绍&#xff1a;若参数 c 为小写字母则将该对应的大写字母返回。toupper…

生活的目标是什么

07-1-25长大了,生活没目标了.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />学生时代的我,总想着闯一番事业.期待着自己可以有敏锐的头脑,和不俗的思想.并且为了这个目标辛勤地努力着.我是一个会考试的机器人,擅长的只是追逐答…

linux定时关机命令_win10电脑定时关机命令

电脑定时关机命令可以帮助用户们很好的去设置电脑自动关机等&#xff0c;自己无需操作&#xff0c;电脑也会在对应的时间自动关机&#xff0c;使用起来还是非常方便的&#xff0c;现在就来看看电脑定时关机命令教程吧~电脑定时关机命令是什么&#xff1a;一、CMD设置关机1、点击…

为你的项目启用可空引用类型

为你的项目启用可空引用类型IntroC# 从 8.0 开始引入了可空引用类型&#xff0c;我们可以为项目启用可空引用类型来借助编译器来帮助我们更好的处理代码中的空引用的处理&#xff0c;可以避免我们写很多不必要 null 检查&#xff0c;提高我们的效率Why为什么我们要启用可空引用…

c语言配电自动化,我是电气工程及其自动化专业的要学C语言吗?

电气工程、控制科学与工程、计算机科学与技术 主要课程&#xff1a;电路理论、信息电子技术、电力电子技术、自动控制原理、微机原理与应用、电气工程基础、电机学、电器学、电力系统分析、电机设计、高低压电器、电机控制、智能化电器原理与应用、电力系统继电保护、电力系统综…

系统启动小知识

登录时不显示欢迎屏幕为了加快计算机启动的速度&#xff0c;我们完全可以通过组策略设置在每次用户登录时将Windows XP欢迎屏幕隐藏。位置&#xff1a;\用户配置\管理模板\系统\ 要显示欢迎屏幕&#xff0c;请依次单击“开始→程序→附件→系统工具”选项&#xff0c;然后单击“…

有哪些编辑软件可以编辑c语言,可以推荐一个手机上最好用且免费的c语言编辑器吗?...

C4droid(又名C编译器)呗&#xff0c;一个既可以编辑&#xff0c;还可以运行C语言的手机编程软件&#xff0c;下面我简单介绍一下这个软件的安装和使用&#xff1a;1.首先&#xff0c;安装C4droid&#xff0c;这个直接在手机应用中搜索就行&#xff0c;如下&#xff0c;大概也就…

cas 4.2.7 官方手册_海城市地区,保险手册核验的简单流程

最近海城市社保正在进行保险手册的核验工作&#xff0c;据说是要将当地社保数据并网&#xff0c;由省社保机构监督管理。我们这个百万人口的县级市&#xff0c;核验工作只由一个部门在固定的办事大厅里完成&#xff0c;工作量也是相当大了。核验工作自9月末开始&#xff0c;已进…

在 C# 中生成代码的四种方式——包括.NET 5中的Source Generators

Microsoft在最新的C#版本中引入了Source Generator。这是一项新功能&#xff0c;可以让我们在代码编译时生成源代码。在本文中&#xff0c;我将介绍四种C#中的代码生成方式&#xff0c;以简化我们的日常工作。然后&#xff0c;您可以视情况选择正确的方法。在 .NET 中&#xff…

powercfg -h off_驭鲛记的主演会是谁?肖战关系特别好的艺人朋友呢?白敬亭和吴映洁有没有故事啊?高伟光是不是隐婚生子了?讲讲管h和马司令呗?...

近期后台提问的比较多&#xff0c;没被翻牌的小可爱们不要着急&#xff0c;我会尽力把大家的问题都照顾到&#xff0c;笔芯1. 扒扒&#xff0c;想知道华策驭鲛记的主演会是谁&#xff1f;主演还没定&#xff0c;女主在接触热巴&#xff0c;男主还没接触&#xff0c;这个戏明年才…

使用 C# 9 的records作为强类型ID - JSON序列化

使用 C# 9 的records作为强类型ID - 路由和查询参数在本系列的上一篇文章中使用 C# 9 的records作为强类型ID - 路由和查询参数&#xff0c;我们注意到强类型ID的实体&#xff0c;序列化为 JSON 的时候报错了&#xff0c;就像这样&#xff1a;{"id": {"value&qu…

HP LaserJet 1010卡纸解决方法

HP LaserJet 1010 系列打印机在打印过程中出现卡纸多由以下原因造成&#xff1a;1、纸盒里放入了过多的纸张或纸张位置没有放好。2、打印时使用的介质类型超出打印机的支持范围。常见卡纸位置&#xff1a;1 、硒鼓下方&#xff1b;2 、进纸口&#xff1b;3 、出纸口图 2&#x…

c语言综合模拟测试题答案,【C语言指针模拟测试题_答案】

1 C 语言指针部分模拟测试题 一 选择题 语句 int a 10 point p B y p C y p p D p y p 语句 char str visual C char p str 则 p 的值为 B A visual C B str 的首地址 C n D v 设有说明语句 char s student Teacher Father Month ps s 2 执行语句 printf c s c s 1 ps ps 则输出…

python实现自动打电话-python 实现手机自动拨打电话的方法(通话压力测试)

现在能用自动化实现的&#xff0c;尽量使用自动化程序去操作&#xff0c;代替人工去操作&#xff0c;更有效率。 今天说下用python结合adb命令去实现安卓手机端的通话压力测试。 #操作前先在设置里打开power键可以结束通话按钮&#xff0c;否则会导致代码报错 from time import…

HP产品选件查询网站

[url]http://h18000.www1.hp.com/products/quickspecs/ProductBulletin.html#intro[/url][url]http://h18006.www1.hp.com/products/quickspecs/Division/12175.html[/url]所有的可通地此链接来查询DL380G5:[url]http://h18004.www1.hp.com/products/quickspecs/12477_div/1247…

c语言程序设计黄保和第二章,C语言程序设计答案(黄保和编)第6章

C语言程序设计答案,答案不唯一,仅供参考一、思考题1、函数总需要从main中调用吗&#xff1f;当调用一个函数时&#xff0c;为什么要使用参数&#xff1f;函数不是总需要从main函数中调用&#xff0c;使用参数的目的是为了给被调函数传递数据。2、什么是函数的返回值&#xff1f…