如何使用 Google ADK 做运维

devops入门12 分钟阅读2026/7/11

上个月,我们团队花了整整一个周六,手动处理了 40 个 Jira 工单,逐一核对对应的 GitHub pull request,并在一次极其混乱的生产环境部署后,更新了我们的 Confluence 操作手册。这种跨工具的重复性打杂工作,会让你忍不住想:“难道不能写个脚本来搞定吗?”但脚本可没法根据关联 PR 的状态,来判断一个 Jira 工单到底该挪到“进行中(In Progress)”还是“审核中(In Review)”列。正是这个问题,让我接触到了 Google 的 Agent Development Kit (ADK)。

ADK 是 Google 推出的用于构建生产级 Agent 的开源框架。吸引我的不是它做聊天机器人的潜力,而是它最近的更新直接集成了我们 DevOps 团队每天都在用的那些工具:GitHub、Jira、Confluence、MongoDB 和各种可观测性平台。一个能真正自己去提 PR、更新工单、查询数据库的 Agent,跟一个只会干巴巴告诉你“该怎么操作”的 Agent 有着本质的区别。下面我来分享一下我是如何用 ADK 搭建一个 DevOps 工作流 Agent 的。

环境准备

我选了 Python 版本,因为我们团队的基础设施脚本本来就是用 Python 写的。你需要准备 Python 3.13(或兼容版本)以及 ADK 包。

pip install google-adk

通过集成 LiteLLM,ADK 实现了模型无关性,支持包括 Anthropic 和 OpenAI 在内的 100 多家提供商。但由于它对 Gemini 做了专门优化,我就直接从这里入手了,选了 gemini-flash-latest 来兼顾速度和成本。

你还需要设置你的 API 密钥:

export GOOGLE_API_KEY="your-key-here"

构建核心 Agent

ADK 中最基础的构建块就是 Agent。你需要定义它的名称、模型、指令(即系统提示词)以及它能使用的工具。我们先来搭建一个基础的 DevOps 分诊 Agent:

from google.adk import Agent
from google.adk.tools import google_search

devops_agent = Agent(
    name="devops_triage",
    model="gemini-flash-latest",
    instruction="""You are a DevOps workflow assistant. You help the team:
    1. Check the status of GitHub PRs and link them to Jira tickets
    2. Update Jira ticket statuses based on PR state
    3. Search Confluence for relevant runbooks when incidents occur
    4. Query MongoDB for deployment metrics
    Always confirm before making destructive changes like closing tickets.""",
    tools=[google_search],
)

这样我们就得到了一个对话式 Agent,但它目前还没法真正碰我们的工具。真正的威力在于添加具体的集成工具。

添加 DevOps 工具集成

这就是 ADK 最近更新的亮点所在。该框架现在提供了涵盖五大类别的直接连接,完美契合 DevOps 团队的实际工作流。以下是我接入所需工具的方式:

from google.adk import Agent
# These integration tools are available through ADK's partner ecosystem
from adk_integrations.github import GitHubTool
from adk_integrations.atlassian import JiraTool, ConfluenceTool
from adk_integrations.mongodb import MongoDBTool

devops_agent = Agent(
    name="devops_triage",
    model="gemini-flash-latest",
    instruction="""You are a DevOps workflow assistant for the platform team.
    
    When triaging issues:
    - Check GitHub for related PRs using the issue key
    - If a PR is merged and deployed, move the Jira ticket to Done
    - If a PR is in review, move the ticket to In Review
    - Search Confluence for runbooks matching the error or service name
    - Query MongoDB deployment_metrics collection for recent deploy status
    
    Always show the user what you're about to change before executing updates.""",
    tools=[
        GitHubTool(repo="our-org/our-repo"),
        JiraTool(project="PLATFORM"),
        ConfluenceTool(space="DEVOPS"),
        MongoDBTool(connection_string=os.environ["MONGO_URI"]),
    ],
)

我遇到的第一个坑是:Jira 集成需要 OAuth 凭证,光有 API token 是不够的。如果你用的是 Jira Cloud,就需要在 Atlassian 开发者控制台里设置 OAuth 2.0 集成。我挠了大概 20 分钟头才意识到,光设置 JIRA_API_TOKEN 环境变量根本不管用。你实际需要的是这些:

export ATLASSIAN_OAUTH_CLIENT_ID="your-client-id"
export ATLASSIAN_OAUTH_CLIENT_SECRET="your-client-secret"
export ATLASSIAN_DOMAIN="your-org.atlassian.net"

使用 CLI 运行 Agent

ADK 自带了一个 Agents CLI,让你无需编写样板代码就能创建、测试和运行 Agent。这玩意儿确实好用——我几分钟内就从想法变成了一个跑起来的 Agent。

要创建一个新的 Agent 项目:

adk create devops_triage_agent

