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 工作流更加高效、可靠和安全。

