← 返回
AI技术

基于 GitHub Actions 和 Microsoft Foundry 的智能体 DevOps

✍️ zhirenhun 📅 2026/9/25 👁 205 阅读 ⏱ 21 分钟
基于 GitHub Actions 和 Microsoft Foundry 的智能体 DevOps

随着 AI 代理在软件开发讨论中占比日益增加,我开始思考它们对自己作为 DevOps 工程师角色可能意味着什么。它们在交付流水线中能提供哪些帮助?能够支持哪些决策?还有哪些情况我仍希望自己或他人能够牢牢掌控?

毫无疑问,DevOps 已经涉及大量的自动化。我们构建流水线来测试代码、检查问题,并在不同环境之间移动更改。但决定是否让发布继续进行需要上下文。通过的测试提供了有用的证据;但它们无法回答关于变更风险的所有问题。

这使得发布审查成为一个有趣的实验场景。代理能否帮助解释证据、突出关注点,并为批准部署的人准备更好的问题?我的意思是,我已经把代理当作同事来交流,到目前为止效果不错。

我使用 GitHub Actions 和 Microsoft Foundry 构建了一个小型概念验证,以探讨这个问题。我想了解其中的关键环节:证据如何传达给审查者、建议如何影响工作流程,以及审批如何仍然保持在人工控制之下。

本文将该实验分享给其他同样思考自己角色的 DevOps 和平台工程师。文章将逐步介绍我构建的内容、它所展示的内容,以及在生产环境中采用此方法之前仍需改进的地方。

该实现包含两部分。GitHub Actions 运行一个 确定性的发布审查,并演示环境批准门禁。另外,Microsoft Foundry 代理在游乐场中审查相同的示例证据。工作流目前尚未调用 Foundry,其预发布和生产作业模拟部署。

这一界限很重要。这是一个面向代理辅助发布流程的实用基础,并且有明确的集成路径。

仓库: balop3e/agentic-devops-poc

此概念验证展示了什么

我想探讨的问题很简单:AI 推荐如何融入发布流程,而不成为批准生产的权威。

组件 在此演示中发生的事情
GitHub Actions 运行测试,生成示例证据,执行审查,并排序作业。
Python review script 应用固定规则生成风险评分和建议。它不会调用 AI 模型。
Microsoft Foundry agent 通过独立的手动操作场景审查相同的证据。
GitHub production environment 为配置的审查者暂停生产作业。
Deployment jobs 打印演示消息;它们不会部署应用程序。

实际的单元测试在证据生成之前运行。然而,发布证据使用预设的低风险和高风险场景。其测试计数、覆盖率变化和漏洞计数是用于练习审查逻辑的预定义输入。

组件如何连接

图 1. 已实现的工作流程与独立的 Foundry 实验。在此版本中,AI 响应不会反馈到工作流程。

推送到 main 或手动运行工作流会启动构建和测试作业。该作业成功后,工作流会生成一个 JSON 证据文件并将其存储为制品。审查作业读取该制品并发布 Markdown 报告。

当审查暴露 proceed 决策时,会运行预演模拟。生产模拟此外还需要手动运行并设置 deploy_production=true、成功的预演以及满足生产环境的保护规则。

与此同时,我将证据粘贴到 Foundry 中,以探索 AI 生成解释的质量。这使得工作流演示保持可重复,同时让我能够单独检查模型的响应。

从结构化的发布证据开始

AI 审查者需要明确的输入。在未提供证据的情况下询问发布是否安全会鼓励假设。

演示使用了提交、工作流运行、目标环境、测试、变更大小、覆盖率、漏洞、数据库迁移和依赖变更等字段。以下是一个带有占位符标识符的低风险输入示例:

{
  "commit_sha": "example-commit",
  "workflow_run": "example-run",
  "deployment_target": "production",
  "total_tests": 24,
  "failed_tests": 0,
  "changed_files": 6,
  "coverage_delta": -1.1,
  "high_vulnerabilities": 0,
  "critical_vulnerabilities": 0,
  "database_migration": false,
  "external_dependency_change": false
}

请注意,这些数字是样本数据,而非实际测量结果。模式将 coverage_delta 定义为百分点变化,从 80% 降至 78.9% 相当于 -1.1 个百分点的变化。原始演示报告中使用了百分号,精度不足。