这会生成一个项目结构,包含 Agent 定义、工具配置和基础的评估设置。然后就可以交互式运行它了:

adk run devops_triage_agent

这是我在测试时的一段真实交互:

Me: Check the status of PLATFORM-482 and see if there's a related PR

Agent: I'll check Jira for PLATFORM-482 and search GitHub for related PRs.

[Jira] PLATFORM-482: "Fix memory leak in auth service"
Status: In Progress, Priority: High, Assignee: @sarah

[GitHub] Found PR #347: "Fix auth service memory leak (PLATFORM-482)"
Status: Merged (merged 2 hours ago by @sarah)
Branch: fix/auth-mem-leak → main

This PR has been merged but the Jira ticket is still "In Progress." 
Would you like me to move PLATFORM-482 to "In Review" or "Done"?

Me: Move it to Done, it's been deployed already.

Agent: Done. PLATFORM-482 is now in "Done" status.
I also found a runbook in Confluence that might be relevant: 
"Auth Service Troubleshooting Guide" — should I link it to the ticket?

以前这种工作流,往往需要我们在 Slack 里发三条消息,还得指望有人吃完午饭后记得去更新 Jira。

添加可观测性

要上生产环境,你必须清楚 Agent 到底干了什么。ADK 集成了像 AgentOps(用于会话回放和指标监控)和 Arize AX(用于生产环境调试)这样的可观测性平台。我接入了 AgentOps:

from agentops import track_agent

@track_agent(name="devops_triage")
def run_triage_workflow(issue_key: str):
    # Agent execution happens here
    result = devops_agent.run(f"Triage {issue_key}")
    return result

这能为你提供会话回放功能——基本上就是录下 Agent 的每一次工具调用、推理步骤和输出结果。当 Agent 错误地把一个不该关的工单挪到“Done”时(测试期间确实发生过一次),我就可以回放它的完整决策链,发现它把“draft(草稿)”状态的 PR 误判成了“merged(已合并)”。

处理长时间运行的工作流

有一点我没料到:有些 DevOps 工作流耗时很长。一次部署可能要 30 分钟。一条 CI 流水线可能跑一个小时。标准的 Agent 会话会超时。ADK 的 Restate 集成解决了这个问题,它提供了持久化、可恢复的 Agent 会话。你的 Agent 可以触发部署,进入休眠,等部署完成后再恢复运行——而且不会丢失上下文。

这对于那些非快速 API 调用的操作至关重要。我们的部署验证 Agent 现在会启动部署,等待健康检查,然后再更新工单——即使实际耗了 45 分钟,这一切也都在同一个逻辑会话中完成。

实用建议与坦诚的局限性

在团队里跑了几周后,这是我总结的一些经验:

先从只读操作开始。 在让 Agent 往 Jira 写数据或合并 PR 之前,先让它跑在观察模式下,只读取信息并给出建议。我们抓到了好几次 Agent 对工单状态做出错误判断的情况,幸亏没真让它改。

指令要具体。 “适当地更新工单”这种话太模糊了。“如果 PR 已合并,且 MongoDB 指标确认已部署,就把工单移至 Done”,这样才能给 Agent 一棵清晰的决策树。

用 CLI 的评估工具做测试。 ADK 自带评估工具。部署前一定要写好预期结果的测试用例。我真希望我第一天就这么做了,而不是等吃了亏才发现,我们的 Agent 把 GitHub 里的“closed”当成了跟 Jira 里的“Done”一个意思。

局限性是客观存在的。 这些集成功能还很新,有些不太完善。GitHub 集成挺稳的,但我用 Confluence 工具时遇到了跨空间搜索不行的边缘情况。MongoDB 工具处理基本查询没问题,但跑聚合管道就很吃力了。另外,虽然 ADK 是模型无关的,但用 Gemini 的体验明显更丝滑——我测试时,用其他提供商的工具调用偶尔会静默失败。

成本会积少成多。 一个每次分诊要调用 10 次工具的 Agent,消耗 API 额度的速度非常快,用 Pro 模型时尤其如此。常规操作坚持用 Flash 模型吧,只有当 Agent 遇到推理瓶颈时,再升级到 Pro。

尽管还有些小瑕疵,但 ADK 兑现了它的核心承诺:我们周六的工单分诊大会彻底成了历史。Agent 负责处理跨工具的日常更新,我们只在需要做判断时才介入。这才是人类与 Agent 之间合理的分工——不是取代 DevOps 工程师,而是消除那些快把他们榨干的苦力活。

相关 Agent

D

Docker

Docker 是一个容器化平台,允许开发者将应用及其依赖项打包成轻量级、可移植的容器。它简化了跨环境的开发、测试和部署过程。该描述强调它最适合容器化和开发环境,提供免费方案和团队方案,团队方案从每用户每月5美元起。

了解更多 →