Claude Code for GitLab CI/CD 让你在 Issue 评论、MR 讨论中 @claude 触发 AI 任务,自动生成 MR、修复 Bug、回复 Review 评论。目前处于 Beta 阶段,由 GitLab 维护。
核心价值
- 即时 MR 创建:描述需求,Claude 提出完整 MR(包含变更和解释说明)
- 自动化实现:一条命令或一次提及,将 Issue 转化为可运行的代码
- 遵循项目规范:Claude 读取 CLAUDE.md 并遵循代码模式
- 简单设置:在
.gitlab-ci.yml添加一个 Job + 一个掩码变量 - 企业级就绪:支持 Claude API、AWS Bedrock、Google Vertex AI(满足数据主权和采购需求)
- 默认安全:在你的 GitLab Runner 中运行,受分支保护和审批流程约束
工作原理
- 事件驱动编排:GitLab 监听触发条件(如 Issue/MR/Review 线程中的
@claude评论),收集线程和仓库上下文,构建提示词后运行 Claude Code - 提供商抽象:根据环境选择提供商(Claude API SaaS / AWS Bedrock / Google Vertex AI)
- 沙箱执行:每次交互在容器中运行,有严格的网络和文件系统规则。所有变更都通过 MR 流程,Reviewer 可以看到 Diff,审批流程仍然有效
Claude 在 GitLab CI/CD 中能做什么
- 从 Issue 描述或评论创建/更新 MR
- 分析性能回归并提出优化建议
- 在分支中直接实现功能,然后开 MR
- 修复测试或评论发现的 Bug
- 响应后续评论,迭代请求的修改
快速配置
第一步:添加掩码 CI/CD 变量
- 进入 Settings → CI/CD → Variables
- 添加
ANTHROPIC_API_KEY(设为掩码,按需设置保护)
第二步:在 .gitlab-ci.yml 添加 Claude Job
yaml
stages:
- ai
claude:
stage: ai
image: node:24-alpine3.21
# 根据触发方式调整规则:手动运行/MR 事件/包含 @claude 的评论触发
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
variables:
GIT_STRATEGY: fetch
before_script:
- apk update
- apk add --no-cache git curl bash
- curl -fsSL https://claude.ai/install.sh | bash
script:
# 可选:如果你的环境提供 GitLab MCP 服务器
- /bin/gitlab-mcp-server || true
# 通过 Web/API 触发时使用 AI_FLOW_* 变量传递上下文
- echo "$AI_FLOW_INPUT for $AI_FLOW_CONTEXT on $AI_FLOW_EVENT"
- >
claude
-p "${AI_FLOW_INPUT:-'Review this MR and implement the requested changes'}"
--permission-mode acceptEdits
--allowedTools "Bash Read Edit Write mcp__gitlab"
--debug添加 Job 和 ANTHROPIC_API_KEY 变量后,可以从 CI/CD → Pipelines 手动运行测试,或在 MR 中触发让 Claude 在分支中提出更新。
使用 AWS Bedrock 或 Google Vertex AI
AWS Bedrock(OIDC 认证)
yaml
claude-bedrock:
stage: ai
image: node:24-alpine3.21
id_tokens:
AWS_TOKEN:
aud: sts.amazonaws.com
script:
- curl -fsSL https://claude.ai/install.sh | bash
# 使用 OIDC 获取临时 AWS 凭证
- |
CREDS=$(aws sts assume-role-with-web-identity \
--role-arn "$AWS_ROLE_ARN" \
--role-session-name gitlab-ci \
--web-identity-token "$AWS_TOKEN" \
--query Credentials)
export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r .AccessKeyId)
export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r .SecretAccessKey)
export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r .SessionToken)
- >
claude -p "$AI_FLOW_INPUT"
--permission-mode acceptEdits
--allowedTools "Bash Read Edit Write mcp__gitlab"
environment:
name: bedrock
variables:
ANTHROPIC_BEDROCK_REGION: us-east-1
ANTHROPIC_MODEL: anthropic.claude-sonnet-4-5-v1:0Google Vertex AI(Workload Identity Federation)
yaml
claude-vertex:
stage: ai
image: node:24-alpine3.21
id_tokens:
GCP_TOKEN:
aud: "https://iam.googleapis.com/projects/PROJECT_NUMBER/..."
script:
- curl -fsSL https://claude.ai/install.sh | bash
# 获取 GCP 访问令牌
- |
gcloud auth login --cred-file=<(echo $GCP_TOKEN)
export GCLOUD_ACCESS_TOKEN=$(gcloud auth print-access-token)
- >
claude -p "$AI_FLOW_INPUT"
--permission-mode acceptEdits
--allowedTools "Bash Read Edit Write mcp__gitlab"
environment:
name: vertex
variables:
ANTHROPIC_VERTEX_REGION: us-east5
CLOUD_ML_REGION: us-east5
ANTHROPIC_MODEL: claude-sonnet-4-5@20251120最佳实践
CLAUDE.md 配置
在 GitLab 项目的 CLAUDE.md 中添加 CI/CD 特定指令:
markdown
# GitLab CI/CD Guidelines
- Always create MR descriptions in Chinese
- Run `npm test` before committing any changes
- Follow conventional commits format
- Target branch: main安全注意事项
- 将
ANTHROPIC_API_KEY设为掩码变量,避免在日志中暴露 - 使用分支保护规则,确保所有 Claude 生成的代码都经过人工审查
- 限制
--allowedTools范围,避免给 Claude 过多权限 - 考虑为 CI Job 创建专用的 GitLab Bot 账号
性能优化
- 使用
--max-turns限制 Agentic 轮次,避免意外的长时间运行 - 使用
--max-budget-usd控制单次 CI 任务的 API 费用上限 - 选择距离 GitLab Runner 最近的区域端点减少延迟
常见问题排查
| 问题 | 解决方案 |
|---|---|
Claude 不响应 @claude 评论 | 检查 Pipeline 触发规则,确认 ANTHROPIC_API_KEY 已正确配置 |
| Job 无法写评论或创建 MR | 确认 GitLab Bot Token 有 api 权限,检查 mcp__gitlab 工具是否启用 |
| 认证错误(401/403) | 重新检查 API Key 是否正确、Bedrock/Vertex 凭证是否有效 |
原文:Claude Code GitLab CI/CD | 来源:Anthropic 官方文档(GitLab 维护集成)