65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 VSTS 为 ASP.NET Core 构建 DevOps CI/CD 管道

starIconstarIconstarIconstarIconstarIcon

5.00/5 (11投票s)

2018年6月7日

CPOL

7分钟阅读

viewsIcon

36077

本文主要介绍如何使用 VSTS 创建新的生成和发布定义。文章简要介绍了 DevOps、持续集成、持续交付和持续部署。

引言

基于 Web 的应用程序使我们的工作更加轻松。特别是当我们只需要屏幕之间的交互时,我们可以考虑单页应用程序 (SPA)。对于 SPA,我们可能需要 webpack、grunt 或 gulp 等工具来合并和打包我们的客户端脚本。单击此处了解基础知识。假设我们使用 ASP.NET Core,那么我们可能需要使用 npm、bower 或 yarn 等工具来管理包,以便我们能够恢复包并编译我们的应用程序。但是,如果您没有自动化的 CI/CD,那么首次部署单页应用程序也很困难。在本文中,我的主要重点是向您展示如何使用 VSTS 为您的 ASP.NET Core 应用程序创建生成和发布。

覆盖主题

  • 单体架构和微服务架构
  • 敏捷和 DevOps
  • 持续集成
  • 持续交付
  • 持续部署
  • 使用 VSTS 创建项目
  • 创建新的生成定义
  • 使用 webpack 打包脚本
  • 创建新的发布定义

让我们深入了解基本概念

单体架构和微服务架构

曾经有一段时间,单体架构是一种常见的做法,瀑布模型也很流行。在这种方法论中,一切都被视为一个大型项目,这是一个结构化和顺序化的过程。现在,它被分解成小的部分,并且是迭代的。是的,我指的是微服务架构和敏捷方法论。

One Big Project

敏捷和 DevOps

我们知道敏捷是一种开发方法论。DevOps 这个词本身就是敏捷的扩展,它主要侧重于从开发过程到生产支持。我们可以说,这是软件开发和运维的结合。

Agile Development

DevOps 背后的驱动力

当我们谈论 DevOps 时,经常会出现这些术语

  • 持续集成 (CI)
  • 持续交付 (CD)
  • 持续部署 (CD)

持续集成

开发人员一天多次将代码检入/提交并合并到共享存储库(Git、Team Foundation 版本控制等),并且在代码合并后,会自动生成并运行自动化测试。

CI Process

持续交付

代码集成后,代码将经过生成和测试。现在,它已准备好将代码推送到暂存环境(非生产测试)或生产环境,但您需要手动批准才能推送。

Continuous Delivery

持续部署

代码集成后,代码将经过生成和测试。现在,无需任何批准,它将自动推送到暂存环境(非生产测试)或生产环境。

Continuous Deployment

使用 VSTS 为 ASP.NET Core 应用程序进行自动化 CI

先决条件

您需要一个Visual Studio Team Services 帐户和一个Git 帐户。还没有?您可以从 https://www.visualstudio.comhttps://github.com 创建一个新的免费帐户。

使用 VSTS 创建团队项目

  1. 选择 项目 > 新建项目

    New Project

  2. 为项目提供一个名称,并为您的项目选择正确的版本控制 Git 或 TFVC。选择一个工作项流程。单击 创建 按钮来创建项目。

    Create Project

  3. 单击 在 Visual Studio 中克隆

    Clone Project

  4. VS IDE 将弹出一个窗口。单击“克隆”按钮。

    VS_Clone

  5. 选择 团队资源管理器,然后单击 创建新项目或解决方案

    Create Solution

    创建项目后,您需要提交所有更改。单击 团队资源管理器 > 更改。填写更改说明,然后单击 全部提交

    Commit

  6. 单击 同步 以同步代码。

    sync

  7. 最后,单击 发布(传出提交 > 发布)。

    Publish

