如何利用azuredevops快速实现自动化构建测试打包及部署

braindeveloper braindeveloper     2023-04-18     519

关键词:

前两天有朋友问我,微软的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的产品同时也有了互联网的敏捷性和易用性,这也是微软股价持续新高,被华尔街看好的原因。

Flutter AzureDevOps 设置

】FlutterAzureDevOps设置【英文标题】:FlutterAzureDevOpsSetup【发布时间】:2020-09-0206:25:26【问题描述】:我是一名新的Flutter开发人员。我想知道我是否能够将AzureDevOps与FLutter一起使用?如何设置它,以便我能够为IOS和Andriod构建和部... 查看详情

docker+harbor+jenkins+gitlab自动化cicd构建

文章大纲1.实现CICD的架构简介2.Gitlab部署和实践3.Docker部署4.Harbor私有仓库部署5.Jenkinspipeline项目持续集成实践6.整体架构参考文献1.实现CICD的架构简介本实践介绍了利用Jenkins和docker技术,如何实现CI/CD的各环节的步骤,包括代码... 查看详情

利用jenkins实现unity自动化构建

前言自动自动化构建已经成为了IT行业的标配,尤其是游戏行业,一些顶级公司的高级岗位甚至知名要求会自动化构建,足以说明会这个技能是多么重要。系列文章介绍1、什么是Jenkins,为什么要用它维基百科是这... 查看详情

如何快速通过json构建javabean对象intellijidea

参考技术A要么你自己写的利用反射把JSON对象映射到JavaBean,要么你用Struts框架,导入json那些jar包,配置好。前台发送到后台的对象,会自动映射到action类事先声明的对象里。网上可能有自动反射JSON对象映射到Javabean的jar包你可以... 查看详情

如何在 Azure DevOps 中自动触发构建拉取请求?

】如何在AzureDevOps中自动触发构建拉取请求?【英文标题】:HowtoautomaticallytriggerbuildonpullrequestinAzureDevOps?【发布时间】:2020-04-1621:42:23【问题描述】:我已经创建了一个构建管道。在我的Azure存储库中有master、develop和feature/*分支... 查看详情

如何在 Azure DevOps 2020 中手动更新构建代理?

】如何在AzureDevOps2020中手动更新构建代理?【英文标题】:HowtoupdatetheBuildAgentManuallyinAzureDevOps2020?【发布时间】:2021-03-1305:15:04【问题描述】:我们最近在测试环境上升级到AzureDevOps2020,之前我们有TFS2017,然后升级AzureDevOps2019,... 查看详情

利用github-actions将hugo博客自动发布到github和giteepages

...文件转换成静态网站文件进行快速发布。本文就用来记录如何快速将博客发布到、GitHub以及GiteePages三个平台。我希望的流程当然是主要精力用在写文章,发布的流程最好完全不需要手动处理,但实际情况下手动发布博客的流程... 查看详情

Azure DevOps 构建定义和管道之间有啥区别和关系?

】AzureDevOps构建定义和管道之间有啥区别和关系?【英文标题】:WhatisthedifferenceandrelationshipbetweenanAzureDevOpsBuildDefinition,andaPipeline?AzureDevOps构建定义和管道之间有什么区别和关系?【发布时间】:2021-04-2903:25:18【问题描述】:我正... 查看详情

化繁就简,如何利用springaop快速实现系统日志

1、引言有关SpringAOP的概念就不细讲了,网上这样的文章一大堆,要讲我也不会比别人讲得更好,所以就不啰嗦了。为什么要用SpringAOP呢?少写代码、专注自身业务逻辑实现(关注本身的业务而不去想其它事情,如安全、事务、... 查看详情

python快速搭建自动回复微信公众号(代码片段)

...器人来实现一个中文的聊天机器人订阅号。这里主要介绍如何利用Python的TornadoWeb框架以及wechat-python-sdk微信公众平台Python开发包来快速搭建微信公众号 查看详情

ai写作《如何利用rpa实现自动化获客?》

写一篇文章《如何利用RPA实现自动化获客?》,不少于3000字,使用markdown格式。分10各章节,细化到3级目录。文章目录1.什么是RPA(RoboticProcessAutomation)?RPA的应用场景2.RPA自动化获客实战2.1RPA应该领域2.2自动化选品–电商选品2.... 查看详情

ai在api设计中的应用:如何利用al快速实现api开发和测试

...ApiKit就是代表之一。EolinkApikit是结合API设计、文档管理、自动化测试、监控、研发管理和团队协作的一站式API生产平台,可以快速、规范地管理所有API,已经成为当前API研发管理的主流产品。但是,在AGI(通用人工智能)越来越... 查看详情

网络自动化之ansible模块的构建-1

...它们构建高级的Ansibleplaybook。Ansible是一个非常受欢迎的自动化框架,它被用于自动化IT运营较长时间。它简化了不同基础设施节点的管理,并将业务逻辑转换为定义良好的过程,以便实现该业务逻辑。Ansible是用Python编写的,它... 查看详情

请问:企业如何快速实现devops转型?

...创新速度,但增加的运营工作量可能极具挑战性。最好为自动化、配置管理和持续交付实践奠定坚实的基础,以帮助减负。过度依赖工具会使团队偏离DevOps的必要基础:团队和组织结构。一旦建立了结构,就应该建立流程和团队... 查看详情

如何利用pxe+kickstart实现批量安装系统

PXE网络快速自动安装系统,以下实验环境均在RedHat 7.2 配置PXE网络装机服务器,为了避免防火墙与selinux的干扰,改为信任以及宽松模式  1. 将防火墙状态设置为trusted  2.SELinux当前修改为permissive  3.S... 查看详情

利用mysqlrouter构建读写分离mgr集群(代码片段)

...参考资料、文档免责声明文章推荐:关于GreatSQL本文介绍如何在MGR集群前端部署MySQLRouter以实现读写分离、读负载均衡,以及故障自动转移。MySQLRouter是一个 查看详情

利用tflearn快速搭建经典深度学习模型

  利用TFLearn快速搭建经典深度学习模型使用TensorFlow一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章《TensorFlow增加自定义运算符》)。由于运算符的粒度较小... 查看详情

如何将软件构建从 Azure DevOps 部署到内部服务器?

】如何将软件构建从AzureDevOps部署到内部服务器?【英文标题】:HowtodeploysoftwarebuildsfromAzureDevOpstointernalservers?【发布时间】:2019-08-2502:03:59【问题描述】:我们的软件托管在AzureDevOps上的Git中,并使用构建管道(主要使用Cake脚本... 查看详情