直接答案
CI 需要确定输入、机器可读输出、有限权限和明确失败条件;不能把交互式体验直接搬进无人值守环境。
这篇内容解决什么问题
在脚本或 CI 中安全运行 Codex CLI
为无人值守任务定义机器契约
CI 没有人回答澄清和审批,因此输入必须固定,权限边界与失败行为必须预先定义。先让任务只读取并输出报告,再评估是否允许写入工作区。
脚本应以进程退出码作为首要状态,把事件流、最终消息和测试制品分别保存。不要解析终端颜色或自然语言“成功”。
用 codex exec 运行单次任务
提示词可以作为参数传入,也可以使用 - 从标准输入读取。标准输入适合由版本化文件提供长任务,避免复杂 shell 转义。
--ephemeral 不持久化会话文件,适合一次性 runner。--skip-git-repo-check 只应在确实不属于 Git 仓库的输入目录使用。
codex exec -C /path/to/repo --ephemeral -s read-only -a never "检查未提交差异中的行为回归,只输出发现。"codex exec -C /path/to/repo --ephemeral -s read-only -a never - < .ci/codex-task.md分开保存事件与最终结论
--json 将事件写成 JSONL,适合日志处理;-o 把最终消息写到独立文件。调用方仍要检查 Codex 退出码和后续测试退出码。
输出可能包含仓库路径、代码片段或工具结果。制品应设置访问控制与保留期限,上传前执行秘密扫描。
set -o pipefail
codex exec -C "$PWD" --ephemeral -s read-only -a never --json -o /tmp/codex-final.txt "分析测试失败并给出修复计划。" | tee /tmp/codex-events.jsonl
codex_status=${PIPESTATUS[0]}
printf "codex_exit=%s\n" "$codex_status"
exit "$codex_status"需要稳定字段时使用输出 Schema
--output-schema 接受 JSON Schema,用于约束模型最终输出的结构。Schema 应保持小而稳定,并由调用方再次解析验证。
结构化输出不证明结论真实。发现仍需包含文件、位置与证据,并由确定性测试或审查步骤验证。
{
"type": "object",
"additionalProperties": false,
"required": ["summary", "findings"],
"properties": {
"summary": { "type": "string" },
"findings": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["severity", "file", "reason"],
"properties": {
"severity": { "type": "string", "enum": ["high", "medium", "low"] },
"file": { "type": "string" },
"reason": { "type": "string" }
}
}
}
}
}codex exec --ephemeral -s read-only -a never --output-schema .ci/review.schema.json -o /tmp/review.json "审查当前改动。"在 CI 中从 Secret 配置 CodeNodex
CI Key 应由平台 Secret 注入并使用独立权限与额度。下面步骤安装两个 CLI、以免登录模式配置 provider,再在有限沙箱中执行只读审查。
真实工作流还应固定 action 与工具版本、校验安装资产、设置超时,并根据仓库语言增加测试步骤。不要在 pull request 日志中打印 Secret。
- name: Install Codex CLI
run: npm install -g @openai/codex
- name: Install CodeNodex CLI
run: curl -fsSL https://token.codenodex.com/cli/install.sh | bash
- name: Configure provider
env:
CODENODEX_API_KEY: ${{ secrets.CODENODEX_API_KEY }}
run: |
codenodex setup -o https://token.codenodex.com \
--key "$CODENODEX_API_KEY" --platform openai --client codex -y
- name: Review changes
shell: bash
run: |
set -o pipefail
codex exec --ephemeral -s read-only -a never --json \
-o /tmp/codex-final.txt \
"审查当前提交中的行为回归、秘密泄漏和缺失测试。" \
| tee /tmp/codex-events.jsonl用确定性门禁约束自动化
Codex 可以提出修复或审查发现,但合并门禁应由测试、类型检查、lint、秘密扫描和策略检查决定。模型输出适合作为附加证据,不应成为唯一批准者。
为任务设置超时、并发上限和预算;失败时保存脱敏诊断,重试应有次数限制。自动写入场景使用临时分支或隔离 worktree,禁止直接推送受保护分支。
- 固定工具与依赖版本。
- 检查 Codex 和项目命令的退出码。
- 限制 Secret、文件系统和网络范围。
- 对制品执行脱敏和保留策略。
- 高影响动作保留人工审批。
官方来源与核验范围
本文以公开官方文档为事实依据;命令和配置可能随客户端版本变化,执行前请同时核对对应来源。
查看技术核验方法