为 ASP.NET Core 应用程序创建新的生成定义

  1. 选择 生成和发布 选项卡,然后选择 生成
  2. 选择 新建 来创建新定义。

    Build_Defination

  3. 选择项目、存储库、分支,然后单击 继续

    SelectSource

  4. 根据您的项目类型选择生成模板。我选择 ASP.NET Core (.NET Framework),然后单击 应用 按钮来创建生成定义。

    TemplateForNewBuildDefination

  5. 选择 进程 任务,并填写生成定义的名称(例如,HelloWorld-Dev,我们将在发布中使用此名称)。为要运行生成的默认代理选择 托管 VS2017

    如果您使用的团队使用 Visual Studio 2017,则选择 Hosted VS2017,因为它具有 .NET Core 框架和其他构建项目所需的组件。如果您使用的团队在 Ubuntu 上使用开发工具,则选择 Hosted Linux。如果您使用的团队使用 Visual Studio 2013 或 Visual Studio 2015,则选择 Hosted。

    为“解决方案或 packages.config 路径”选择项目解决方案文件,并填写 生成件名称

    NamingOfBuildDefination

  6. 选择 获取源 任务,并检查正确的项目、存储库和分支。选择 clean: trueclean options: sources。Tag sources: Never。Report: build status。

    GetSource

  7. 在阶段 1 中选择 生成解决方案 任务。选择 Visual Studio 版本:最新。MSBuild 体系结构:选择 X64 或 X86,适合您的那个。

    BuildSetup

    使用 Webpack 生成和打包应用程序

  8. 我们需要添加 npm 来安装项目中使用的所有包。要添加 npm 任务,请单击阶段 1 右侧的 (+) 添加任务,然后选择包。查找并添加 npm 任务。现在,将 npm 任务拖放到 生成解决方案 之前。如果您使用 Bower 而不是 npm,那么您需要添加 Bower。

    AddNPM

    现在选择 npm 任务,并选择 命令install。现在,对于“包含 package.json 的工作文件夹”,请选择包含 package.json 文件的主要项目的根文件夹。选择 自定义注册表和身份验证注册表 > 要使用的注册表:我的 .npmrc 中的注册表;高级 > 详细日志记录:已选中;控件选项 > 已启用:已选中。

    NPMInstall

  9. 接下来,我们将需要 PowerShell 脚本 任务来编译我们的客户端脚本。在这里,我们将安装 webpack 并使用 webpack 编译 JavaScript。选择 (+) 添加任务,然后在生成部分中查找 PowerShell。将其添加到生成定义中,放在 npm install生成解决方案 任务之间。

    PowerShell

    填写以下信息

    • 显示名称:PowerShellScript
    • 类型:内联脚本
    • 内联脚本
      (Get-Item -Path ".\" -Verbose).FullName
      $env:Path=[System.Environment]::GetEnvironmentVariable("Path","Machine")+";"+
      [System.Environment]::GetEnvironmentVariable("Path","User")
      Get-Command -CommandType Application -ErrorAction SilentlyContinue 
      -Name webpack | Select-Object -ExpandProperty Definition | echo
      npm install -g webpack --no-optional
      node_modules\.bin\webpack -p
    • 高级 > 工作文件夹:包含 webpack.config.js 文件的 Web 应用程序的根文件夹。
    • 在标准错误上失败:已选中
    • 控制选项:已选中“启用”和“出错时继续”
    • 运行此任务:仅当所有先前的任务都成功时。
  10. 选择 触发器 选项卡并选择以下信息。
    • 启用持续集成
    • 生成进行中时批处理更改
    • 分支筛选器 > 类型:包含 & 分支规范:例如,dev 或 qa 或 master

      Triggers

  11. 选择 选项 选项卡并选择以下信息。
    • 新生成请求处理:已启用。
    • 自动链接此生成中的新工作:已启用。
    • 仅链接到添加到指定分支的工作 > 类型:包含;分支规范:例如,dev。
    • 您还可以更改生成作业的默认值。

      Options

  12. 最后单击 保存并排队 > 保存 以保存生成定义。

    SaveBuildDefination

    现在我们有了自动化的 CI 生成,如果您将代码更改提交到您选择的分支,您将看到以下输出……。

    Build_Output

创建新的发布定义

  1. 转到 生成和发布 选项卡 > 发布 > 新建定义

    NewRelease

    注意:如果您已有现有发布,请选择加号 (+) 并选择 创建发布定义

    CreateNewRelease

  2. 选择一个模板:IIS 网站和 SQL 数据库部署

    IIS_TemplateAdd_Release

  3. 您将看到一个环境窗口。现在从属性中更改 环境名称

    Environment_Name

  4. 在“生成件”面板中,选择 +添加,然后选择项目、源(生成定义)、默认版本和源别名。单击 添加 按钮。

    Release_Add_Artifact

  5. 单击闪电图标以触发持续部署,然后在右侧启用它。如果您希望在源生成件的新版本可用时创建新发布,则需要此项。单击 添加 按钮并选择类型和生成分支。

    CI_Trigger

  6. 单击 环境 的闪电图标,然后
    • 选择触发器:发布后
    • 生成件筛选器:已启用
    • 选择 + 添加 > 生成件名称(例如,HelloWorld-Artifact-Dev
    • 类型:包含;生成分支:例如,Dev;生成标记:留空。

      Trigger_Env

  7. 在浏览器左侧,选择 任务,或从“环境”面板中选择任务(2 个阶段,2 个任务)。这些任务将执行您的部署过程。

    Task_Env

  8. 现在选择 任务 > 任务环境(例如,HelloWorld-Dev-Env)并填写以下信息
    • 配置类型:IIS 网站
    • 操作:创建或更新
    • 网站名称:HelloWorldApp-Dev
    • 应用程序池 > 名称:HelloWorldApp-Dev
    • 单击“添加绑定” > … 按钮。将弹出“添加绑定”窗口并填写信息
    • 协议:http 或 https,端口:您的 IIS 分配的端口(例如,543),以及 主机名:例如,helloWorldApp-dev.yourDomain.com

      8Task_Env

  9. 单击左侧的 IIS 部署 并选择部署组。

    9IIS_Deployment_Group

  10. 选择 IIS Web App Manage 并填写信息
    • 物理路径:%SystemDrive%\inetpub\wwwroot\Dev\HelloWorldApp-Dev\
    • 物理路径身份验证:应用程序用户(直通)
    • .NET 版本:v4.0
    • 托管管道模式:集成
    • 身份:选择您偏好的身份

      10IIS_Web_App_Manage

  11. 选择 IIS Web App Deploy 并选中“在应用程序脱机时”。

    11IIS_Web_App_Deploy

  12. 我没有使用 SQL 部署 任务。因此,如果您不需要,可以禁用或删除该任务。选择 SQL Deployment,然后右键单击它以 禁用选定的任务删除选定的任务

    12Disable_SQL_DB

  13. 最后单击 保存 按钮以保存发布定义。

注意:不要忘记设置您的 IIS 配置。

© . All rights reserved.