持续集成 (CI) 和持续部署 (CD) 是一个管道,可以通过它生成、发布和部署代码。 Team Services 针对到 Azure 的部署提供了一组完整的功能完备的 CI/CD 自动化工具。 Jenkins 是一个流行的基于 CI/CD 服务器的第三方工具,也提供 CI/CD 自动化功能。 可以组合使用以上两者来自定义如何提供云应用或服务。

本教程使用 Jenkins 生成一个 Node.js web 应用,并使用 Visual Studio Team Services 将其部署到包含 Linux 虚拟机的部署组

你将执行以下任务:

  • 采用 Jenkins 生成应用
  • 为 Team Services 集成配置 Jenkins
  • 为 Azure 虚拟机创建部署组
  • 创建对 VM 进行配置并部署应用的发布定义

开始之前

获取示例应用

需要部署 Git 存储库中存储的一个应用。 对于本教程,建议使用 GitHub 中提供的此示例应用

  1. 创建此应用的一个分支并记下位置 (URL) 以便在本教程的后续步骤中使用。

  2. 使此分支成为公共的以方便在后面连接到 GitHub。

Note

有关详细信息,请参阅创建存储库分支使专用存储库成为公共的

Note

此应用是使用 Yeoman 构建的;它使用了 Express、bower 和 grunt;它以某些 npm 程序包作为依赖项。 示例应用包含一组 Azure 资源管理器模板,它们用来为 Azure 上的部署动态创建虚拟机。 Team Services 发布定义中的任务会使用这些模板。 主模板创建一个网络安全组、一台虚拟机和一个虚拟网络。 它分配一个公共 IP 地址并打开入站端口 80。 它还会添加一个标记,部署组会使用该标记来选择要接收部署的计算机。

示例还包含一个用来设置 Nginx 并部署应用的脚本。 它在每台虚拟机上执行。 具体而言,该脚本会安装 Node、Nginx 和 PM2,配置 Nginx 和 PM2,并启动 Node 应用。

配置 Jenkins 插件

首先,必须为 NodeJS 和与 Team Services 的集成配置两个 Jenkins 插件。

  1. 打开 Jenkins 帐户并选择“管理 Jenkins”。

  2. 在“管理 Jenkins”页中,选择“管理插件”。

  3. 对列表进行筛选以找到“NodeJS”插件,安装该插件且不重启。

  4. 对列表进行筛选以找到“Team Foundation Server”插件并安装它。 (此插件同时适用于 Team Services 和 Team Foundation Server。)不需要重启 Jenkins。

为 Node.js 配置 Jenkins 生成

在 Jenkins 中,创建一个新的生成项目并如下所述对其进行配置:

  1. 在“常规”选项卡中,为生成项目输入一个名称。

  2. 在“源代码管理”选项卡中,选择“Git”并输入包含应用代码的存储库和分支的详细信息。

    Note

    如果存储库不是公共的,请选择“添加”并提供用于连接到它的凭据。

  3. 在“生成触发器”选项卡中,选择“轮询 SCM”并输入计划 H/03 * * * * 以便每三分钟轮询一次 Git 存储库来查询更改。

  4. 在“生成环境”选项卡中,选择“提供节点和 npm bin/ 文件路径”并输入 NodeJS 作为 Node JS 安装值。 将“npmrc 文件”保留设置为“使用系统默认值”。

  5. 在“生成”选项卡中,输入命令 npm install 以确保更新所有依赖项。

