如何利用Azure DevOps快速实现自动化构建、测试、打包及部署
前两天有朋友问我,微软的Azure好用吗,适不适合国人的使用习惯,我就跟他讲了下,Azue很好用,这也是为什么微软云营收一直涨涨涨的原因,基本可以再1个小时内实现自动化构建、打包以及部署到Azure服务器上。利用周末的时间,写了这篇文章,分享给大家,希望能帮助一些人快速入手如何使用Azure DevOps自动化构建、测试以及部署自己的服务。
今天,我给大家一步一步详细介绍,如何在1个小时内,创建一个Web API项目,实现服务的自动化构建、打包,并自动化部署到Azure上。
1. 创建一个Azure托管存储库 (Organization)
第一步,需要在Azure DevOps (https://dev.azure.com/)上创建一个组织团体(Organization)。
Organization可以理解为是一个公司(或者一个事业群)或某个机构的所有数据的统一存储库,微软称之为托管存储库。
Host 项目的地区选择一个最近的区域最好,减少网络延迟。
2. 创建一个新的Azure DevOps项目(Project)
Azure DevOps Project 一般是一个大组或者一个大的周期内共同使用的一个数据及代码集合。你在创建项目时,可以设置项目名称以及项目具体的介绍;也可以选择项目的可见性,可以设置为公开的或者私有的。版本控制可以选择默认的Git。
其他选项(例如,工作项处理的模板等),有兴趣的可以自己研究,这里不做重点介绍。
3. 创建一个新的代码仓库(Repository)
Repository 顾名思义就是存放代码的地方, 一个Repo 可以有很多个分支,一般默认为master分支。
在这里,我们创建一个名叫AzureWebApps的Repository,并且假设我们以VisualStudio为IDE,选择VisualStudio .ignore 文件模板。.ignore 文件里配置了那些我们纳入Git管理的文件。
4. 创建我们的Web API项目,并进行修改。
4.1 克隆代码到本地
我们先把上面创建的AzureWebApps Repo 克隆到本地,方便在本地对代码进行增删改。Azure DevOps 本身也提供了在线编辑Git Repo,一般一些微小的改动可以直接在线修改。
打开Visual Studio,连接到我们的托管存储库,并定位到我们所创建的代码仓库(AzureWebApps),点击“克隆”即可。
(你本机如未安装Git,请自行到Git官网安装Git,后面会用到。)
4.2 创建HelloAzure API网站。
接下来,我们在VS里来创建一个Web API project。
新建项目模板时,我们选择“Asp.Net Core Web 应用程序”模板,如下:
然后下一步,我们选择API的ASP.NET Core Web API:
当我们创建完项目后,默认的API Project是一个随机返回天气预报信息的API。 我们可以任意修好一些配置,如端口,打包输出位置,对象类型及属性等。我在这里简单加了一个Source 属性给WeatherForecase.cs.
5. 创建一个构建管道(Build Pipeline)
此构建管道(Build Pipeline)的作用就是:每当我们有代码更新(Push)到远程master分支时,它会自动用来自动构建,(自动测试,这里略过),自动打包生成Artifacts 供后面自动部署管道使用。
5.1 创建构建管道 (BuildAndPublishHelloAzure)
我们在Pipelines 页面,新建一个Pipeline, 并选择连接到“Azure Repos Git” 作为代码仓库位置,如下图:
接着,选择我们上面存放代码的代码仓库(Repository) - AzureWebApps:
接下来,我们来进行初始化配置我们的构建管道(Build Pipeline)。我们给他配置上一个默认的任务(Task)- ASP.Net Core (.NET Framework) , 此Task 会利用VS Build来自动编译.sln 及 .csproj的项目。
这里我简单介绍下,Azure的一个Pipeline 一般是包含多个任务(Task), 每个任务(Task)是一个最小的运行单元。Azure 市场(Market place)上有很多现成的task 模板可以供咱们直接使用,只需简单的配置一些参数即可。
因为我们需要把编译构建HelloAzure的结果包发布到Azure上的某个地方,因此我们需要给我们的Build Pipeline 加一个任务 Publish build artifacts (直接在搜索框里搜‘publish build’):
Publish build artifacts 任务有三个参数,我们保持默认就可以。 请注意,其中Artifact name (drop) 在后面配置部署管道时会用到。
点击添加完后,咱们就会在左边的YAML Settings 里看到我们新加的这个任务的设置了,如果需要的话,可以进行修改。最后我们保存我们配置好的构建管道。
保存后,我们可以把我们的管道重命名成一个更有意义的名字,如 BuildAndPublishHelloAzure :
5.2 配置自动化(持续性)构建
构建管道创建好了,接下来我们需要给我们的Repository配置如何自动化构建。
我们的需求是,如果master 分支有代码更新(包括新建Pull Request, Complete Code/Push),那么就自动运行我们BuildAndPublishHelloAzure Pipeline。
首先我们在分支页面,找到Master 分支的分支策略管理页面,添加一个构建策略:
新建的构建策略的配置页面,触发一项我们选”Automatic“,这样每当有新的PullRequest 创建时,就会自动绑定此BuildAndPublishHelloAzure Pipeline 进行编译,构建,跑单元测试等。
最后,我们需要在配置,当有代码check in (PullRequest Complete)后,也自动运行这个build Pipeline。
在BuildAndPublishHelloAzure 编辑页面,跳到Triggers(触发器)这个配置tab页面,我们勾上并选中“Enable continuous integration” 即可,一般我们只需要对特定的一些分支设置持续性集成构建测试,所以我这里也只设置了master 分支。
到此,自动化的持续性集成构建 (测试)及打包已经完成了。
6. 在Azure上创建一个Web APP (Web API) 网站
6.1 创建Azure订阅(Subscription)
在创建Web 网站之前,我们需要创建一个Azure 订阅(Subscription,Azure用来收费的账户,如果你已经有了,可跳过)。登录www.azure.com, 用微软账户登录,在门户页面创建一个subscription,如下:
6.2 创建HelloAzure Web API Application
在Azure Portal (门户)的搜索框里搜”Api app“, 就回出来 API App 的一个创建模板,点击它开始创建:
配置好你的网站名字 - JasonHelloAzure,并选择上一步创建的订阅(Azure subsciption - Jason Test) ,其他默认即可。
接下来我们将介绍如果将自动化构建生成好的包部署到我们创建的这个API 网站(JasonHelloAzure)上。
7. 创建一个发布管道(Release Pipeline)
此发布管道(Release Pipeline)的作用就是:每当我们有代码更新(Push)后并已经打包好后,此管道会自动将构建管道生成的Artifacts 自动部署到Azure Web App (JasonHelloAzure)。
7.1 创建发布管道HelloAzureReleasePipeline
我们在Releases 频道,新建一个Release Pipeline, 并选择连接到“Azure Repos Git” 作为代码仓库位置,如下
新建是,会弹出来让你选择一个模板(如下图),我们这可以选择”Azure App Service deployment“, 这个模板适用于所有Azure Web app及其他一些app (如containers 部署,Azure Function apps等):
现在我们来给这个部署管道设置部署的来源,点击Artifacs这个模块,在右边会弹出来配置的页面:
Project 就是我们第二不创建的项目,也是存放我们创建的构建管道的地方。
Source (build pipeline),选择我们创建的BuildAndPublishHelloAzure 管道。
默认版本(Default Vesion),选择Latest即可,意思是每当上面的BuildAndPublishHelloAzure管道的最新发布的包。
Source alias, 就是包名的意思,在配置BuildAndPublishHelloAzure构建管道时,有一步配置Artifacts name 配置的就是 "drop”, 这里只需前后配置一致即可,任意字符串都可以。
7.2 配置自动化持续性部署
现在我们来给部署管道配置持续性部署触发(Continuous deployment trigger), 这个意味着,每当有新的artifacts 包生成时,就自动触发这个部署管道进行部署。
点击Artifacts 模块里的那个小闪电button, 右边就会出来持续性部署触发器的配置页面。
选择一个master 分支,启用Continue deployment trigger, 如下图:
最后一步,我们来配置部署管道要部署的目的地,也就是配置到我们上面创建好的Azure API App (JasonHelloAzure)。
一个部署管道也跟构建管道类似,区别是他包含多个阶段(Stage),一个阶段又包含任务(Task)。
点击任务选项组(Tasks),在右边的配置页里,填好阶段名称,选择订阅名称(Azure subscription - Jason Test)。
App type, 由于我们创建的是API App,自然选择API App, 选了API App 后,最后的App service name下拉框就会出现所有该订阅下面的API App, 我们选择JasonHelloAzure及可。
Deploy Azure App Service 任务的配置,我们保持默认即可。
8. 测试结果与总结
8.1 效果展示
我们直接先手动运行下创建好的“HelloAzureReleasePipeline”部署管道,然后访问JasonHelloAzure API 网站,如下:
最后,我们来试试自动化部署,看看效果(成果)哈 :)
我们创建一个Pull Request, 那么自动跑我们配置好的CodeBuild Policy (其实就是跑BuildAndPublishHelloAzure Pipeline)
当Pull Request Complete 后, 会自动跑持续性构建管道,以及部署管道:
约3分钟后,部署完成,再次访问JasonHelloAzure API: https://jasonhelloazure.azurewebsites.net/weatherforecast , 结果已经更新:
希望对想用Azure DevOps 对自己的服务做自动化CI/CD的人有帮助。
本文没有重点介绍测试部分,可以直接给HelloAzure创建一个UnitTest Project,BuildAndPublishPipelline 可以增加一个跑单元测试的任务即可以实现自动化构建+测试了。
8.2 总结
Azure DevOps 整体还是很人性好的,在易用性和可扩展性方面确实做的不错。对于一些中小企业,还是一个不错的选择,可以让研发人员专注于业务逻辑,省去了一些CI/CD的繁杂琐事。微软Azure部门可以说是最具有互联网基因的事业群了,Azure的产品同时也有了互联网的敏捷性和易用性,这也是微软股价持续新高,被华尔街看好的原因。
如何利用Azure DevOps快速实现自动化构建、测试、打包及部署的更多相关文章
- Android使用Jenkins自动化构建测试打包apk
Jenkins这东西搭建起来真是一点也不省心啊,看着别人的教程摸着石头过河,配置的东西有点多啊,稍有不慎,就构建不成功啦!即使步骤跟别人一样也会报各种乱七八糟的错误啊哈哈~~这东西只能佛系搭建~~在经 ...
- Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源
一,引言 上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构.通过 Terraform 部署执行计划,将整个 Azure Traffic Manage ...
- Azure DevOps(二)利用Azure DevOps Pipeline 构建基础设施资源
一,引言 上一篇文章记录了利用 Azure DevOps 跨云进行构建 Docker images,并且将构建好的 Docker Images 推送到 AWS 的 ECR 中.今天我们继续讲解 Azu ...
- Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)
一,引言 之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中.然后 ...
- Azure App Service(一)利用Azure DevOps Pipeline 构建镜像,部署应用程序
一,引言 起因是前两天项目上做测试,需要我把写好的基于.NET 5 的 Web 测试程序作成 Docker 镜像.当我在本地验证完功能后,准备利用 Docker 构建应用程序镜像的时候,发现系统不支持 ...
- Azure DevOps(一)利用Azure DevOps Pipeline 构建应用程序镜像到AWS ECR
一,引言 最近项目上让开始学习AWS,作为一名合格的开发人员,当然也是学会利用Azure DevOps Pipeline 将应用程序部署到 AWS ECS(完全托管的容器编排服务).我们要学会将应用程 ...
- Azure Terraform(九)利用 Azure DevOps Pipeline 的审批来控制流程发布
一,引言 Azure Pipeline 管道是一个自动化过程:但是往往我们由于某种原因,需要在多个阶段之前获得批准之后再继续下一步流程,所以我们可以向Azure Pipeline 管道添加审批!批准流 ...
- 利用 Azure Devops 创建和发布 Nuget 包
利用 Azure Devops 创建和发布 Nuget 包 原 Visual Studio Team Service ,简称 VSTS,能够创建 pipelines 管道以构建应用程序,并将其部署到任 ...
- Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署
一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...
随机推荐
- 程序员你为什么这么累【三】:编码习惯之Controller规范
作者:晓风轻本文转载自:https://zhuanlan.zhihu.com/p/28717374 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终 ...
- 面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...
- CTF--HTTP服务--SSI注入
开门见山 1. 扫描靶场ip,发现VM 192.168.31.160 2. 扫描主机服务信息和服务版本 3. 快速扫描靶场全部信息 4. 探测开放的http的敏感信息 5. 再用dirb扫描敏感页面 ...
- sqlserver 分页模糊查询
积少成多 ---- 仅以此致敬和我一样在慢慢前进的人儿 问题: 在sqlserver 进行模糊查询,出现问题 最初使用“concat”,进行拼串操作,如下所示: <select id = ...
- 如何更改cmd 编码为UTF-8
如何将cmd编码改为UTF—8 如图输入chcp 65001即可更改 改完之后是这样的 更改回GBK 输入 CHCP 936即可
- ActiveMQ 快速入门教程系列 第一章 点对点消息实现
ActiveMQ 开发包下载及运行环境搭建 主页:http://activemq.apache.org/目前最新版本:5.11.1开发包及源码下载地址:http://activemq.apache.o ...
- angular之模块开发一
模块化开发 概述 什么是模块化开发 将软件产品看作为一系列功能模块的组合 通过特定的方式实现软件所需模块的划分.管理.加载 为什么使用模块化开发 https://github.com/seajs/se ...
- 秒秒钟破解eval加密
前言 准确的说eval处理过的代码应该叫做压缩代码,不过效果上算是加密过了一样!很多小伙伴不想直接让别人看到自己的js代码往往就会采取这样的处理措施.不过,其实这样的方法只能防御那些小白.对于真正的 ...
- FFMPEG学习----使用SDL播放YUV数据
命令行下配置: G:\Coding\Video\SDL\proj>tree /F 文件夹 PATH 列表 卷序列号为 0FD5-0CC8 G:. │ sdl.cpp │ SDL2.dll │ S ...
- web开发发展历程
cs架构:(软件主要运行在桌面上,数据库软件运行在服务器端) 缺点:如果web应用修改或升级,需要每个客户端逐个升级桌面App,因此Browser/server模式开始流行. bs架构:应用程序的逻辑 ...