使用 Visual Studio Team Services 和 IIS 创建持续集成管道

若要将应用程序开发的生成、测试和部署阶段自动化,可以使用持续集成和部署 (CI/CD) 管道。 本教程介绍如何在 Azure 中使用 Visual Studio Team Services 和 Windows 虚拟机 (VM) 创建一个运行 IIS 的 CI/CD 管道。 你将学习如何执行以下操作:

将 ASP.NET Web 应用程序发布到 Team Services 项目

创建由代码提交触发的生成定义

在 Azure 中的虚拟机上创建和配置 IIS

将 IIS 实例添加到 Team Services 中的部署组

创建发布定义,用于将新的 Web 部署包发布到 IIS

测试 CI/CD 管道

本教程需要 Azure PowerShell 模块 3.6 或更高版本。 运行Get-Module -ListAvailable AzureRM即可查找版本。 如果需要进行升级,请参阅Install Azure PowerShell module(安装 Azure PowerShell 模块)。

在 Team Services 中创建项目

使用 Visual Studio Team Services 可以轻松进行协作和开发,而无需维护本地代码管理解决方案。 Team Services 提供云代码测试、生成和应用程序见解信息。 可以选择最适合用于代码开发的版本控制存储库和 IDE。 对于本教程,可以使用免费帐户来创建基本的 ASP.NET Web 应用和 CI/CD 管道。 如果还没有 Team Services 帐户,请创建一个

若要管理代码提交过程、生成定义及发布定义,请按如下所示在 Team Services 中创建一个项目:

在 Web 浏览器中打开 Team Services 仪表板,然后选择“新建项目”。

为“项目名称”输入myWebApp。 保留其他所有默认值,以便使用“Git”版本控制和“Agile”工作项过程。

选择“与团队成员共享”选项,然后选择“创建”。

创建项目后,请选择“使用自述文件或 gitignore 初始化”选项,然后选择“初始化”。

在新项目中,选择顶部的“仪表板”,然后选择“在 Visual Studio 中打开”。

创建 ASP.NET Web 应用程序

上一步骤已在 Team Services 中创建一个项目。 最后一个步骤是在 Visual Studio 中打开新项目。 可在“团队资源管理器”窗口中管理代码提交。 创建新项目的本地副本,然后通过模板创建 ASP.NET Web 应用程序,如下所示:

选择“克隆”,创建 Team Services 项目的本地 git 存储库。

在“解决方案”下面,选择“新建”。

选择“Web”模板,然后选择“ASP.NET Web 应用程序”模板。

输入应用程序的名称(例如myWebApp),并取消选中“创建解决方案的目录”所对应的框。

取消选中“将 Application Insights 添加到项目”所对应的框(如果该选项可用)。 Application Insights 要求使用 Azure Application Insights 为 Web 应用程序授权。 本教程为了保持内容简洁,已跳过此过程。

选择“确定” 。

从模板列表中选择“MVC”。

依次选择“更改身份验证”、“无身份验证”、“确定”。

选择“确定”,创建解决方案。

在“团队资源管理器”窗口中选择“更改”。

在提交文本框中输入一条消息,例如“初始提交”。 从下拉菜单中选择“全部提交并同步”。

创建生成定义

在 Team Services 中,可以使用生成定义来概述如何生成应用程序。 本教程将创建一个基本的定义,它采用我们的源代码,生成解决方案,然后创建可用于在 IIS 服务器上运行 Web 应用的 Web 部署包。

在 Team Services 项目的顶部选择“生成和发布”,然后选择“生成”。

选择“+ 新建定义”。

选择“ASP.NET (预览)”模板,然后选择“应用”。

保留所有默认任务值。 在“获取源”下面,确保已选择“myWebApp”存储库和“master”分支。

在“触发器”选项卡上,将“启用此触发器”对应的滑块移动到“已启用”。

保存生成定义,选择“保存并排队”将新的生成排入队列,然后再次选择“保存并排队”。 保留默认值并选择“排队”。

监视生成在托管代理上的计划过程,然后开始生成。 输出类似于以下示例:

创建虚拟机

若要提供一个平台来运行 ASP.NET Web 应用,需要一个运行 IIS 的 Windows 虚拟机。 提交代码和触发生成时,Team Services 使用代理与 IIS 实例交互。

使用此脚本示例创建 Windows Server 2016 VM。 该脚本需要花费几分钟来运行和创建 VM。 创建 VM 后,请使用Add-AzureRmNetworkSecurityRuleConfig为 Web 流量打开端口 80,如下所示:

PowerShell复制

