DevOps - Azure 解决方案

Azure 上的 DevOps 旨在将开发和 IT 运营结合在一起。它帮助我们更快地交付软件,质量更高,可靠性更高。Azure 为我们提供了一个强大的平台来设置 DevOps。它具有用于持续集成 (CI)、持续交付 (CD)、基础设施即代码 (IaC) 和监控的工具。

借助 Azure DevOps,我们可以管理代码存储库、自动化工作流,并轻松将应用部署到 Azure App Service 或 Kubernetes 等服务。它具有不同的服务,如 Azure Repos、Pipelines、Boards、Artifacts 和测试计划。这些服务在 DevOps 生命周期的每一步都有所帮助。它们使协作变得简单,并创建了顺畅的交付流程。

为什么选择 Azure 进行 DevOps?

Azure 为我们提供了完整的 DevOps 解决方案。它配备了企业级工具、出色的可扩展性和全球可用性。它支持多种编程语言、框架和第三方工具。这使得它可以灵活地用于不同类型的项目。

Azure DevOps 以其强大的 CI/CD 管道而闻名。它与 GitHub 配合良好,使将应用程序部署到 Azure 云变得简单。安全性是一个重点。Azure Key Vault 等工具可帮助我们管理机密,而 Azure Policy 则负责治理。

Azure 还使用 AI 为我们提供洞察力和监控工具,如 Application Insights。这些有助于在问题变成大问题之前解决问题并提高性能。所有这些使 Azure 成为现代 DevOps 实践的绝佳平台。

设置 Azure DevOps

Azure DevOps 为我们提供了处理整个软件流程的工具,从规划到部署。设置很简单。我们准备环境,创建组织,并使用 Azure Repos 和 Pipelines 等服务。让我们一步一步来。

先决条件

开始之前,请确保您已准备好这些 −

  • Azure 帐户 − 您可以在 Azure 门户 上创建一个。
  • 订阅 − 高级功能需要有效的 Azure 订阅。
  • Git 已安装 − 检查 Git 是否已安装。使用 git --version 进行确认。
  • 开发环境 − 使用 Visual Studio 或 VS Code 等工具。他们直接与 Azure DevOps 合作。

创建 Azure DevOps 组织

Azure DevOps 中的组织就像项目和用户的主要容器。

登录 − 转到 Azure DevOps 并使用您的 Microsoft 帐户登录。

创建组织

  • 单击"新建组织"。
  • 输入名称(如 MyDevOpsOrg),然后选择区域。
  • 单击"继续"。
  • 添加项目:
  • 在您的组织内,单击新建项目。
  • 添加详细信息,如项目名称、可见性(私有或公共)和版本控制(Git 或 TFVC)。

下面给出了用于设置管道的示例 YAML −

trigger:
  - main
pool:
  vmImage: 'ubuntu-latest'
steps:
  - script: echo "Hello Azure DevOps!"
    displayName: 'Print Message'

Azure DevOps 服务概述

Azure DevOps 提供多种服务。我们可以选择并仅使用我们需要的服务 −

Azure Repos − 帮助我们管理代码存储库。推送代码的示例 −

git init
git remote add origin https://dev.azure.com/MyDevOpsOrg/MyProject/_git/MyRepo
git add .
git commit -m "Initial commit"
git push -u origin main

Azure Pipelines − 自动化 CI/CD 工作流。例如,部署 Node.js

app:
pool:
  vmImage: 'ubuntu-latest'
steps:
  - task: NodeTool@0
    inputs:
      versionSpec: '14.x'
  - script: npm install
    displayName: 'Install Dependencies'
  - script: npm test
    displayName: 'Run Tests'

Azure Boards − 跟踪任务、冲刺和总体进度。

Azure Test Plans − 让我们管理和自动化测试。

Azure Artifacts − 处理和共享 npm、Maven 或 NuGet 等包。

此设置可轻松将 Azure DevOps 融入现有工作流。它高效且可扩展以满足不同的需求。

