Azure是微软创建的一项云计算服务,用于通过微软管理的数据中心构建、测试、部署和管理应用程序和服务。
它提供软件即服务(SaaS)、平台即服务(PaaS)和基础设施即服务(IaaS)。它还支持许多不同的编程语言、工具和框架,包括微软特有的和第三方的软件和系统。
本文演示了如何使用Azure DevOps(VSTS)持续集成/持续交付(CI/CD)管道将一个应用程序部署到Azure App Service。
前提条件
要跟上这篇文章,你需要。
- Azure门户账户,Azure订阅,以及Azure DevOps(VSTS)账户。
- Azure资源组。
- 你还应该在Azure中创建一个Web应用,并记下该应用的服务URL,因为你以后会需要它。
目标
在本文中,你将创建一个样本环境,以便。
- 根据提交到Azure DevOps仓库的代码,生成一个新的构建。
- 自动将你的应用程序部署到Azure。
什么是Azure应用服务?
从官方的产品描述来看,Azure应用服务是一个全面管理的平台,用于构建、部署和扩展Web应用。
它是一个PaaS(平台即服务),使我们能够快速部署我们的应用,而不必担心基础设施和性能问题。
我们可以使用自己喜欢的语言开发软件,无论是.NET、.NET Core、Java、Ruby、Node.js、PHP还是Python。
应用程序可以在基于Windows和Linux的环境中轻松地运行和扩展。Azure应用服务不仅为你的应用增加了微软Azure的力量(安全、负载平衡、自动缩放和自动化管理),而且还利用了它的DevOps能力,如持续部署。
什么是Azure DevOps?
Azure DevOps是微软的一个软件即服务(SaaS)平台,为开发和部署软件提供一个端到端的DevOps工具链。它有许多内置的功能,允许团队管理项目和自动化工作流程。
Azure DevOps的一些关键功能包括为CI/CD自动化创建构建和发布管道、项目板、组织和代码库功能。
在我们开始之前,先看一下下图所示的架构图。这张图可能是适合小型项目的任何客户-服务器架构的最简单形式。
请注意,我们是用这个架构来演示用最小的配置来部署任何网络应用。

第1步 - 在Azure中创建一个资源组
一旦你有一个Azure订阅,你需要创建一个resource group ,以管理资源。最好的做法是为每个环境(DEV、INT、QA、STAG、PERF、PROD)维护一个单独的资源组,并遵循适当的命名惯例。
要创建一个资源组,从左侧窗口选择Resource Group ,点击Add ,然后选择Subscription 。
命名资源组,并点击Review + Create 。参考下面的图片。

步骤2 - 创建一个应用程序服务
从面板左侧点击All resources ,然后点击Add ,然后选择Web App ,给你的应用服务起一个合适的名字。
接下来,选择Subscription ,并选择现有的resource group 。保持其余选项为默认,然后点击Create 。

一旦应用服务被创建,点击它并导航到Overview 。在那里你可以选择属于该应用服务的所有细节,包括状态、资源组、订阅和URL。

第3步 - 创建服务本体
当应用程序需要通过ARM或VSTS在Azure中访问部署或配置资源时,你需要创建一个服务主体。
进入AzureActive Directory -> 应用程序注册 -> 新的应用程序注册,然后命名服务原则,选择应用程序类型,并给它一个你选择的URL。
创建应用注册后,从该服务中进入Settings ,并记下该应用的ID。接下来,导航到Keys 部分,生成一个密钥并复制秘密值。(记住要正确存储密钥)。


第4步 - 在VSTS中创建一个新项目
第一步是在Azure DevOps(VSTS)中创建一个账户,然后按照以下步骤开始应用部署。
我们将使用GitHub上的一个基于Java的开源代码样本,并将其导入Azure DevOps repo中。它是一个简单的多模块Maven项目。这个应用是Conway'sGame of Life 的在线版本。

要创建一个new project ,点击Create new project ,给你的项目加上一个合适的name ,然后选择create 。
接下来,导航到Repos 部分,点击Import ,然后选择source type 。在Clone URL 标签中输入你之前保存的URL ,然后选择Import 。源代码将被导入到你的版本库中。

我们需要在我们的项目中允许service connections 。从我们项目主目录的窗口底部导航到项目设置,然后选择服务连接->新服务连接->Azure资源管理器。
从弹出的窗口中点击Use the full version of the service connection dialog ,然后将Application ID 粘贴到Service principal client ID 标签中。
同时,将秘钥值添加到Service principal key 标签中(你在创建应用注册时保存的),然后点击OK 。

第5步 - 创建一个持续集成(CI)构建
转到Pipelines -> Build -> New Build Pipeline ,然后点击Use the visual designer 。
你会被提示提供源代码回购的详细信息。因此,选择Azure Repos Git 和你之前创建的Team project 。接下来,点击Repository -> branch name,然后按Continue。

下一步是选择Maven 模板,键入管道名称,并选择Hosted VS2017 作为Agent池。最后,在Maven POM file 中点击pom.xml 。
在那里你可以把目标列为Clean Package ,并选择Copy Files 。在contents 部分,输入\*_/_.war ,然后导航到Publish Artifact 。
将工件名称列为Gameoflife ,并保持所有其余选项为默认值。
在Triggers ,选择启用持续集成并提供分支过滤器。
一旦开发者将他们的修改提交到主目录,CI构建将自动触发。请参考下面的图片。



一旦配置完成,点击管道顶部的Save 和Queue ,触发CI构建。每次提交到主目录都会触发一个新的构建。
第6步 - 创建持续交付(CD)管道
导航到管道->发布->新发布管道,然后选择Azure App Service部署模板。
列出阶段名称为DEV ,并点击Add 一个工件。选择项目和源(构建管道),然后选择默认版本并按Add 。
接下来,点击Task (在DEV下面),选择Run on agent ,选择agent pool 作为Hosted VS2017 。
按plus(+) 符号并搜索template 文件。你需要将该文件重命名为ROOT.war ,并从源目录中选择.war 的扩展名。这些步骤在下面的图片中进行了总结。

在Display name box ,添加Azure App Service Deploy 。在Azure subscription 领域,你需要选择一个service principal name ,以授权资源。
然后选择App type 和App Service name 。在Package 或folder selection ,选择.war file 并重命名为ROOT.war 。这是因为对于基于Java的应用程序,我们需要将应用程序部署到一个适当的目录结构中。

最后,选择Azure App service 模板并按下Restart 选项。确保你选择的订阅和应用服务名称与你在Azure app service deploy 窗口中使用的相同。
点击Save ,然后点击Release -> Create a release -> select artifact build number -> create。
然后构建将触发并部署到应用服务中。现在代码已经成功部署到Azure App Service 。

你可以从任何浏览器访问Azure应用服务的URL。
要检查你的代码是否部署成功,请使用这个URL
结论
我们已经使用Azure应用服务在Azure上成功部署了我们的应用程序。在Azure DevOps的帮助下,我们还将我们的资源库集成到了网络主机上。
希望这篇文章能给你一些使用Azure的启示,使你的项目部署更快、更简单。