持续集成 (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. centos6 和 centos7 网络配置

    centos 6配置,1 vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE="eth0" BOOTPROTO="st ...

  2. php 比较2字符串相似度 百分比

    $n1 = similar_text($str1, $str1); $n2 = similar_text($str2, $str2); $nn = similar_text($str1, $str2) ...

  3. 查看LINUX 系统硬件等详细信息

    转载这位朋友[地址] 几个cpu more /proc/cpuinfo |grep "physical id"|uniq|wc -l 每个cpu是几核(假设cpu配置相同) mor ...

  4. 自然语言处理--Word2vec(二)

    前一篇,word2vec(一)主要讲了word2vec一些表层概念,以及主要介绍CBOW方法来求解词向量模型,这里主要讲论文 Distributed Representations of Words ...

  5. Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)

    出自  http://www.jb51.net/article/93125.htm

  6. java开发一个应用的总结

    需要注意的地方: (1)业务点要提前列出来,这样可防止遗漏: (2)关键业务点一定要反复确定,最好能做个测试demo出来,在没有完成之前,Everything is possible: (3)有陌生的 ...

  7. [转] Hadoop MapReduce开发最佳实践(上篇)

    前言 本文是Hadoop最佳实践系列第二篇,上一篇为<Hadoop管理员的十个最佳实践>. MapRuduce开发对于大多数程序员都会觉得略显复杂,运行一个WordCount(Hadoop ...

  8. Spring Aop之@Before、@After、@Around、@AfterReturning

    在项目中使用到了@Aspect注解,故研究了下与其配套的几个注解,将测试结果记录下来 import org.aspectj.lang.JoinPoint; import org.aspectj.lan ...

  9. 【手记】解决启动SQL Server Management Studio 17时报Cannot find one or more components...的问题

    刚装好SSMS 17.1准备体验,弹出: 一番搜索,普遍办法都是安装VS2015独立shell.删除某个注册表项什么的,没用,首先这个shell我是装了的,然后也没有那个注册表项.我自己尝试过重装sh ...

  10. 有序列表ol和定义列表dl,dt,dd

    有序列表是一种讲究排序列表结构,使用<ol>标签定义,其中包含多个<li>列表项目.一般网页设计中,列表结构可以互用有序或者无序类表标签.但是,在强调项目排序栏目中,选用有序列 ...