在实际流水线中,我会从测试运行器、覆盖率报告、漏洞扫描器和部署元数据中填充这些字段。我还会加入证据时间戳和制品摘要,以便审查能够与确切的发布候选版本关联。

仓库中包含 schemas/release-evidence.schema.json。仅拥有该文件不会自动强制执行契约;当前的审查脚本会将 JSON 加载到 Python 数据类中,而不调用 JSON Schema 验证器。运行时的 schema 验证和一致性检查(例如确保失败的测试数不超过总测试数)是后续工作。

将政策与解释分离

Python 审查采用固定的评分规则。无论最终的风险标签如何,失败的测试或严重漏洞都会产生 block 建议。其他信号会加分,包括高严重性发现、更大的变更、覆盖率下降、迁移以及依赖变更。

低风险 fixture 会产生 proceed,风险等级为低,得分为零。这些是说明性评分模型的输出。零分并不能保证发布是安全的,得分也不是失败的概率。

有一个实现细节值得关注,assess_release() 可以返回 proceed_with_extra_review,但 write_github_output() 会将所有非阻塞的建议映射为 proceed。生产批准门限仍然适用,但工作流不会为该中间状态强制执行单独的额外审查流程。

在扩展此模式之前,我会明确保留该状态并定义所需的额外审查。更一般地说,政策应在代码中做出强制性决策;模型应解释证据并提出问题。

将审批纳入部署平台

在提示或报告中编写“人工审批必需”并不能强制执行审批。此演示中的相关控制是 GitHub 环境配置。

工作流的生产作业引用 production。在该环境上配置的必需审阅者规则会使作业等待。下面的简化摘录说明了这种关系;它并不是一个完整的工作流:

deploy_production:
  runs-on: ubuntu-latest
  needs: [agent_review, deploy_staging]
  if: >-
    github.event_name == 'workflow_dispatch' &&
    github.event.inputs.deploy_production == 'true' &&
    needs.agent_review.outputs.decision == 'proceed'
  environment:
    name: production
  steps:
    - name: Simulate deployment
      run: echo "Protected job released to run."

仅凭 YAML 引用本身并不会产生审查者要求。 我仍然需要单独配置环境保护规则。为了实现独立审查,我启用了防止自审的功能,并选择了另一位符合条件的审查者。同时检查管理员旁路设置,并限制允许的部署分支或标签。GitHub 当前的文档指出,Free、Pro 和 Team 计划的必需审查者仅适用于公开仓库。请参阅 部署保护规则。

图 2. 在确定性审查和暂存仿真完成后,生产仿真将等待环境审查。

正如演示所示,工作流在此门口等待,并在获得批准后继续完成。这表明该门在该运行中起作用,但并不能证明由第二个人独立批准,也不能证明旁路已被禁用。仅凭一条打印的日志消息表明有人批准,本身并不能作为门被强制执行的证据。

在生产环境中实施时,也需要保护工作流更改和部署凭据。跳过受保护环境的作业不应拥有通往相同生产权限的另一条路径。

Azure Pipelines 可以通过对环境等资源的 审批和检查 支持类似的模式。这提供了一种将审批控制保持在 AI 响应之外的另一种方式。

探索 Microsoft Foundry 中的 AI 审查者

Foundry 部分为审查者分配一个特定的任务,解释提供的发布证据,并为批准者准备有用的上下文。

主要概念包括 Foundry 资源、项目、模型部署和代理。资源定义服务边界;项目组织工作;模型部署提供推理;代理添加说明,并在配置时提供工具。游乐场提供一个交互式环境来测试行为。Microsoft 在其 Foundry 概览 中描述了该平台。

为此次实验,我使用了 gpt-4o-mini 和一个名为 devops-release-review-agent 的代理。它记录了演示配置,而不是为每个发布过程推荐特定模型。

说明要求提供风险等级、建议、原因、对人工审查者的问题以及简洁的批准摘要。还告诉代理不要声称生产已获批准,并在测试失败或存在关键漏洞时建议阻止。

图 3. Foundry 代理审查粘贴到游乐场的证据。这与 GitHub Actions 执行是分离的。

对于提供的低风险证据,响应建议继续并向批准者提出了问题。这是一个有用的解释示例,但一次有利的响应并不能建立可靠性。该实验未展示自动修复、部署工具或多代理系统。

提示描述了预期行为,它们不是访问控制。发布审查代理不应具有批准自身部署或更改批准配置的权限。

