部署 API
本文档描述了 Trae 应用部署功能的 API 接口。
概述
部署 API 提供了应用程序部署、环境管理、版本控制等功能,支持多种部署平台和策略。
端点
创建部署
http
POST /api/deployment/deploy请求参数
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
project_id | string | 是 | 项目 ID |
environment | string | 是 | 部署环境 |
branch | string | 否 | 部署分支,默认为 main |
config | object | 否 | 部署配置 |
strategy | string | 否 | 部署策略 |
响应
json
{
"deployment_id": "deploy_123",
"project_id": "project_456",
"environment": "production",
"status": "pending",
"created_at": "2024-01-01T00:00:00Z",
"estimated_duration": 300,
"url": "https://my-app-deploy-123.trae.app"
}获取部署状态
http
GET /api/deployment/{deployment_id}/status响应
json
{
"deployment_id": "deploy_123",
"status": "deploying",
"progress": 65,
"current_step": "building",
"logs": [
{
"timestamp": "2024-01-01T00:00:00Z",
"level": "info",
"message": "开始构建应用..."
},
{
"timestamp": "2024-01-01T00:01:00Z",
"level": "info",
"message": "构建完成,开始部署..."
}
],
"url": "https://my-app-deploy-123.trae.app"
}获取部署列表
http
GET /api/deployment/list?project_id={project_id}&environment={environment}响应
json
{
"deployments": [
{
"deployment_id": "deploy_123",
"environment": "production",
"status": "success",
"created_at": "2024-01-01T00:00:00Z",
"completed_at": "2024-01-01T00:05:00Z",
"url": "https://my-app.trae.app"
}
],
"total": 1
}回滚部署
http
POST /api/deployment/{deployment_id}/rollback请求参数
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
target_deployment_id | string | 否 | 目标部署 ID |
reason | string | 否 | 回滚原因 |
响应
json
{
"rollback_id": "rollback_123",
"status": "started",
"target_deployment_id": "deploy_122",
"reason": "发现严重 bug"
}停止部署
http
POST /api/deployment/{deployment_id}/stop获取部署日志
http
GET /api/deployment/{deployment_id}/logs?limit={limit}&offset={offset}响应
json
{
"logs": [
{
"timestamp": "2024-01-01T00:00:00Z",
"level": "info",
"message": "开始部署流程",
"step": "initialization"
},
{
"timestamp": "2024-01-01T00:01:00Z",
"level": "info",
"message": "正在拉取代码...",
"step": "source"
}
],
"total": 50
}环境管理
创建环境
http
POST /api/deployment/environment请求参数
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
name | string | 是 | 环境名称 |
project_id | string | 是 | 项目 ID |
config | object | 是 | 环境配置 |
auto_deploy | boolean | 否 | 自动部署 |
响应
json
{
"environment_id": "env_123",
"name": "staging",
"project_id": "project_456",
"config": {
"domain": "staging.myapp.com",
"instances": 2,
"memory": "512MB"
},
"auto_deploy": true
}部署状态
pending- 等待中building- 构建中deploying- 部署中success- 成功failed- 失败cancelled- 已取消rolling_back- 回滚中
部署策略
rolling- 滚动部署blue_green- 蓝绿部署canary- 金丝雀部署recreate- 重建部署
示例
部署到生产环境
javascript
const response = await fetch('/api/deployment/deploy', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-token'
},
body: JSON.stringify({
project_id: 'my-project',
environment: 'production',
branch: 'main',
strategy: 'rolling',
config: {
instances: 3,
memory: '1GB',
env_vars: {
NODE_ENV: 'production',
API_URL: 'https://api.myapp.com'
}
}
})
});
const deployment = await response.json();
console.log('部署已启动:', deployment.deployment_id);
console.log('预览 URL:', deployment.url);监控部署进度
javascript
const deploymentId = 'deploy_123';
const checkDeploymentStatus = async () => {
const response = await fetch(`/api/deployment/${deploymentId}/status`);
const status = await response.json();
console.log(`部署进度: ${status.progress}%`);
console.log(`当前步骤: ${status.current_step}`);
// 显示最新日志
if (status.logs.length > 0) {
const latestLog = status.logs[status.logs.length - 1];
console.log(`[${latestLog.level}] ${latestLog.message}`);
}
if (status.status === 'deploying') {
setTimeout(checkDeploymentStatus, 5000); // 5秒后再次检查
} else if (status.status === 'success') {
console.log('部署成功!访问地址:', status.url);
} else if (status.status === 'failed') {
console.error('部署失败,请检查日志');
}
};
checkDeploymentStatus();金丝雀部署
javascript
// 第一步:部署到金丝雀环境
const canaryResponse = await fetch('/api/deployment/deploy', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-token'
},
body: JSON.stringify({
project_id: 'my-project',
environment: 'production',
strategy: 'canary',
config: {
canary_percentage: 10, // 10% 流量
instances: 1
}
})
});
const canaryDeployment = await canaryResponse.json();
console.log('金丝雀部署已启动:', canaryDeployment.deployment_id);
// 等待金丝雀部署完成并验证
// ...
// 第二步:如果金丝雀测试通过,完成全量部署
const fullResponse = await fetch('/api/deployment/deploy', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-token'
},
body: JSON.stringify({
project_id: 'my-project',
environment: 'production',
strategy: 'rolling',
config: {
promote_from: canaryDeployment.deployment_id
}
})
});紧急回滚
javascript
const rollbackResponse = await fetch(`/api/deployment/${currentDeploymentId}/rollback`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-token'
},
body: JSON.stringify({
target_deployment_id: 'deploy_122', // 回滚到上一个稳定版本
reason: '发现性能问题,紧急回滚'
})
});
const rollback = await rollbackResponse.json();
console.log('回滚已启动:', rollback.rollback_id);