使用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@2
inputs:
command: 'restore'
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
inputs:
command: test
projects: '**/*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 DevOps(一)利用Azure DevOps Pipeline 构建应用程序镜像到AWS ECR
一,引言 最近项目上让开始学习AWS,作为一名合格的开发人员,当然也是学会利用Azure DevOps Pipeline 将应用程序部署到 AWS ECS(完全托管的容器编排服务).我们要学会将应用程 ...
- Azure Terraform(九)利用 Azure DevOps Pipeline 的审批来控制流程发布
一,引言 Azure Pipeline 管道是一个自动化过程:但是往往我们由于某种原因,需要在多个阶段之前获得批准之后再继续下一步流程,所以我们可以向Azure Pipeline 管道添加审批!批准流 ...
- Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)
前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...
- Azure DevOps(二)利用Azure DevOps Pipeline 构建基础设施资源
一,引言 上一篇文章记录了利用 Azure DevOps 跨云进行构建 Docker images,并且将构建好的 Docker Images 推送到 AWS 的 ECR 中.今天我们继续讲解 Azu ...
- Azure Terraform(十一)Azure DevOps Pipeline 内的动态临时变量的使用
思路浅析 在我们分析的 Azure Terraform 系列文中有介绍到关于 Terraform 的状态文件远程存储的问题,我们在 Azure DevOps Pipeline 的 Task Job ...
- Azure App Service(一)利用Azure DevOps Pipeline 构建镜像,部署应用程序
一,引言 起因是前两天项目上做测试,需要我把写好的基于.NET 5 的 Web 测试程序作成 Docker 镜像.当我在本地验证完功能后,准备利用 Docker 构建应用程序镜像的时候,发现系统不支持 ...
- 【Azure DevOps系列】Azure DevOps构建并发布Nuget程序包
在Azure DevOps中,管道可以用来构建解决方案,O(∩_∩)O哈哈~快万能了,本章主要介绍如何创建Nuget包并且将其发布到Nuget服务器的过程. 前面我创建了一个非常简单的类库,这边我不做 ...
- Azure DevOps (十一) 通过Azure Devops部署一个.NET Core WebAPI
前几篇文章中,我们讨论了如何通过流水线实现项目的编译.上传.打包.部署等操作,今天我们来实现一套完整的流程,把之前碎片化的知识点给串起来. 本次我们使用一个ASP.NET Core的WebApi项目来 ...
随机推荐
- Docker图形界面管理
之前都是使用命令行进行Docker的管理,这里简单介绍一下Docker的图形界面管理.之所以说简单介绍,是因为在生产环境都是集群,很少使用图形界面管理单台Docker主机,所以就演示记录一下,在个人测 ...
- JavaWeb网上图书商城完整项目--day02-5.ajax校验功能之服务器端三层实现
regist.jsp页面中有异步请求服务器来对表单进行校验: l 校验登录名是否已注册过: l 校验Email是否已注册过: l 校验验证码是否正确. 这说明在UserServlet中需要提供相 ...
- day12—列表、元组、字典基本语法
一.list类中提供的方法 **********************灰魔法************************** 1. 原来值最后追加 append() li = [11, 22, ...
- 为什么 group by后面 必须跟selecte 后面的除了聚集函数外的所有字段
如:SELECT store_name, SUM(Sales) FROM Store_Information GROUP BY store_name 可以而SELECT store_name, add ...
- Spring拦截器和SpringAop实现
一.拦截器 1.aop是面向切面编程,原理是java的发射技术. 2.分为三类,before.after.arround 3.springMvc为我们提供了一个适配器HandlerIntercepto ...
- css sprites(精灵图)如何使用?
CSS Sprites是一种性能优化技术,一种网页图片应用处理方式:将多个图像组合成单个图像文件以在网站上使用的方法,以提高性能:也被称为css 精灵图. 网页通常包含多个图像.这些包括图标,按钮,徽 ...
- Web移动端 自适应缩放界面
在开发App端的网页时,要适配iphone.ipad.ipod.安卓等各种机型,一般是直接使用em.px转em.界面缩放. 本章是通过将界面缩放,等比例显示在各机型上.过程中遇到了些问题和大坑~ 然后 ...
- 「疫期集训day0」启程
看了看几乎所有学长都是写的博客,所以写的博客 由于是第一回集训,考得都是老题(虽然有些还不会) 感受1:我调试好蒻呃,调试巨蒻,T1lis模板5分切,结果T2T3T4调了将近了两个小时,先是T2路径输 ...
- 洛谷 P1043 数字游戏 区间DP
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- 从此不怕Synchronized锁
Synchronized的使用 Synchronized是通过监视器保证线程同步从而保证线程安全.但是Synchronized锁可以锁对象和锁类,并会产生不同的效果,通过下面的案例彻底理解Sync ...