了解在连接管道之前的权限

在设置过程中,我遇到了管理 Azure 资源与在其中使用 AI 服务之间的重要区别。

Azure 的 控制平面 负责管理任务,如创建资源和分配角色;数据平面 负责服务操作,如调用模型和使用代理。订阅所有者本身不会授予所有 Foundry 数据平面权限,门户设置可以添加单独的角色分配。

在 Foundry RBAC 文档 中检查您的身份所需的具体操作和范围。当前文档使用的名称包括 Foundry User 和 Foundry Agent Consumer,较旧的界面可能仍显示 Azure AI 角色名称。仅调用代理的身份不应不必要地获得广泛的管理权限。

对于未来的 GitHub-to-Foundry 集成,我将使用 Azure 的 OpenID Connect 和 Microsoft Entra 工作负载身份联合,而不是存储的长期客户端密钥。工作流需要 id-token: write 来请求 OIDC 令牌,Azure 角色分配决定所得到的身份可以执行什么操作。其信任配置必须与预期的仓库和工作流上下文匹配。

代理审查身份和生产部署身份应具有独立的职责和权限。

跨团队复用该模式

该仓库包含一个可复用的审查工作流和一个 Team Scaling Demo 调用者。两个示例团队使用不同的证据配置调用同一实现:

调用者 证据配置 预期审查结果
支付团队 低风险 继续
身份团队 高风险 阻止

图 4. 演示仓库中的团队特定作业复用了相同的审查实现。

成功的审查作业表示分析已完成。这并不一定意味着部署被允许;脚本可以成功生成 block 决策。调用者必须在其部署条件中消费该输出。伸缩演示本身没有部署作业。

这展示了在单个仓库内的复用。将其扩展到独立的仓库需要额外的工作。特别是,被调用工作流中的 actions/checkout 通常会检出调用者的仓库。共享的审查代码必须有意分发,例如作为版本化的操作或软件包,而不是假设其脚本存在于每个调用者中。GitHub 在 重用工作流 中文档了执行上下文。

我会让平台团队负责证据合同、审查实现、提示版本和评估用例。产品团队将提供发布证据,并保留其部署和批准配置的所有权。

我在投入生产前会添加的内容

下一次迭代应解决若干具体的差距:

  1. 收集并验证真实证据。 解析实际报告,拒绝缺失或不一致的字段,并将每次审查绑定到提交和可部署的制品。
  2. 明确集成 Foundry。 在审查作业中调用所选代理 API,并根据输出模式验证响应。保持确定性策略与 AI 建议之间的明确区别。
  3. 定义失败行为。 超时、模型不可用或响应格式错误绝不能静默地变成批准。应暂停以供审查或遵循已记录的回退策略。
  4. 将发布文本视为不可信的输入。 提交消息、拉取请求描述和日志可能包含针对模型的指令。应将它们与可信指令分开,并防止审查者修改策略或获取部署权限。
  5. 评估困难案例。 包括缺失的证据、相互矛盾的信号、失败的测试、关键漏洞、迁移以及试图覆盖指令的行为。当提示或模型发生变化时,重新检查行为。
  6. 记录决策和结果。 保留证据、策略结果、AI 输出、提示和模型版本、审查者决策以及部署结果。在声称有改进之前,衡量审查的有用性、延迟和成本。

这些是提出的增强功能,而非此仓库已展示的能力。

我学到的

能够证明或亲身体验将代理注入流程的效果对我来说非常重要。这使我能够为治理需求做好准备,不仅在执行我的工作时,而且在做出业务决策时也是如此。最有用的结果是职责划分更加清晰。GitHub Actions 执行工作流。确定性规则评估显式策略。Foundry 可以帮助解释证据。环境保护规则控制受保护作业何时可以运行。

此 PoC 演示了这些部分,但不声称已经实现完整的 AI 驱动交付平台。连接代理是下一步的技术工作;验证其有用性并保持审批边界完整是下一步的工程责任。

如果您正在探索此方法,请从您团队已经在做的发布决策开始。定义证据,使策略明确,然后测试 AI 审查者是否能帮助人们更好地理解该决策。

源代码和文档

实现与文档已于 2026 年 9 月 25 日完成审核。截图展示的是最初的演示内容;产品界面和访问要求可能会有所变化。

——

广告 广告
🧑‍💻

zhirenhun

一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。

devops github azure ai