Skip to content

部署 API

本文档描述了 Trae 应用部署功能的 API 接口。

概述

部署 API 提供了应用程序部署、环境管理、版本控制等功能,支持多种部署平台和策略。

端点

创建部署

http
POST /api/deployment/deploy

请求参数

参数类型必需描述
project_idstring项目 ID
environmentstring部署环境
branchstring部署分支,默认为 main
configobject部署配置
strategystring部署策略

响应

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_idstring目标部署 ID
reasonstring回滚原因

响应

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

请求参数

参数类型必需描述
namestring环境名称
project_idstring项目 ID
configobject环境配置
auto_deployboolean自动部署

响应

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);

您的终极 AI 驱动 IDE 学习指南