Get-AzureRmNetworkSecurityGroup`-ResourceGroupName$resourceGroup`-Name"myNetworkSecurityGroup"| `Add-AzureRmNetworkSecurityRuleConfig`-Name"myNetworkSecurityGroupRuleWeb"`-Protocol"Tcp"`-Direction"Inbound"`-Priority"1001"`-SourceAddressPrefix"*"`-SourcePortRange"*"`-DestinationAddressPrefix"*"`-DestinationPortRange"80"`-Access"Allow"| `Set-AzureRmNetworkSecurityGroup

若要连接到 VM,请使用Get-AzureRmPublicIpAddress获取公共 IP 地址,如下所示:

PowerShell复制

Get-AzureRmPublicIpAddress-ResourceGroupName$resourceGroup| Select IpAddress

与 VM 建立远程桌面会话:

cmd复制

mstsc /v:

在 VM 上,打开“管理员 PowerShell”命令提示符。 按如下所示安装 IIS 和所需的 .NET 功能:

PowerShell复制

Install-WindowsFeatureWeb-Server,Web-Asp-Net45,NET-Framework-Features

创建部署组

若要将 Web 部署包推送到 IIS 服务器,请在 Team Services 中定义一个部署组。 将代码提交到 Team Services 以及完成生成时,可在此组中指定哪些服务器要用作新生成的目标。

在 Team Services 中选择“生成和发布”,然后选择“部署组”。

选择“添加部署组”。

输入组的名称(例如myIIS),然后选择“创建”。

在“注册计算机”部分中,请确保已选择“Windows”,然后选中“使用脚本中的个人访问令牌进行身份验证”所对应的框。

选择“将脚本复制到剪贴板”。

将 IIS VM 添加到部署组

创建部署组后,请将每个 IIS 实例添加到该组。 Team Services 将生成一个脚本,用于在 VM 上下载并配置一个代理,以便接收新的 Web 部署包,然后将这些包应用到 IIS。

返回到 VM 上的“管理员 PowerShell”会话,粘贴并运行从 Team Services 复制的脚本。

当系统提示配置代理的标记时,请选择“Y”,然后输入web

当系统提示输入用户帐户时,请按Return接受默认值。

等待脚本完成并出现消息“服务 vstsagent.account.computername 已成功启动”。

在“生成和发布”菜单的“部署组”页中,打开myIIS部署组。 在“计算机”选项卡上,检查你的 VM 是否已列出。

创建发布定义

若要发布生成,请在 Team Services 中创建发布定义。 成功生成应用程序时,会自动触发此定义。 选择要将 Web 部署包推送到的部署组,然后定义相应的 IIS 设置。

选择“生成和发布”,然后选择“生成”。 选择在上一步骤中创建的生成定义。

在“最近完成”下面选择最近的生成,然后选择“发布”。

选择“是”创建发布定义。

选择“空”模板,然后选择“下一步”。

检查项目中是否已填充项目与源生成定义。

选中“持续部署”复选框,然后选择“创建”。

选择“+ 添加任务”旁边的下拉列表框,然后选择“添加部署组阶段”。

选择“IIS Web 应用部署(预览)”旁边的“添加”,然后选择“关闭”。

选择“在部署组上运行”父任务。

对于“部署组”,请选择前面创建的部署组,例如myIIS

在“计算机标记”框中,选择“添加”,然后选择“web”标记。

选择“部署: IIS Web 应用部署”任务以配置 IIS 实例设置,如下所示:

对于“网站名称”,请输入“默认网站”。

保留其他所有默认设置。

选择“保存”,然后选择“确定”两次。

创建版本并发布

现在,可将 Web 部署包推送为新版本。 此步骤将与构成部署组的每个实例上的代理通信,推送 Web 部署包,然后将 IIS 配置为运行更新的 Web 应用程序。

在发布定义中选择“+ 发布”,然后选择“创建发布”。

检查下拉列表中是否已选择最新的生成以及“自动化部署: 创建发布后”。 选择“创建” 。

发布定义的顶部将显示一个小标题,例如“已创建发布‘Release-1’”。 选择发布链接。

打开“日志”选项卡查看发布进度。

发布完成后,请打开 Web 浏览器并输入 VM 的公共 IIP 地址。 ASP.NET Web 应用程序正在运行。

测试整个 CI/CD 管道

在 IIS 上运行 Web 应用程序后,请尝试测试整个 CI/CD 管道。 在 Visual Studio 中进行更改并提交代码后,将触发生成,然后触发将更新的 Web 部署包发布到 IIS 的过程:

在 Visual Studio 中打开“解决方案资源管理器”窗口。

导航到“myWebApp”|“视图”|“主页”|“Index.cshtml”并将它打开

编辑第 6 行,如下所示:

ASP.NET with VSTS and CI/CD!

保存文件。

打开“团队资源管理器”窗口,选择“myWebApp”项目,然后选择“更改”。

输入提交消息(例如“测试 CI/CD 管道”),然后从下拉菜单中选择“全部提交并同步”。

在 Team Services 工作区中,已通过代码提交触发了新的生成。

选择“生成和发布”,然后选择“生成”。

选择生成定义,然后选择“已排队和正在运行”生成来监视生成进度。

成功生成后,将触发新的发布。

选择“生成和发布”,然后选择“发布”查看已推送到 IIS VM 的 Web 部署包。

选择“刷新”图标来更新状态。 如果“环境”列显示绿色的复选标记,则表示已成功将发布部署到 IIS。

若要查看已应用的更改,请在浏览器中刷新 IIS 网站。

后续步骤

本教程已在 Team Services 中创建一个 ASP.NET Web 应用程序,并配置了生成和发布定义,以便每次提交代码时将新的 Web 部署包部署到 IIS。 你已了解如何:

将 ASP.NET Web 应用程序发布到 Team Services 项目

创建由代码提交触发的生成定义

在 Azure 中的虚拟机上创建和配置 IIS

将 IIS 实例添加到 Team Services 中的部署组

创建发布定义,用于将新的 Web 部署包发布到 IIS

测试 CI/CD 管道

转到下一教程,了解如何使用 SSL 证书保护 Web 服务器。

使用 SSL 保护 Web 服务器

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容