自动化与脚本集成¶
本文你会学到:
- ⚡ 如何用
-p标志和管道两种方式非交互式调用 Copilot CLI - 🛠 编程式模式下的提示词优化、权限控制和输出捕获技巧
- 📋 生成提交消息、文件摘要、代码审查等常用自动化场景
- 🐚 Shell 脚本中的变量捕获、条件判断和多文件处理模式
- 🚀 将 Copilot CLI 集成到 GitHub Actions 实现 CI/CD 自动化
Copilot CLI 的编程式模式让你无需进入交互会话,就能在终端、脚本和 CI/CD 流水线中调用 AI 能力——就像给实习生发邮件:写清楚任务发过去,他做完把结果发回来。
从交互到自动化
前面章节介绍的交互模式适合探索和迭代,而本章的编程式模式适合确定性的、可重复的任务。当你确认某个提示词效果稳定后,就可以把它固化到脚本或 CI/CD 中。
编程式模式¶
两种非交互式调用方式,效果完全等价:
管道和 -p 同时使用时,-p 优先,管道输入被忽略
编程式使用技巧¶
| 技巧 | 说明 | 示例 |
|---|---|---|
| 精确提示词 | 明确、无歧义的指令,包含文件名、函数名、具体变更要求 | 'Fix ESLint errors in src/api/auth.ts' |
| 谨慎引用 | 提示词用单引号包裹,避免 Shell 解释 $、* 等特殊字符 |
copilot -p 'Give me $HOME value' |
| 最小权限 | --allow-tool 和 --allow-url 只给必要权限,避免 --allow-all |
--allow-tool='shell(git:*), write' |
| -s 静默 | 抑制会话元数据(spinner、token 计数等),获取干净文本输出 | copilot -p '...' -s |
| --no-ask-user | 阻止代理向用户提问,CI/CD 环境下必加 | copilot -p '...' --no-ask-user |
| 显式模型 | --model 指定模型版本,保证跨环境行为一致 |
copilot -p '...' --model gpt-4o |
权限原则
永远不要在自动化脚本中使用 --allow-all(除非在隔离的沙箱环境中)。按需授权可以防止 AI 执行超出预期的操作——比如在生产流水线中不小心执行了 rm -rf。
常用示例场景¶
生成提交消息¶
文件摘要¶
编写测试¶
修复 lint 错误¶
解释 diff¶
代码审查¶
使用内置的 /review 命令审查分支变更:
生成文档¶
审计依赖¶
Shell 脚本模式¶
编程式模式的真正威力在于脚本——你可以动态生成提示词、捕获输出、与其他命令串联,构建完整的自动化工作流。
变量捕获¶
将 Copilot 的输出存入 Shell 变量,供后续步骤使用:
使用 -s 标志
捕获输出时务必加 -s(silent),否则会话元数据(如 token 消耗、spinner)会混入变量值,导致后续处理出错。
条件判断¶
将 Copilot 作为判断条件,控制脚本分支:
多文件处理¶
循环遍历文件,逐个调用 Copilot 处理:
完整脚本示例:大文件巡检¶
以下脚本查找超过 10 MB 的文件,让 Copilot 生成描述,再汇总输出:
CI/CD 集成:GitHub Actions¶
工作流模式¶
典型的 Actions 工作流遵循 5 步模式,每个步骤都有明确的职责:
graph LR
A[触发器] --> B[检出代码]
B --> C[安装 CLI]
C --> D[认证]
D --> E[运行 Copilot CLI]
| 步骤 | 说明 | 关键配置 |
|---|---|---|
| 触发器 | 定时、事件或手动触发 | schedule / workflow_dispatch |
| 检出代码 | 拉取完整仓库 | actions/checkout@v6 + fetch-depth: 0 |
| 安装 CLI | 在 Runner 上安装 Copilot CLI | npm install -g @github/copilot |
| 认证 | 提供带 Copilot 权限的 PAT | COPILOT_GITHUB_TOKEN 环境变量 |
| 运行 | 用 -p 执行任务,输出到 Summary |
--allow-tool + --no-ask-user |
完整工作流示例¶
调试工作流
开发阶段先用 workflow_dispatch 手动触发,确认提示词和输出符合预期后,再开启 schedule 自动运行。可以查看 Actions 运行页面的 Step Summary 快速确认结果。
认证配置¶
Copilot CLI 在 Actions 中运行需要一个带有 "Copilot Requests" 权限的 Fine-grained PAT:
创建 PAT 并配置为 Secret 的步骤:
- 前往 GitHub PAT 创建页面:
github.com/settings/personal-access-tokens/new - 创建新 Token,勾选 "Copilot Requests" 权限
- 复制生成的 Token 值
- 在仓库的 Settings > Secrets and variables > Actions 中点击 New repository secret
- 将 Token 值粘贴到 Secret 字段,命名为
PERSONAL_ACCESS_TOKEN
工作流通过 COPILOT_GITHUB_TOKEN 环境变量读取这个 Secret:
为什么不用内置的 GITHUB_TOKEN
COPILOT_GITHUB_TOKEN 是 Copilot CLI 专用的认证变量,与 Actions 内置的 GITHUB_TOKEN 独立。这让你可以为 Copilot 设置与仓库操作不同的权限范围,避免权限混淆。
会话导出¶
编程式模式的输出可以通过 --share 选项持久化,方便分享和归档。
Gist 限制
Enterprise Managed Users 和使用数据驻留(*.ghe.com)的 GitHub Enterprise Cloud 用户无法使用 Gist 功能。这类用户应使用 --share 导出到本地文件。