在 CNB 云原生构建 流水线中运行 OpenAI Codex CLI 的插件。
基于 openai/codex-action 移植,适配 CNB 云构建平台的 Docker 插件体系。
read-only、workspace-write、danger-full-access在 CNB 密钥仓库中创建 openai.yml 文件:
# 密钥仓库文件:openai.yml
OPENAI_API_KEY: 'sk-your-api-key-here'
main:
push:
- name: codex-task
docker:
image: node:20
imports:
- https://cnb.cool/<your-org>/<your-secrets-repo>/-/blob/main/openai.yml
stages:
- name: 运行 Codex
image: docker.cnb.cool/<your-org>/codex:latest
settings:
prompt: '检查代码并修复所有 lint 错误'
openai_api_key: $OPENAI_API_KEY
model: o3-mini
sandbox: workspace-write
exports:
final_message: CODEX_OUTPUT
- name: 查看输出
script: echo "$CODEX_OUTPUT"
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
prompt | 是* | - | 提示词文本(与 prompt_file 二选一) |
prompt_file | 是* | - | 提示词文件路径(与 prompt 二选一) |
openai_api_key | 否 | - | OpenAI API Key,提供后自动启动 Proxy |
api_url | 否 | - | 自定义 API 地址(支持 Azure OpenAI、自建代理等) |
responses_api_endpoint | 否 | - | 同 api_url,完整名称别名 |
model | 否 | - | 使用的模型(如 gpt-5.4) |
effort | 否 | - | 推理力度(xhigh、high、medium、low) |
sandbox | 否 | workspace-write | 沙箱模式 |
codex_args | 否 | - | 额外传递给 codex exec 的参数 |
output_file | 否 | - | Codex 输出写入的文件路径 |
output_schema | 否 | - | 内联 JSON Schema |
output_schema_file | 否 | - | JSON Schema 文件路径 |
codex_version | 否 | - | 运行时安装指定版本(留空使用镜像内置版本) |
working_directory | 否 | . | Codex 工作目录 |
*prompt和prompt_file必须提供其中一个。
| 模式 | 说明 |
|---|---|
read-only | Codex 只能读取文件,无法写入或访问网络 |
workspace-write | 默认。Codex 可以读写工作区内的文件 |
danger-full-access | Codex 拥有完全访问权限(不推荐) |
插件执行完成后,Codex 的最终输出消息会通过 final_message 导出。在 .cnb.yml 中通过 exports 使用:
stages:
- name: 运行 Codex
image: docker.cnb.cool/<your-org>/codex:latest
settings:
prompt: '分析代码'
openai_api_key: $OPENAI_API_KEY
exports:
final_message: CODEX_RESULT
- name: 使用结果
script: echo "$CODEX_RESULT"
支持任意兼容 OpenAI Responses API 的端点(如 Azure OpenAI、自建代理、第三方服务):
stages:
- name: 使用自定义 API 和模型
image: docker.cnb.cool/<your-org>/codex:latest
settings:
prompt: '分析代码质量'
openai_api_key: $OPENAI_API_KEY
api_url: 'https://your-custom-endpoint.com/v1/responses'
model: 'gpt-5.4'
sandbox: workspace-write
api_url和responses_api_endpoint等效,优先使用api_url(更简洁)。
Azure OpenAI 示例:
stages:
- name: Azure OpenAI Codex
image: docker.cnb.cool/<your-org>/codex:latest
settings:
prompt: '修复所有 Bug'
openai_api_key: $AZURE_OPENAI_KEY
api_url: 'https://your-resource.openai.azure.com/openai/v1/responses'
model: 'gpt-5.4'
切换模型:
# 使用 gpt-5.3-codex
stages:
- name: Codex gpt-5.3-codex
image: docker.cnb.cool/<your-org>/codex:latest
settings:
prompt: '分析代码'
openai_api_key: $OPENAI_API_KEY
model: 'gpt-5.3-codex'
effort: 'xhigh'
stages:
- name: Codex 执行
image: docker.cnb.cool/<your-org>/codex:latest
settings:
prompt_file: .codex/review-prompt.md
openai_api_key: $OPENAI_API_KEY
model: o3-mini
stages:
- name: Codex 结构化分析
image: docker.cnb.cool/<your-org>/codex:latest
settings:
prompt: '分析代码质量并给出评分'
openai_api_key: $OPENAI_API_KEY
output_schema: |
{
"type": "object",
"properties": {
"score": { "type": "number" },
"issues": { "type": "array", "items": { "type": "string" } }
}
}
main:
pull_request:
- name: codex-review
docker:
image: node:20
imports:
- https://cnb.cool/<your-org>/<your-secrets-repo>/-/blob/main/openai.yml
stages:
- name: 代码审查
image: docker.cnb.cool/<your-org>/codex:latest
settings:
prompt: '审查本次变更,输出 Markdown 审查报告'
openai_api_key: $OPENAI_API_KEY
model: o3-mini
sandbox: read-only
stages:
- name: 使用指定版本
image: docker.cnb.cool/<your-org>/codex:latest
settings:
prompt: '修复 bug'
openai_api_key: $OPENAI_API_KEY
codex_version: '0.1.0'
# 构建默认版本
docker build -t codex:latest .
# 构建指定 Codex 版本
docker build --build-arg CODEX_VERSION=0.1.0 -t codex:0.1.0 .
| 特性 | GitHub codex-action | CNB codex-plugin |
|---|---|---|
| 安全策略 | drop-sudo / unprivileged-user / read-only / unsafe | Docker 容器天然隔离 + sandbox 模式 |
| 权限检查 | GitHub Collaborator API | CNB 原生权限体系(CNB_TOKEN) |
| 运行环境 | 虚拟机(Linux/macOS/Windows) | Docker 容器(Linux) |
| API Proxy | 独立安装 + 复杂配置 | 内置于插件镜像 |
| 密钥管理 | GitHub Secrets | CNB 密钥仓库 + imports |
| 输出传递 | @actions/core setOutput | ##[set-output] + exports |
基于 openai/codex-action 移植,遵循原项目许可证。