教程:使用 Jenkins 和 Azure DevOps Services 部署到 Linux 虚拟机

持续集成(CI)和持续部署(CD)构成了一个管道,可以通过该管道生成、发布和部署代码。 Azure DevOps Services 提供了一组完整的、功能齐全的 CI/CD 自动化工具,用于部署到 Azure。 Jenkins 是一种流行的第三方 CI/CD 服务器基础的工具,提供 CI/CD 自动化功能。 可以将 Azure DevOps Services 和 Jenkins 一起使用,以自定义交付云应用或服务的方式。

在本教程中,将使用 Jenkins 生成 Node.js Web 应用。 然后,使用 Azure DevOps 部署它

到包含 Linux 虚拟机(VM)的 部署组 。 你将学会如何:

  • 获取示例应用。
  • 配置 Jenkins 插件。
  • 为 Node.js配置 Jenkins Freestyle 项目。
  • 为 Azure DevOps Services 集成配置 Jenkins。
  • 创建 Jenkins 服务终结点。
  • 为 Azure 虚拟机创建部署组。
  • 创建 Azure Pipelines 发布管道。
  • 执行手动部署和 CI 触发的部署。

先决条件

获取示例应用

需要一个应用来部署存储在 Git 存储库中的应用。 对于本教程,建议使用 GitHub 中提供的此示例应用。 本教程包含用于安装 Node.js 和应用程序的示例脚本。 如果要使用自己的存储库,应配置类似的示例。

创建此应用的分支并记下位置(URL),以便在本教程的后续步骤中使用。 有关详细信息,请参阅 派生存储库

注释

该应用是通过 Yeoman 构建的。 它使用 Express、Bower 和 Grunt。 它包含一些 npm 包作为依赖项。 此示例还包含一个脚本,用于设置 Nginx 并部署应用。 它在虚拟机上执行。 具体而言,脚本:

  1. 安装 Node、Nginx 和 PM2。
  2. 配置 Nginx 和 PM2。
  3. 启动 Node 应用。

配置 Jenkins 插件

首先,必须配置两个 Jenkins 插件: NodeJSVS Team Services 持续部署

  1. 打开 Jenkins 帐户并选择“ 管理 Jenkins”。
  2. “管理 Jenkins ”页上,选择“ 管理插件”。
  3. 筛选列表以查找 NodeJS 插件,然后选择“ 安装”而不重启 选项。 将 NodeJS 插件添加到 Jenkins
  4. 筛选列表以查找 VS Team Services 持续部署 插件,并选择“不重启安装”选项。
  5. 返回到 Jenkins 仪表板,然后选择“ 管理 Jenkins”。
  6. 选择 “全局工具配置”。 查找 NodeJS 并选择 NodeJS 安装
  7. 选择“ 自动安装 ”选项,然后输入 “名称” 值。
  8. 选择“保存”

为 Node.js 配置 Jenkins Freestyle 项目

  1. 选择 “新建项”。 输入项名称。
  2. 选择 Freestyle 项目。 选择“确定”
  3. “源代码管理 ”选项卡上,选择 “Git ”,并输入包含应用代码的存储库和分支的详细信息。
    将存储库添加到构建中
  4. 在“ 生成触发器 ”选项卡上,选择 “轮询 SCM ”,并输入计划 H/03 * * * * ,每三分钟轮询 Git 存储库的更改。
  5. 构建环境选项卡上,选择提供 Node 和 npm bin/ 文件夹路径,然后选择Node.js 安装值。 将 npmrc 文件 设置为 使用系统默认值
  6. 在“ 生成 ”选项卡上,选择 “执行 shell ”并输入命令 npm install 以确保更新所有依赖项。

为 Azure DevOps Services 集成配置 Jenkins

注释

