Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
本文介绍如何创建和定位 Azure Pipelines 环境。 环境是一组资源,你可以通过管道部署来针对这些资源进行操作。
环境表示管道部署软件所在的逻辑目标。 常见的环境名称包括开发、测试、QA、过渡和生产。
注意
经典管道中不提供 Azure DevOps 环境。 对于经典管道, 部署组 提供类似的功能。
环境具有以下优势:
部署历史记录。 将记录管道名称和运行详细信息,以便部署到环境及其资源。 在面向同一环境或资源的多个管道的上下文中,可以使用 环境的部署历史记录 来标识更改源。
提交和工作项的可追溯性。 你可以在管道运行中查看面向环境的作业。 还可以查看新部署到环境的提交和工作项。 通过可跟踪性,还可以跟踪代码更改提交或功能/bug 修复工作项是否已到达环境。
诊断资源健康。 可以验证应用程序是否在所需状态下运行。
安全性。 可以通过指定允许哪些用户和管道以环境为目标来保护环境。
环境是一组资源,其中资源本身表示实际部署目标。 Azure Pipelines 环境目前支持 Kubernetes 和 虚拟机 资源类型。
如果 YAML 管道引用了不存在的环境:
当执行该操作的用户已知且可以分配权限时,Azure Pipelines 会自动创建环境。
当 Azure Pipelines 没有有关用户执行操作的信息(例如,在从外部代码编辑器进行 YAML 更新中)时,管道将失败。
先决条件
若要创建环境,请确保具备:
- Azure DevOps 组织和项目。
- 项目中的环境创建者角色。
创建环境
要创建第一个环境:
请通过
https://dev.azure.com/{yourorganization}
登录您的 Azure DevOps 组织并打开您的项目。选择管道>环境>创建环境。
输入环境信息,然后选择“创建”。 稍后可将资源添加到现有环境。
提示
创建一个空环境,并在部署作业中引用它,以便记录该环境的部署历史。
若要以编程方式创建和管理环境,请使用 Azure DevOps 环境 REST API。
你可以使用 Azure Pipelines 部署到环境。 有关详细信息,请参阅使用 Azure Pipelines 生成并部署到 Azure Kubernetes 服务。
从部署作业中,将某个环境作为目标
部署作业包含按顺序运行的步骤。 可以使用部署作业以整个环境组的资源为目标,如以下示例 YAML 代码片段所示。 管道在 myVM
计算机上运行,因为指定了该资源名称。
- stage: deploy
jobs:
- deployment: DeployWeb
displayName: deploy Web App
pool:
vmImage: 'Ubuntu-latest'
# creates an environment if it doesn't exist
environment:
name: 'smarthotel-dev'
resourceName: myVM
resourceType: virtualMachine
strategy:
runOnce:
deploy:
steps:
- script: echo Hello world
针对部署作业中的特定环境资源
可以将部署目标限定为环境中的特定资源,以便可以在特定资源上记录部署历史记录。 部署作业的步骤会自动从部署作业目标的资源继承服务连接详细信息。
在以下示例中,kubernetesServiceConnection
的值会自动传递到 environment.resource
输入中的任务。
environment:
name: 'smarthotel-dev.bookings'
strategy:
runOnce:
deploy:
steps:
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
namespace: $(k8sNamespace)
manifests: $(System.ArtifactsDirectory)/manifests/*
imagePullSecrets: $(imagePullSecret)
containers: $(containerRegistry)/$(imageRepository):$(tag)
注意
如果使用专用 AKS 群集,请确保连接到群集的虚拟网络,因为 API 服务器终结点不会通过公共 IP 地址公开。
Azure Pipelines 建议在有权访问群集虚拟网络的 VNET 中设置自承载代理。 有关详细信息,请参阅 用于连接到专用群集 的选项。
使用手动审批检查
为了控制生产环境的部署,Azure Pipelines 支持手动审批流程。 这些检查允许资源所有者控制管道中的某个阶段何时消耗资源。 资源所有者可以定义审批和检查,在消耗该资源的阶段开始之前,必须满足这些审批和检查。
环境 创建者、 管理员和 用户 角色(而不是 读者 角色)可以管理审批和检查。 作为环境所有者,您可以通过使用审批检查来手动控制阶段的运行时间。 有关详细信息,请参阅定义审批和检查。
查看运行详细信息中的环境
在管道运行详细信息的“环境”选项卡下,可以看到管道运行部署作业针对的所有环境。
注意
如果使用Azure Kubernetes 服务(AKS)专用群集,则“环境”选项卡不可用。
查看部署历史记录
可以在“Azure Pipelines 环境”部分选择“部署”选项卡以查看部署历史记录。
从面向特定环境的所有管道中查看作业。 例如,每个均有自己管道的两个微服务可部署到同一环境。 部署历史记录有助于识别影响环境的所有管道,还有助于可视化每个管道的部署顺序。
若要向下钻取作业详细信息,请选择部署页上的 “更改 和 工作项 ”选项卡。 这些选项卡显示了部署到环境的提交列表和工作项列表。 每个列表项表示该部署中的新项。
在更改选项卡上,第一个列表包含到该点的所有提交,以下列表仅包含该作业的更改。 如果多个提交绑定到同一作业,则“ 更改 ”选项卡上有多个结果。
如果多个工作项绑定到同一个作业,则“工作项”选项卡上有多个结果。
安全性
可以通过设置用户权限和管道权限来保护环境。
用户权限
可以控制谁可以使用用户权限创建、查看、使用和管理环境。 有四个角色:创建者负责所有环境、读取者、用户和管理员。
若要使用环境的 “用户权限 ”面板添加用户,请转到要授权的特定 环境 ,选择“ 更多操作 ”图标,然后选择“ 安全性”。
在“安全”页的“用户权限”面板中,选择“添加”,然后选择“用户或组”和“合适的角色”。
在用户权限面板中,你还可以设置继承的权限,并替代环境的角色。
角色 | 说明 |
---|---|
创建者 | 全局角色,可从环境中心安全选项获取。 此角色的成员可以在项目中创建环境。 默认情况下,参与者会被添加为成员。 在不存在环境的情况下触发 YAML 管道所必需。 |
读取者 | 此角色的成员可以查看环境。 |
用户 | 此角色的成员可以在创建或编辑 YAML 管道时使用环境。 |
管理员 | 此角色的成员可以管理权限、创建、管理、查看和使用环境。 对于特定环境,其创建者默认添加为管理员。 管理员还可以向所有管道开放环境的访问权限。 |
重要
创建环境时,只有创建者具有管理员角色。
角色 | 说明 |
---|---|
创建者 | 全局角色,可从环境中心安全选项获取。 此角色的成员可以在项目中创建环境。 默认情况下,参与者会被添加为成员。 在不存在环境的情况下触发 YAML 管道所必需。 |
读取者 | 此角色的成员可以查看环境。 |
用户 | 此角色的成员可以在创建或编辑 YAML 管道时使用环境。 |
管理员 | 除了使用该环境之外,此角色的成员还可以管理涉及该环境的所有其他角色的成员资格。 默认情况下,创建者会被添加为成员。 |
管道权限
使用“安全”页的“管道权限”面板来授权所有或选定的管道部署到环境。
若要删除对环境或资源的开放访问权限,请在管道权限中选择“限制”权限。
当权限受到限制时,可以允许特定管道部署到环境或特定资源。 选择+并从要允许的管道列表中选择。
常见问题解答
尝试创建环境时,为何会收到错误消息?
如果看到“访问被拒绝”消息:{User} 需要“创建”权限才能执行该操作,请转到>以检查你是否具有利益干系人角色。 利益干系人角色无法创建环境,因为利益干系人无权访问存储库。
更改访问级别,然后检查以查看是否可以创建环境。 有关详细信息,请参阅用户和权限管理常见问题解答。
为什么遇到找不到环境的错误?
如果看到消息 “作业 XXXX:找不到环境 XXXX”。环境不存在或尚未获得使用授权。失败的原因有多种。
运行时参数在创建环境时不起作用,因为参数只在运行时展开。 可以使用变量创建环境或使用 templateContext 将属性传递给模板。
在引用 YAML 管道文件中不存在的环境时,Azure Pipelines 在下列情况下会自动创建环境:
- 在 Azure Pipelines Web 体验中使用 YAML 管道创建向导,并引用未创建的环境。
- 使用 Azure Pipelines Web 编辑器更新 YAML 文件,将引用添加到环境后保存管道。
在以下情况下,Azure Pipelines 没有有关创建环境的用户的信息,因此管道会失败:
- 使用其他外部代码编辑器更新 YAML 文件。
- 添加对不存在的环境的引用,然后触发手动或持续集成管道。
以前,Azure Pipelines 通过将所有项目参与者添加到环境的管理员角色来处理这些情况。 然后,项目的任何成员都可以更改这些权限,并阻止其他人访问环境。 为了防止出现这种结果,Azure Pipelines 现在会让这些作业失败。