使用Azure DevOps Pipeline实现.Net Core程序的CI
上次介绍了Azure Application Insights,实现了.net core程序的监控功能。这次让我们来看看Azure DevOps Pipeline功能。Azure DevOps Pipeline 是Azure DevOps里面的一个组件,对于12个月试用账号同样永久免费。
持续集成CI
持续集成指的是,频繁地(一天多次)将代码集成到主干。它的好处主要有两个。
(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。Martin Fowler说过,"持续集成并不能消除Bug,而是让它们非常容易发现和改正。"
摘自阮一峰大神的blog
DevOps跟CI就不多介绍了。这里我们定个目标:当我们提交代码后,服务器自动编译代码,自动运行单元测试,自动发送成功失败的邮件。
创建组织
开通Azure DevOps功能,第一步需要创建一个组织。
随便取个组织名称,区域还是那个套路,选近的,这里选东亚。
创建仓库
点击继续之后页面会跳转到正式的Azure DevOps界面。首先需要创建一个项目。这里跟Github一样,需要选择私有还有公开,估计Azure DevOps后端其实就是使用了Github的服务。这里选一个私有的吧,取个项目名称:devop_test ,还可以设置用户名密码等信息。
创建ASP.NET MVC项目
新建一个ASP.NET MVC项目,就默认的示例项目就行。
为了让pipeline执行单元测试,所以我们新建一个单元测试功能,然后写一个最简单的单元测试方法。
[TestClass()]public class WeatherForecastControllerTests{[TestMethod()]public void GetTest(){var ctrl = new WeatherForecastController(null);var result = ctrl.Get();Assert.IsNotNull(result);}}
上传代码到仓库
有了代码之后我们要把代码传到仓库里去。就是使用上面的仓库的地址、用户名、密码。这是git的问题了,不多说了。那么上面是一些准备工作,下面开始正式使用pipeline。
配置Pipeline
点击左侧的pipeline菜单,开始配置pipeline的导航。
第一步:需要配置代码仓库,选择刚才的Azure Repos Git。当然它还支持从Github或者别的地方拉代码。
第二步:选择刚才的devop_test仓库。
第三步:开始配置yml。这个yml呢其实跟docker-compose的配置啊,dockerfile啊一样,就是配置了一些列的任务(task)。
trigger:
- master
pool:vmImage: 'ubuntu-18.04'
variables:solution: '**/*.sln'buildPlatform: 'Any CPU'buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2inputs:command: 'restore'
- task: DotNetCoreCLI@2displayName: Buildinputs:command: buildprojects: '**/*.csproj'arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2inputs:command: testprojects: '**/*Tests/*.csproj'arguments: '--configuration $(buildConfiguration)'
大概讲下这个yml配置了啥。
trigger:表示代码的分支
vmImage:表示虚拟机的环境,是win还是linux。
variables:定义了一些参数,后面的设置可以直接使用。
steps:步骤,里面每一个task就是一个步骤。
task:
command: 'restore' nuget包还原。
command: 'build' 编译代码。
command: 'test' 运行单元测试。
配置好yml之后点击“SAVE AND RUN”就会执行第一次pipeline的任务。运行之后任务会先进入队列,等待一会就能看到任务是否执行成功了。
下面这图就表示任务执行成功了。每一步绿色的勾勾,还有执行了几秒都会显示出来。还可以看更加详细的日志。
这个界面表示运行的单元测试的结果。成功了几个,失败了几个,表示的都很清楚。
成功之后你的账户邮箱还会收到邮件通知,成功是绿色的。
前面都是成功的,我们故意把代码写个错误,然后直接提交代码,看看build能不能过。
[HttpGet]public IEnumerable<WeatherForecast> Get(){var rng = new Random();return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = rng.Next(-20, 55) //error ,去掉了一个逗号Summary = Summaries[rng.Next(Summaries.Length)]}).ToArray();}
改完代码后提交上去。可以看到任务会自己执行,然后过一会出现了一个红色的X。果然pipeline报错了。点击任务可以看到更加详细的错误列表。
同时也受到了失败的邮件通知。
总结
这次我们通过Azure DevOps Pipeline简单演示了CI的整个过程。我们成功实现了一开始定的小目标:写代码>提交代码>编译>运行测试>发送通知。除了yml配置有点麻烦,整个过程也都是很简单,而且是这个功能都是免费的。Azure DevOps pipeline除了CI,显然还能实现CD,如何编译docker镜像,如果推送镜像,如果部署镜像,那么请看下篇吧。
关注我的公众号一起玩转技术
使用Azure DevOps Pipeline实现.Net Core程序的CI相关推荐
- 使用Azure DevOps Pipeline实现.Net Core程序的CD
上一次我们讲了使用Azure DevOps Pipeline实现.Net Core程序的CI.这次我们来演示下如何使用Azure DevOps实现.Net Core程序的CD. 实现本次目标我们除了A ...
- Azure Terraform(九)利用 Azure DevOps Pipeline 的审批来控制流程发布
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)
前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...
- Azure DevOps+Docker+Asp.NET Core 实现CI/CD(三.实现CD持续部署管道)
前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...
- 动态临时变量为 Azure DevOps Pipeline 变量自定义锦上添花
大家好,我是本期的微软MVP实验室研究员贠乾.Azure Pipeline 本身已经提供了内置变量.不同于上述方式,今天我将带来如何在 Azure DevOps Pipeline 运行时创建.使用动态 ...
- 高级进阶:Azure DevOps搞定.NET Core编译版本号自增
点击上方蓝字关注"汪宇杰博客" 熟悉.NET Framework的人知道,我们可以通过指定AssemblyVersion为10.0.*来让编译器自增版本号.但是.NET Core和 ...
- Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)
前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 打算用三个篇幅来记录完整的全过程 觉得有帮助的朋友~可以左上 ...
- 不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序
一般我们写好了应用程序想要部署发布它,要么发布到物理机,要么发布到虚拟机,要么发布到容器来运行它.现在有了Azure应用服务,我们可以完全不用管这些东西,只管写好自己的代码,然后使用VisualStu ...
- Git Flow分支策略与Azure DevOps相关功能简介
想了很久,还是写这么一篇文章来总结一下有关分支策略和DevOps的一些内容吧.其实,DevOps相关的内容并不是我的工作范围,不过对于敏捷开发.DevOps.项目管理等等这一系列的与开发过程相关的内容 ...
最新文章
- DropBox免费扩容到10G了
- python实现syn半扫描_python 使用raw socket进行TCP SYN扫描实例
- 终端的录制、回放与实时共享
- github push报 Unable to access ‘https://github.com/xxxx/xxxx.git/‘: OpenSSL SSL_read: Connection was
- linux mysql UNSIGNED,关于mysql:MySqlint10-与-int-unsigned-之前的区别
- Android系统共享一套sdk
- 【SAM】差异(P4248)
- 制作Docker镜像的两种方式
- Django Web实现动态三级联动
- [HTTP] 重定向的302,301
- 微软hackathon_Hackathon报告:30小时内您可以编写什么代码? 非常多!
- python爬虫反爬-python爬虫--爬虫与反爬
- mysql close 出错_MySQL错误Forcing close of thread的两种解决方法
- 转速测试软件app,实时显示行车速度app手机版-手机实时行车速度显示app(gps车速表)v1.6最新版_新绿资源网...
- Dev-C++ MinGW wxWindows2.6.2 开发环境的配置
- dns被劫持了怎么处理 5种方法教你处理
- 用U盘安装系统 WinPE 安装操作系统
- mac 命令行安装软件
- Unity使用protobuf-net实现的网络框架
- 【IoT】产品设计:硬件产品外观样品设计工艺及要求(手板)
热门文章
- spark-2.1.0 集群安装
- Android WebView和JavaScript交互
- 【mongoDB运维篇③】replication set复制集
- JSFL 获取当前脚本路径,执行其他脚本
- 西电开源社区Ubuntu 10.04软件源
- Android 的基本组件之一 Gallery
- 计算机网络硬件的作用是什么,网络技术在计算机软硬件的作用
- 哪个app最费电_微波炉和烤箱,买哪个划算?
- vue引入postcss-plugin-px2rem,px转rem
- php rewrite url_PHP实现url重写和.htaccess