为 Team Services 集成配置 Jenkins

  1. 在“生成后操作”选项卡中,对于“要存档的文件”,输入 **/* 以包括所有文件。

  2. 对于“TFS/Team Services 中的触发器发布”,输入帐户的完整 URL(例如 https://your-account-name.visualstudio.com)、项目名称、(以后创建的)发布定义的名称,以及用于连接到帐户的凭据。 需要使用之前创建的用户名和 PAT。

  3. 保存生成项目。

创建 Jenkins 服务终结点

服务终结点允许 Team Services 连接到 Jenkins。

  1. 在 Team Services 中打开“服务”页面,打开“新建服务终结点”列表,并选择“Jenkins”。

  2. 输入用来引用此连接的名称。

  3. 输入 Jenkins 服务器的 URL,并选中“接受不受信任的 SSL 证书”选项。

  4. 输入 Jenkins 帐户的用户名和密码。

  5. 选择“验证连接”来检查信息是否正确。

  6. 选择“确定”以创建服务终结点。

创建部署组

需要一个部署组来包含虚拟机。

  1. 打开“生成和发布”中心的“发布”选项卡,打开“部署组”选项卡并选择“+ 新建”。

  2. 为部署组输入名称和可选说明。 选择“创建”。

Azure 资源组部署任务会在它运行时使用 Azure 资源管理器模板创建并注册 VM。 你不需要自己创建并注册虚拟机。

创建发布定义

发布定义指定 Team Services 在部署应用时执行的流程。 若要在 Team Services 中创建发布定义,请执行以下操作:

  1. 打开“生成和发布”中心的“生成”选项卡,打开发布定义列表中的 + 下拉列表,并选择“创建发布定义”。&

  2. 选择“空”模板并选择“下一步”。

  3. 在“项目”部分中,单击“链接一个项目”并选择“Jenkins”。 选择自己的 Jenkins 服务终结点连接。 然后,选择 Jenkins 源作业并选择“创建”。

  4. 在新的发布定义中,选择“+ 添加任务”并向默认环境中添加一个Azure 资源组部署任务。

  5. 选择“+ 添加任务”链接旁边的下拉箭头并向定义中添加一个部署组阶段。

  6. 在任务目录中,打开“实用工具”部分并添加“Shell 脚本”任务的一个实例。

  7. Azure 资源组部署任务中使用的参数模板设置用来连接到 VM 的管理员密码。 通过变量 $(adminpassword) 提供此密码:

    • 打开“变量”选项卡,在“变量”部分中,输入名称 adminpassword

    • 输入管理员密码。

    • 选择值文本框旁边的“挂锁”图标来保护密码。

配置 Azure 资源组部署任务

Azure 资源组部署任务用来创建部署组。 请如下所述对其进行配置:

  • Azure 订阅:从“可用 Azure 服务连接”下的列表中选择一个连接。 如果没有显示任何连接,则依次选择“管理”、“新建服务终结点”和“Azure 资源管理器”,并根据提示进行操作。 返回到发布定义,刷新“AzureRM 订阅”列表并选择已创建的连接。

  • 资源组:输入之前创建的资源组的名称。

  • 位置:为部署选择区域。

  • 模板位置:URL of the file

  • 模板链接:{your-git-repo}/ARM-Templates/UbuntuWeb1.json

  • 模板参数链接:{your-git-repo}/ARM-Templates/UbuntuWeb1.parameters.json

  • 替代模板参数:替代值的列表,例如:-location {location} -virtualMachineName {machine] -virtualMachineSize Standard_DS1_v2 -adminUsername {username} -virtualNetworkName fabrikam-node-rg-vnet -networkInterfaceName fabrikam-node-websvr1 -networkSecurityGroupName fabrikam-node-websvr1-nsg -adminPassword $(adminpassword) -diagnosticsStorageAccountName fabrikamnodewebsvr1 -diagnosticsStorageAccountId Microsoft.Storage/storageAccounts/fabrikamnodewebsvr1 -diagnosticsStorageAccountType Standard_LRS -addressPrefix 172.16.8.0/24 -subnetName default -subnetPrefix 172.16.8.0/24 -publicIpAddressName fabrikam-node-websvr1-ip -publicIpAddressType Dynamic
    对于 {占位符},请插入自己的具体值。

  • 启用先决条件:Configure with Deployment Group agent

  • TFS/VSTS 终结点:选择“添加”,并在“添加新的 Team Foundation Server/Team Services 连接”对话框中,选择“基于令牌的身份验证”。 输入连接名称和团队项目的 URL。 然后,生成并输入个人访问令牌 (PAT) 来对项目团队的连接进行身份验证。

  • 团队项目:选择当前的项目。

  • 部署组:输入用于资源组参数的同一部署组名称。

Azure 资源组部署任务的默认设置是用于创建或更新资源,并且以增量方式执行该操作。 该任务在它首次运行时创建 VM,之后只是对它们进行更新。

配置 Shell 脚本任务

Shell 脚本任务用来为在每台服务器上安装 Node.js 并启动该应用的脚本提供配置。 请如下所述对其进行配置:

  • 脚本路径:$(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh

  • 指定工作目录:Checked

  • 工作目录:$(System.DefaultWorkingDirectory)/Fabrikam-Node

重命名并保存发布定义

  1. 将发布定义的名称编辑为在 Jenkins 的生成的“生成后操作”选项卡中指定的名称。 Jenkins 要求此名称能够在源项目更新时触发新的发布。

  2. (可选)通过单击环境名称来更改该名称。

  3. 选择“保存”,并选择“确定”。

启动手动部署

  1. 选择“+ 发布”并选择“创建发布”。

  2. 在突出显示的下拉列表中选择已完成的生成,并选择“创建”。

  3. 选择弹出消息中的发布链接。 例如:“发布 Release-1 已创建。”

  4. 打开“日志”选项卡以查看发布控制台输出。

  5. 在浏览器中,打开已添加到部署组的服务器之一的 URL。 例如,输入 http://{your-server-ip-address}

启动 CI/CD 部署

  1. 在发布定义中,在 Azure 资源组部署任务的设置的“控制选项”部分中取消选中“已启用”复选框。 对于到现有部署组的将来部署,不需要重新执行此任务。

  2. 转到源 Git 存储库并修改文件 app/views/index.jade 中 h1 标题的内容。

  3. 提交更改。

  4. 几分钟后,会在 Team Services 或 TFS 的“发布”页面中看到新创建的发布。 打开此发布可以看到部署正在进行。 祝贺你!

后续步骤

在本教程中,你已使用 Jenkins 生成和用于发布的 Team Services 实现了到 Azure 的应用部署自动化。 你已了解如何:

  • 采用 Jenkins 生成应用
  • 为 Team Services 集成配置 Jenkins
  • 为 Azure 虚拟机创建部署组
  • 创建对 VM 进行配置并部署应用的发布定义

转到下一教程,详细了解如何部署 LAMP(Linux、Apache、MySQL 和 PHP)堆栈。

立即访问http://market.azure.cn

使用 Jenkins 和 Team Services 将应用部署到 Linux VM的更多相关文章

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

    若要将应用程序开发的生成.测试和部署阶段自动化,可以使用持续集成和部署 (CI/CD) 管道. 本教程介绍如何在 Azure 中使用 Visual Studio Team Services 和 Win ...

  2. Team Services 自动化部署项目

    一.创建Team Services账号 直接使用vs的账号即可,TS上集成了Git.把项目导入到Git中. 使用前提:有自己的服务器,把项目自动化部署到服务器上. 二.创建一个新的定义 三.选择种类( ...

  3. 使用Visual Studio Team Services持续集成(三)——使用工件

    使用Visual Studio Team Services持续集成(三)--使用工件 工件是应用程序的可部署组件.Visual Studio Team Services有能力在构建过程中显式地管理工件 ...

  4. 使用Visual Studio Team Services持续集成(二)——为构建定义属性

    使用Visual Studio Team Services持续集成(二)--为构建定义属性 1.从VSTS帐户进入到Build 2.编辑构建定义并单击Options Description:如果这里明 ...

  5. 使用Visual Studio Team Services持续集成(一)——构建ASP.NET Core

    使用Visual Studio Team Services持续集成(一)--构建ASP.NET Core 概述 持续集成(CI)是将代码尽可能频繁地集成到共享仓库中的过程.在代码集成期间,构建中断或测 ...

  6. Continuous Integration for iOS Apps with Visual Studio Team Services

    原文引用自:https://blog.xamarin.com/continuous-integration-for-ios-apps-with-visual-studio-team-services/ ...

  7. Visual Studio Team Services持续集成到Github仓库

    Devops如何用VSTS持续集成到Github仓库!   工欲善其事,必先利其器.在开始正式的教程之前我们先来聊聊准备工作. 管理工具会VSTS. 代码管理会用GITHUB. 服务器会用Azure. ...

  8. Team Services and Team Foundation Server官方资料入口

    Team Foundation Server msdn 中文文档入口 Team Services or Team Foundation Server www.visualstudio.com 英文文档 ...

  9. Visual Studio Team Services 帐户管理操作

    Visual Studio Team Services 网址: https://www.visualstudio.com/ 1.登陆 2.登陆后新建账户 3.删除团队项目 (1)点击自己的Visual ...

随机推荐

  1. 【链表】Add Two Numbers

    题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...

  2. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(一):Kitty 系统介绍

    在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 温馨提示: 有在演示环境删除数据的童鞋们,如果可以的话,麻烦动动小指,右键头像 ...

  3. Calendar详解

    (在文章的最后,将会介绍Date类,如果有兴趣,可以直接翻到最后去阅读) 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历.阴(农)历之分.它们的区别 ...

  4. MySQL中一个sql语句包含in优化问题

    第一版sql: SELECT module.id, module.module_name, module.module_code `module` where IN (module.did_acces ...

  5. sql中同一个表一个字段的值赋值给另一个字段

    UPDATE SG_User   SET DefaultOrganizationID = OrganizationID

  6. debian上安装docker ce

    在Debian9上安装Docker CE 使用从包中安装的方式 Docker是一个开源的容器引擎,它有助于更快地交付产品.Docker可将应用程序和基础设施层隔离,并且将基础设施当作程序一样进行管理. ...

  7. PHP 类与对象 全解析( 一)

    目录 PHP 类与对象 全解析( 一) PHP 类与对象 全解析( 二) PHP 类与对象 全解析(三 ) 1.类与对象 对象:实际存在该类事物中每个实物的个体.$a =new User(); 实例化 ...

  8. IDEA相关设置

    今天终于放弃了MyEclipse,在使用MyEclipse中的各种心酸就不多说,总结成一句话就是:珍爱生命,远离MyEclipse. 换到IDEA后,安装了IdeaVim插件,支持vim的操作,提高的 ...

  9. [C#]简单离线注册码生成与验证

    本文使用RSA非对称加密和Base64简单地实现离线注册码的生成与验证功能. 主要思路就是提供者持有密钥,通过RSA加密客户机标识或时间标识,再通过Base64加密成不太难看的注册码,然后分发给客户机 ...

  10. Java基础教程(9)--流程控制

    一.分支结构 1.if语句   if语句会与其后的第一条语句或代码块结合,且只有当判断条件为true时才执行语句或代码块.例如,自行车只有在运动的时候才可以减速,就像下面这样: void applyB ...