Azure Pipelines:CI/CD

Azure Pipelines 帮助我们自动构建、测试和部署应用程序。它有两个选项 - YAML 管道(提供更大的灵活性)和具有简单图形界面的经典管道。以下是我们如何创建和使用这些管道进行持续集成 (CI) 和持续部署 (CD)。

创建构建管道

构建管道可帮助我们编译源代码、运行测试和创建构建工件。

创建步骤

  • 在 Azure DevOps 项目中打开管道。
  • 单击新建管道。
  • 选择所需的存储库(如 GitHub 或 Azure Repos)。
  • 选择 YAML 文件或使用模板进行设置。

.NET 项目的 YAML 构建管道示例 −

trigger:
  - main
pool:
  vmImage: 'windows-latest'
steps:
  - task: UseDotNet@2
    inputs:
      packageType: 'sdk'
      version: '6.x'
  - script: dotnet build
    displayName: 'Build the project'
  - script: dotnet test
    displayName: 'Run Unit Tests'

将此文件作为 azure-pipelines.yml 保存在您的存储库的主文件夹中。

每次我们推送到主分支时,此管道都会运行。

设置发布管道

发布管道让我们可以将构建工件部署到暂存或生产等环境中。

创建步骤 −

  • 转到管道 >发布。
  • 单击新建管道并选择一个模板(如 Azure 应用服务部署)。
  • 将其链接到构建管道中的构建工件。
  • 添加部署阶段(例如,开发、测试、生产)。

Web 应用部署的示例配置 −

  • 工件源 − 链接到构建管道的输出。
  • 任务 − 添加 Azure 应用服务部署任务。填写应用服务名称、包或文件夹以及 Azure 订阅。

YAML 管道与传统管道

下表重点介绍了 YAML 管道与传统管道的不同之处−

功能 YAML 管道 经典管道
定义 存储在存储库中的 YAML 文件中。 通过 Azure DevOps UI 配置。
灵活性 高度可定制且版本可控。 适用于小型项目的简单设置。
触发 适用于分支、拉取请求等。 触发选项更少。
示例 YAML 以下示例显示部署到 Azure App服务: 不适用
trigger:
  - main
pool:
  vmImage: 'ubuntu-latest'
steps:
  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<Your Azure Subscription>'
      appName: '<Your App Service Name>'
      package: '$(Pipeline.Workspace)/drop/*.zip'

YAML 管道最适合大型项目和团队。它们允许自动化和协作。经典管道更简单,适合快速设置,或者当 YAML 看起来太复杂时。

使用 Azure 实现基础设施即代码 (IaC)

基础设施即代码 (IaC) 帮助我们使用代码管理云资源。它使配置自动化和更简单。Azure 支持许多 IaC 工具。这些工具带来一致性、版本控制和易于重复性。我们可以使用 Azure 资源管理器 (ARM) 模板、Terraform 或类似工具轻松定义和部署基础设施。

Azure 上的 IaC 简介

Azure 使用 − 支持 IaC

  • ARM 模板 − 这些是专为 Azure 制作的基于 JSON 的模板。
  • Terraform −可跨不同云(包括 Azure)运行的第三方工具。

使用 IaC 可减少错误,因为它消除了大多数手动步骤。它使环境保持一致,并使回滚更改更加容易。当我们将 IaC 与 CI/CD 管道结合使用时,它可确保基础设施的顺利和自动化设置。

使用 Azure 资源管理器 (ARM) 模板

ARM 模板以 JSON 形式定义 Azure 资源。它们以声明方式工作,因此我们编写所需的内容,然后 Azure 进行设置。

结构

  • 资源 − 列出要部署的 Azure 服务。
  • 参数 − 这些使模板可重复使用。我们可以提供名称或区域等输入。
  • 输出 −它们在部署后返回关键信息。

