使用 Buildkite 的 Agentic CI:三个实用示例

发布: (2025年12月3日 GMT+8 09:45)
6 min read
原文: Dev.to

Source: Dev.to

如果你阅读了我们之前关于 AI 如何重塑 CI 的文章,你已经了解了我们在 Buildkite 平台上新增的构建块。我们将这些称为 agentic 工作流组件——可组合的原语,为平台团队提供将 AI 辅助流程引入 CI/CD 工作流所需的工具。

在本文中,我们展示了三个使用 AI 代理解决常见实际问题的实用示例:

  • 审核 GitHub Pull Request
  • 自动修复破损的 PR 构建
  • 从 Linear 任务生成首稿 PR

每个示例都有一个完整运行的 GitHub 仓库,包含可供你 fork、设置、运行并根据团队需求进行适配的 Buildkite 流水线模板。


工作流组件回顾

  • Buildkite MCP 服务器 – 通过专用的 MCP 工具,为代理提供对 Buildkite REST API 的细粒度访问。
  • Buildkite 模型提供商 – 使用你自己的 API 凭证或托管的 Buildkite 管理密钥,连接前沿模型(例如 Anthropic 的 Claude Code)。
  • Buildkite 流水线触发器 – 入站 webhook,可在任何外部事件触发时调用 Buildkite 流水线(对 GitHub、Linear 等提供一等支持)。
  • Buildkite SDK – 使用 JavaScript、TypeScript、Python、Go、Ruby 等语言,在运行时动态组合并生成流水线定义。
  • AI 驱动插件 – 由 Claude、Codex、Amazon Bedrock 等提供支持,轻松为 CI 作业添加丰富的构建摘要。

这些构建块共同让你能够构建灵活、可适配的工作流,以自己的方式将 AI 代理引入 CI/CD 流程。

示例 1:GitHub 代码审查机器人

代码审查是必不可少的,但也耗时,尤其是当 AI 代理生成更多代码供人类审查时。AI 驱动的审查员可以提供第一轮审查,发现不易察觉的 bug,节省宝贵时间。

示例仓库位于 GitHub,路径为 buildkite-agentic-examples/github-code-review-bot

工作原理

  1. 给 PR 打上标签,触发通过 流水线触发器(绑定到特定流水线的入站 webhook URL)的 Buildkite 流水线。
  2. 流水线运行脚本,解析并验证 webhook 负载。
  3. 脚本向正在运行的 Buildkite 流水线追加一步,以启动 AI 代理。
  4. 代理完成审查任务并在 PR 上发布评论。

本文的所有三个示例都遵循这一通用模式。

处理脚本 (scripts/handler.ts)

核心逻辑位于用 TypeScript 编写的 Node.js 程序中。它使用 Buildkite 和 GitHub SDK 运行 Claude Code,并传入任务特定的提示。

import { execSync } from "child_process";
import { Pipeline } from "@buildkite/buildkite-sdk";
import { Octokit } from "octokit";

// ...

// Generate the pipeline with the Buildkite SDK.
function generateCodeReviewPipeline(
  webhookPullRequestUrl: string,
  agentBuildUrl: string
): string {
  const pipeline = new Pipeline();
  const tokenArgs = [
    `PullRequestURL=${webhookPullRequestUrl}`,
    `AgentBuildURL=${agentBuildUrl}`,
  ];

  pipeline.addStep({
    label: ":buildkite: Reviewing the code",
    commands: [...runAgent(tokenArgs)],
    plugins: {
      docker: {
        image: "buildkite-agentic-example-tools:latest",
        "mount-checkout": false,
        "mount-buildkite-agent": true,
        environment: [
          // ...
          "TRIGGER_ON_LABEL",
          "MODEL_PROVIDER",
        ],
      },
    },
    // ...
  });

  return pipeline.toYAML();
}

async function main() {
  // Fetch the incoming payload from Buildkite.
  const event = buildkiteAgent("meta-data", "get", "buildkite:webhook").trim();
  const payload = JSON.parse(event);

  // ...

  // Exit unless the payload has a label matching the one we're listening for.
  const labelName = payload.label.name;
  if (labelName !== process.env.TRIGGER_ON_LABEL) {
    console.log(`Label is not '${process.env.TRIGGER_ON_LABEL}', exiting`);
    process.exit(0);
  }

  // ...

  // Generate and upload a new pipeline step to run the AI agent.
  const pipelineYaml = generateCodeReviewPipeline(pullRequestUrl);
  execSync("buildkite-agent pipeline upload", {
    input: pipelineYaml,
    encoding: "utf-8",
  });
}

main().catch((error) => {
  console.error("Error:", error.message);
  process.exit(1);
});

该步骤在 Docker 容器中运行 Claude(通过 Buildkite Docker 插件),容器仅包含 Claude 完成此任务所需的工具:Node.js、GitHub CLI、本地 Buildkite MCP 服务器、Claude Code CLI 以及所需的脚本、提示和环境变量。在容器中运行代理可提供隔离和安全性,虽然并非强制要求。

在容器内部,Claude 会:

  • 克隆 PR 所在的仓库
  • 检出 PR 分支
  • 分析代码变更
  • 在 PR 上发布审查评论
  • 使用 MCP 服务器的注解工具对 Buildkite 构建进行标注

流水线配置 (.buildkite/pipeline.yml)

所有设置——包括模型提供商和触发标签——均可在流水线 YAML 中配置:

secrets:
  GITHUB_TOKEN: GITHUB_TOKEN
  BUILDKITE_API_TOKEN: API_TOKEN_BUILDKITE

env:
  GITHUB_CLI_VERSION: "2.83.0"
  BUILDKITE_MCP_SERVER_VERSION: "0.7.3"
  TRIGGER_ON_LABEL: "buildkite-review"
  MODEL_PROVIDER: "anthropic"

steps:
  - label: ":node: Generate the pipeline"
    command: |
      # Generate and upload the pipeline to handle the webhook.
      echo "--- :webhook: Run the webhook handler"
      npm install && npm run build
      node dist/handler

Claude CLI 配置 (scripts/claude.sh)

Claude CLI 直接与 Anthropic API 通信。相反,它使用 Buildkite 托管的模型提供商端点来代理 Anthropic API。脚本从 Buildkite 运行时值中设置所需的环境变量:

#!/bin/bash
# ...

# Set up Buildkite Hosted Models
export ANTHROPIC_BASE_URL="$BUILDKITE_AGENT_ENDPOINT/ai/anthropic"
export ANTHROPIC_API_KEY="$BUILDKITE_AGENT_ACCESS_TOKEN"

# ...

echo "--- :robot_face: Starting Claude Code"
echo "$prompt" | claude -p --mcp-config mcp.json

这些值由 Buildkite 在运行时自动注入,为你提供一种无缝使用 Claude(或任何受支持的模型提供商)而无需泄露自有凭证的方式。有关更多细节,请参阅 模型提供商 文档。

Back to Blog

相关文章

阅读更多 »

Strands 代理 + Agent Core AWS

入门指南:Amazon Bedrock AgentCore 目录 - 前置要求(requisitos‑previos) - 工具包安装(instalación‑del‑toolkit) - 创建…