确保用于以下步骤的个人访问令牌(PAT)包含 Azure DevOps Services 中的 发布 (读取、写入、执行和管理)权限。

  1. 如果还没有 PAT,请在 Azure DevOps Services 组织中创建 PAT。 Jenkins 需要此信息才能访问 Azure DevOps Services 组织。 请确保存储令牌信息,以便用于本节中的接下来的步骤。

    若要了解如何生成令牌,请阅读如何为 Azure DevOps Services 创建个人访问令牌?

  2. 构建后操作选项卡中,选择添加构建后操作。 选择“ 存档项目”。

  3. 对于 要存档的文件,请输入 **/* 以包括所有文件。

  4. 若要创建另一个动作,请选择 添加生成后操作

  5. 在 TFS/Team Services 中选择触发器发布。 输入 Azure DevOps Services 组织的 URI,例如 https://{your-organization-name}.visualstudio.com

  6. 输入 项目 名称。

  7. 选择发布管道的名称。 (稍后在 Azure DevOps Services 中创建此发布管道。

  8. 输入凭据以连接到 Azure DevOps Services 或 Azure DevOps Server 环境:

    • 如果使用 Azure DevOps Services,请将 用户名 留空。
    • 如果使用 Azure DevOps Server 的本地版本,请输入用户名和密码。
      配置 Jenkins 生成后操作
  9. 保存 Jenkins 项目。

创建 Jenkins 服务终结点

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

  1. 在 Azure DevOps Services 中打开 “服务 ”页,打开 “新建服务终结点 ”列表,然后选择 “Jenkins”。 添加 Jenkins 终结点
  2. 输入连接的名称。
  3. 输入 Jenkins 服务器的 URL,然后选择 “接受不受信任的 SSL 证书 ”选项。 示例 URL http://{YourJenkinsURL}.westcentralus.cloudapp.azure.com
  4. 输入 Jenkins 帐户的用户名和密码。
  5. 选择“ 验证连接 ”以检查信息是否正确。
  6. 选择 “确定 ”以创建服务终结点。

为 Azure 虚拟机创建部署组

需要一个 部署组 来注册 Azure DevOps Services 代理,以便可以将发布管道部署到虚拟机。 部署组可以轻松定义目标计算机的逻辑组,并在每台计算机上安装所需的代理。

注释

在以下过程中,请务必安装必备组件, 并且不要使用 sudo 权限运行脚本。

  1. 打开“生成”和“发布”中心的“发布”选项卡,打开“部署组”,然后选择“+ 新建”。
  2. 输入部署组的名称和可选说明。 然后选择“创建”
  3. 为您的部署目标虚拟机选择操作系统。 例如,选择 Ubuntu 16.04+
  4. 选择“使用脚本中的个人访问令牌进行身份验证”
  5. 选择 “系统先决条件 ”链接。 安装操作系统的先决条件。
  6. 选择 “将脚本复制到剪贴板” 以复制脚本。
  7. 登录到部署目标虚拟机并运行脚本。 不要使用 sudo 权限运行脚本。
  8. 安装后,系统会提示你输入部署组标记。 接受默认值。
  9. 在 Azure DevOps Services 中,在部署组的目标中检查新注册的虚拟机。

创建 Azure Pipelines 发布流水线

发布管道指定 Azure Pipelines 用于部署应用的过程。 在此示例中,将执行 shell 脚本。

若要在 Azure Pipelines 中创建发布管道,请执行以下作:

  1. 打开“生成和发布”中心的“发布”选项卡,然后选择“创建发布管道”。
  2. 选择 “空 ”模板,方法是选择从 空进程开始。
  3. 工件部分中,选择+ 添加工件,然后在源类型中选择Jenkins。 选择 Jenkins 服务终结点连接。 然后选择 Jenkins 源作业,然后选择“ 添加”。
  4. 选择 环境 1 旁边的省略号。 选择 添加部署组阶段
  5. 选择部署组。
  6. 选择 + 将任务添加到 部署组阶段
  7. 选择 Shell 脚本 任务,然后选择“ 添加”。 Shell 脚本任务为要在每个服务器上运行的脚本提供配置,以便安装 Node.js 并启动应用。
  8. 对于 脚本路径,请输入 $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh
  9. 选择 “高级”,然后启用 “指定工作目录”。
  10. 对于 工作目录,请输入 $(System.DefaultWorkingDirectory)/Fabrikam-Node
  11. 将发布管道的名称编辑为 Jenkins 中生成 后作 选项卡上指定的名称。 Jenkins 需要此名称,以便能够在源制品更新时触发新版本。
  12. 选择“ 保存 ”,然后选择“ 确定 ”保存发布管道。

执行手动及由 CI 触发的部署

  1. 选择 “+ 发布 ”,然后选择“ 创建发布”。
  2. 选择在突出显示的下拉列表中完成的构建,然后选择Queue
  3. 在弹出消息中选择发布链接。 例如:“已发布 Release-1 ”。
  4. 打开“ 日志 ”选项卡,监视发布控制台输出。
  5. 在您的浏览器中,打开您添加到部署组的某个服务器的 URL。 例如,输入 http://{your-server-ip-address}
  6. 转到源 Git 存储库,使用一些已更改的文本修改文件 app/views/index.jade 中 h1 标题的内容。
  7. 提交更改。
  8. 几分钟后,你将在 Azure DevOps 的 “发布 ”页上看到一个新版本。 打开发布以查看部署过程。 祝贺!

Jenkins 插件疑难解答

如果使用 Jenkins 插件遇到任何 bug,请针对特定组件在 Jenkins JIRA 中提出问题。

后续步骤

在本教程中,你将通过使用 Jenkins 进行构建,并使用 Azure DevOps Services 进行发布,来自动化将应用部署到 Azure。 你已了解如何执行以下操作:

  • 在 Jenkins 中生成应用。
  • 为 Azure DevOps Services 集成配置 Jenkins。
  • 为 Azure 虚拟机创建部署组。
  • 创建一个 Azure Pipeline,用于配置 VM 并部署应用。

若要了解如何将 Azure Pipelines 用于生成和发布步骤,请参阅 此内容

若要了解如何创作基于 YAML 的 CI/CD 管道以部署到 VM,请继续学习下一教程。