虚拟机的 ARM 模板示例

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vmName": { "type": "string" },
    "adminUsername": { "type": "string" },
    "adminPassword": { "type": "securestring" }
  },
  "resources": [
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2021-07-01",
      "name": "[parameters('vmName')]",
      "location": "eastus",
      "properties": {
        "hardwareProfile": { "vmSize": "Standard_DS1_v2" },
        "osProfile": {
          "computerName": "[parameters('vmName')]",
          "adminUsername": "[parameters('adminUsername')]",
          "adminPassword": "[parameters('adminPassword')]"
        }
      }
    }
  ]
}

部署 − 使用 Azure CLI 进行部署。

使用 Terraform 和 Azure 管理 IaC

Terraform 是我们可以用来管理 Azure 资源的另一种工具。它非常灵活,支持多个云,并跟踪资源的状态。

安装 Terraform − 从 Terraform 下载 下载 Terraform。

创建 Terraform 配置

provider "azurerm" {
   features {}
}
resource "azurerm_resource_group" "example" {
   name     = "example-resources"
   location = "eastus"
}
resource "azurerm_storage_account" "example" {
   name                     = "examplestorageacct"
   resource_group_name      = azurerm_resource_group.example.name
   location                 = azurerm_resource_group.example.location
   account_tier             = "Standard"
   account_replication_type = "LRS"
}

使用以下命令管理资源 −

初始化

terraform init

计划

terraform plan

应用

terraform apply

Terraform 让我们可以重复使用配置、管理状态并使用许多社区模块。这些使管理 Azure 资源变得更容易、更快捷。

使用 Azure 进行监控和日志记录

Azure 为我们提供了强大的工具来跟踪资源的执行情况、应用程序的运行情况以及发现任何问题。以下是表格形式的简单概述。

功能 描述 示例
集成 Azure Monitor 帮助从一个地方监控 Azure 资源和应用程序。 设置高 CPU 使用率警报:az monitor metrics alert create --name HighCPUAlert。
用于可观察性的应用程序洞察 跟踪应用程序的执行情况以及用户与它们的交互方式。 添加此代码以跟踪事件:appInsights.trackEvent({ name: "UserLogin" });。
适用于 DevOps 的日志分析 让我们使用 KQL(Kusto 查询)查询和分析日志数据语言)。 示例查询:`AzureDiagnostics`

Azure DevOps 中的安全性

Azure DevOps 提供内置安全功能来保护我们的资源、管理机密数据并确保管道安全。以下是简要摘要。

功能 描述 示例
管理权限和访问控制 使用 RBAC(基于角色的访问控制)保护资源。 添加权限:az devops security permission add --id <role-id> --user-id <user-id>。
使用 Azure Key Vault 管理机密 安全地存储机密、密钥和证书。 管道任务示例:使用 AzureKeyVault@2 获取部署机密。
在管道中集成安全测试 在 CI/CD 管道中添加自动安全检查,以进行静态和动态测试。 在 YAML 中添加 WhiteSource Bolt 或 SonarQube 等任务,以在构建期间查找漏洞。

使用 Key Vault 集成进行安全部署的 YAML 示例 −

trigger:
  - main
pool:
  vmImage: 'ubuntu-latest'
steps:
  - task: AzureKeyVault@2
    inputs:
      azureSubscription: 'MyAzureSubscription'
      KeyVaultName: 'MyKeyVault'
      SecretsFilter: '*'
  - script: echo $(mySecret)
    displayName: 'Display Secret for Debugging'

结论

在本章中,我们重点介绍了如何设置 Azure DevOps、创建 CI/CD 管道、使用 ARM 模板和 Terraform 的基础设施即代码 (IaC),以及确保我们的监控、日志记录和安全实践强大。

通过使用 Azure Monitor、Application Insights 和 Log Analytics,我们改善了资源管理和可观察性。我们还讨论了如何通过控制访问、使用 Azure Key Vault 管理机密以及向管道添加安全测试来保护 Azure DevOps。这些实践有助于自动化、保护和监控软件交付过程,使 Azure 上的 DevOps 工作流更加高效、可靠和安全。