华为云用户手册

  • 操作步骤 登录HSS控制台,选择“主机管理”,单击页面中的“Agent安装指南”。 根据提示选择服务器操作系统,单击“复制”,获取当前云耀云服务器L实例系统对应的安装命令。 其中,服务器类型选择“云服务器”、“x86架构”。 登录云耀云服务器L实例控制台。 在待安装Agent的云耀云服务器L实例资源卡片上,单击“远程登录”,输入用户名密码登录云服务器。 在云服务器中执行步骤2获取的命令。 执行命令后您可以看到如下报错。 执行vi /ect/hosts命令,在host文件中增加如下内容。 100.125.11.131 hss-agent.cn-east-3.myhuaweicloud.com 100.125.158.120 hss-agent.cn-south-1.myhuaweicloud.com 100.125.12.111 hss-agent.cn-north-4.myhuaweicloud.com 再次执行步骤2获取的命令,提示“Hostguard installed”表示安装成功。 如果出现如下提示,请根据异常问题处理:修改网卡配置文件处理此问题。 返回HSS控制台,选择“主机管理”,Agent状态为“在线”后,单击“开启防护”。 Agent状态为“在线”需等待约10min,请耐心等待。 设置HSS为“包年/包月”、“基础版”,阅读并勾选声明,单击“确定”。 云耀云服务器L实例支持的HSS为“基础版”,此处设置请保持一致,请勿选择其他版本。 返回云耀云服务器L实例控制台,可查看到HSS服务状态处于“防护中”正常启用状态。
  • 如何开发网关 网关是一个特殊的设备,除具备一般设备功能之外,还具有子设备管理、子设备消息转发的功能。SDK提供了AbstractGateway抽象类来简化网关的实现。该类提供了子设备管理功能,需要从平台获取子设备信息并保存(需要子类提供子设备持久化接口)、子设备下行消息转发功能(需要子类实现转发处理接口)、以及上报子设备列表、上报子设备属性、上报子设备状态、上报子设备消息等接口。 使用AbstractGateway类 继承该类,在构造函数里提供子设备信息持久化接口,实现其下行消息转发的抽象接口: 1 2 3 4 5 6 7 public abstract void onSubdevCommand(String requestId, Command command); public abstract void onSubdevPropertiesSet(String requestId, PropsSet propsSet); public abstract void onSubdevPropertiesGet(String requestId, PropsGet propsGet); public abstract void onSubdevMessage(DeviceMessage message); iot-gateway-demo代码介绍 工程iot-gateway-demo基于AbstractGateway实现了一个简单的网关,它提供tcp设备接入能力。关键类: SimpleGateway:继承自AbstractGateway,实现子设备管理和下行消息转发 StringTcpServer:基于netty实现一个TCP server,本例中子设备采用TCP协议,并且首条消息为鉴权消息 SubDevicesFilePersistence:子设备信息持久化,采用json文件来保存子设备信息,并在内存中做了缓存 Session:设备会话类,保存了设备id和TCP的channel的对应关系 SimpleGateway类 添加或删除子设备处理 添加子设备:AbstractGateway的onAddSubDevices接口已经完成了子设备信息的保存。我们不需要再增加额外处理,因此SimpleGateway不需要重写onAddSubDevices接口 删除子设备:我们不仅需要修改持久化信息,还需要断开当前子设备的连接。所以我们重写了onDeleteSubDevices接口,增加了拆链处理,然后调用父类的onDeleteSubDevices。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override public int onDeleteSubDevices(SubDevicesInfo subDevicesInfo) { for (DeviceInfo subdevice : subDevicesInfo.getDevices()) { Session session = nodeIdToSesseionMap.get(subdevice.getNodeId()); if (session != null) { if (session.getChannel() != null) { session.getChannel().close(); channelIdToSessionMap.remove(session.getChannel().id().asLongText()); nodeIdToSesseionMap.remove(session.getNodeId()); } } } return super.onDeleteSubDevices(subDevicesInfo); } 下行消息处理 网关收到平台下行消息时,需要转发给子设备。平台下行消息分为三种:设备消息、属性读写、命令。 设备消息:这里我们需要根据deviceId获取nodeId,从而获取session,从session里获取channel,就可以往channel发送消息。在转发消息时,可以根据需要进行一定的转换处理。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Override public void onSubdevMessage(DeviceMessage message) { //平台接口带的都是deviceId,deviceId是由nodeId和productId拼装生成的,即 //deviceId = productId_nodeId String nodeId = IotUtil.getNodeIdFromDeviceId(message.getDeviceId()); if (nodeId == null) { return; } //通过nodeId获取session,进一步获取channel Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { log.error("subdev is not connected " + nodeId); return; } if (session.getChannel() == null){ log.error("channel is null " + nodeId); return; } //直接把消息转发给子设备 session.getChannel().writeAndFlush(message.getContent()); log.info("writeAndFlush " + message); } 属性读写: 属性读写包括属性设置和属性查询。 属性设置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 @Override public void onSubdevPropertiesSet(String requestId, PropsSet propsSet) { if (propsSet.getDeviceId() == null) { return; } String nodeId = IotUtil.getNodeIdFromDeviceId(propsSet.getDeviceId()); if (nodeId == null) { return; } Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { return; } //这里我们直接把对象转成string发给子设备,实际场景中可能需要进行一定的编解码转换 session.getChannel().writeAndFlush(JsonUtil.convertObject2String(propsSet)); //为了简化处理,我们在这里直接回响应。更合理做法是在子设备处理完后再回响应 getClient().respondPropsSet(requestId, IotResult.SUCCESS); log.info("writeAndFlush " + propsSet); } 属性查询: 1 2 3 4 5 6 7 @Override public void onSubdevPropertiesGet(String requestId, PropsGet propsGet) { //不建议平台直接读子设备的属性,这里直接返回失败 log.error("not supporte onSubdevPropertiesGet"); deviceClient.respondPropsSet(requestId, IotResult.FAIL); } 命令:处理流程和消息类似,实际场景中可能需要不同的编解码转换。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @Override public void onSubdevCommand(String requestId, Command command) { if (command.getDeviceId() == null) { return; } String nodeId = IotUtil.getNodeIdFromDeviceId(command.getDeviceId()); if (nodeId == null) { return; } Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { return; } //这里我们直接把command对象转成string发给子设备,实际场景中可能需要进行一定的编解码转换 session.getChannel().writeAndFlush(JsonUtil.convertObject2String(command)); //为了简化处理,我们在这里直接回命令响应。更合理做法是在子设备处理完后再回响应 getClient().respondCommand(requestId, new CommandRsp(0)); log.info("writeAndFlush " + command); } 上行消息处理 上行处理在StringTcpServer的channelRead0接口里。如果会话不存在,需要先创建会话: 如果子设备信息不存在,这里会创建会话失败,直接拒绝连接 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override protected void channelRead0(ChannelHandlerContext ctx, String s) throws Exception { Channel incoming = ctx.channel(); log.info("channelRead0" + incoming.remoteAddress() + " msg :" + s); //如果是首条消息,创建session //如果是首条消息,创建session Session session = simpleGateway.getSessionByChannel(incoming.id().asLongText()); if (session == null) { String nodeId = s; session = simpleGateway.createSession(nodeId, incoming); //创建会话失败,拒绝连接 if (session == null) { log.info("close channel"); ctx.close(); } } 如果会话存在,则进行消息转发: 1 2 3 4 5 6 7 else { //如果需要上报属性则调用reportSubDeviceProperties DeviceMessage deviceMessage = new DeviceMessage(s); deviceMessage.setDeviceId(session.getDeviceId()); simpleGateway.reportSubDeviceMessage(deviceMessage, null); } 到这里,网关的关键代码介绍完了,其他的部分看源代码。整个demo是开源的,用户可以根据需要进行扩展。比如修改持久化方式、转发中增加消息格式的转换、实现其他子设备接入协议。 iot-gateway-demo的使用 在平台上为网关注册开户。 修改StringTcpServer的main函数,替换构造参数,然后运行该类。 1 2 3 simpleGateway = new SimpleGateway(new SubDevicesFilePersistence(), "ssl://iot-acc.cn-north-4.myhuaweicloud.com:8883", "5e06bfee334dd4f33759f5b3_demo", "mysecret"); 在平台上看到该网关在线后,添加子设备。 此时网关上日志打印: 2023-01-05 19:14:32 INFO SubDevicesFilePersistence:83 - add subdev: 456gefw3fh 运行TcpDevice类,建立连接后,输入子设备的nodeId。 此时网关设备日志打印: 2023-01-05 19:15:13 INFO StringTcpServer:118 - channelRead0/127.0.0.1:60535 msg :subdev2 2023-01-05 19:15:13 INFO SimpleGateway:68 - create new session okSession{nodeId='456gefw3fh', channel=[id: 0x42c9dc24, L:/127.0.0.1:8080 - R:/127.0.0.1:60535], deviceId='5e06bfee334dd4f337589c1de_subdev2'} 在平台上看到子设备上线。 子设备上报消息 查看日志看到上报成功 查看消息跟踪 在平台上找到网关,选择 设备详情-消息跟踪,打开消息跟踪。继续让子设备发送数据,等待片刻后看到消息跟踪:
  • SDK获取和安装 安装PHP开发环境。 访问PHP官网,下载并按说明安装PHP开发环境。 华为云 PHP SDK 支持 PHP 5.6 及以上版本。 安装composer curl -sS https://getcomposer.org/installer | php 安装PHP SDK composer require huaweicloud/huaweicloud-sdk-php 引入 Composer 的自动加载文件 require 'path/to/vendor/autoload.php';
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 status String 返回结果状态 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 请求示例 执行任务ID为“f9d6c8466d614a9788e9a0acf6c15f46”,代码仓名称为“codeBranch”,代码仓分支为“master”的构建任务 POST https://{endpoint}/v3/jobs/build { "job_id" : "f9d6c8466d614a9788e9a0acf6c15f46", "parameter" : [ { "name" : "codeBranch", "value" : "master" } ], "scm" : { "build_tag" : null, "build_commit_id" : "build_commit_id" } }
  • 响应参数 状态码: 200 表5 响应Body参数 参数 参数类型 描述 octopus_job_name String 临时任务名称 actual_build_number String 实际构建次数 daily_build_number String 构建每日编号 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表10 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 通过调用IAM服务接口获取 (响应消息头中X-Subject-Token的值)。 不支持租户全局token,请使用scope为project的region级token。 表2 请求Body参数 参数 是否必选 参数类型 描述 job_id 是 String 构建任务ID;编辑构建任务时,浏览器URL末尾的32位数字、字母组合的字符串 parameter 否 Array of ParameterItem objects 自定义参数 scm 否 Scm object 代码信息 表3 ParameterItem 参数 是否必选 参数类型 描述 name 是 String 参数名称 value 是 String 参数值 表4 Scm 参数 是否必选 参数类型 描述 build_tag 否 String 代码Tag build_commit_id 否 String 代码提交ID
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 success Boolean 是否停止成功 result String 返回结果 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 文档修订记录 文档修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。 修订记录 发布日期 新增以下接口: 下载构建日志、下载构建步骤日志、获取构建记录信息、获取构建产物详情信息、更新构建作业配置、查询构建模板、创建构建模板、删除构建模板、创建构建任务、查询通知、更新通知、取消通知、获取构建任务详情 新增以下待下线接口: 下载构建日志(待下线)、获取构建记录的有向无环图(待下线)、获取构建记录信息(待下线)、停止构建任务(待下线) 2023-11-13 新增获取构建记录信息接口。 新增停止构建任务接口。 新增删除构建任务接口。 新增禁用构建任务接口。 新增恢复构建任务接口。 2023-10-19 错误码更新。 2023-03-29 新增根据开始时间和结束时间查看构建任务的构建成功率接口。 修改各接口“X-Auth-Token”参数描述。 2022-04-15 错误码由“DEVCB.00060200”形式改为“CB.00060200”形式。 2021-12-27 新增获取构建历史详情信息接口。 根据开始时间和结束时间查看构建任务的构建历史列表接口新增响应参数。 2021-12-25 新增查询指定代码仓库最近一次成功的构建历史接口。 接口字段类型、描述刷新。 2021-08-11 新增根据开始时间和结束时间查看构建任务的构建历史列表和查看构建任务的构建历史列表两个接口。 2021-03-01 查看项目下用户的构建任务列表响应示例刷新。 2020-11-23 新增应用示例。 2020-08-27 认证鉴权页面刷新。 错误码列表刷新。 2020-08-18 第一次正式发布。 2020-05-26
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 success_count Integer 任务成功构建次数 total_count Integer 任务构建总次数 success_ratio Double 任务成功率,精确到小数点后两位 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • URI GET /v3/jobs/{job_id}/success-ratio 表1 路径参数 参数 是否必选 参数类型 描述 job_id 是 String 构建的任务ID; 编辑构建任务时,浏览器URL末尾的32位数字、字母组合的字符串。 表2 Query参数 参数 是否必选 参数类型 描述 start_time 是 String 区间开始时间,格式yyyy-MM-dd。 end_time 是 String 区间结束时间,格式yyyy-MM-dd。
  • 响应示例 状态码: 200 OK { "total" : 1, "history_records" : { "record_id" : "20201230.1", "job_id" : "f9d6c8466d614a9788e9a0acf6c15f46", "build_number" : 55, "start_time" : "2020-12-30T17:33:11+08:00", "end_time" : "2020-12-30T17:33:27+08:00", "result" : "FAILURE" } }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 history_records Array of HistoryRecord objects 构建历史列表 total Integer 记录总数 表5 HistoryRecord 参数 参数类型 描述 record_id String 构建记录id--唯一key job_id String 任务id build_number Integer 构建编号 start_time String 构建开始时间 end_time String 构建结束时间 result String 构建结果 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表10 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • URI GET /v3/jobs/{job_id}/history 表1 路径参数 参数 是否必选 参数类型 描述 job_id 是 String 构建的任务ID; 编辑构建任务时,浏览器URL末尾的32位数字、字母组合的字符串。 表2 Query参数 参数 是否必选 参数类型 描述 offset 是 Integer 分页页码, 表示从此页开始查询, offset大于等于0 limit 是 Integer 每页显示的条目数量,limit小于等于100 interval 是 Integer 距今天的时间区间(单位:天),interval小于等于30
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 result result object 结果 status String 状态信息 表4 result 参数 参数类型 描述 job_id String 构建任务ID project_id String 构建任务所在项目的ID 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 200 OK { "job_name" : "测试任务01", "build_number" : 5, "project_id" : "6ecbc5bac7c8442fb3d2563d53c13582", "project_name" : "test-project", "parameters" : [ { "static_limit_param_name" : "static_limit_param_value_1", "sentive_param_name" : "******", "no_static_param_name" : "no_static_param_value", "static_param_name" : "static_param_value", "no_static_limit_param_name" : "no_static_limit_param_value_1" } ], "build_steps" : [ { "name" : "代码检出", "status" : "success", "build_time" : 8366 }, { "name" : "上传软件包到软件发布库", "status" : "", "build_time" : 0 } ] }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 result Boolean 任务运行结果 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 status String 返回结果状态 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应参数 状态码: 400 表3 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 200 OK { "record_id" : "20210722.16", "job_id" : "37be03edd1da430c8079504d546cc499", "job_name" : "测试任务01", "build_number" : 16, "start_time" : "2021-07-22T16:26:52+08:00", "end_time" : "2021-07-22T16:27:15+08:00", "result" : "SUCCESS", "commit_id" : "e311c54476e0e536f0ecdeeba8dc184216fa2057" }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 record_id String 构建记录id--唯一key job_id String 构建任务ID job_name String 构建任务名称 build_number Integer 构建编号 start_time String 构建开始时间 end_time String 构建结束时间 result String 构建执行结果 commit_id String commitId 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 200 OK { "total" : 1, "jobs" : [ { "id" : "2a86c3c1ed18416399279fe6........", "job_name" : "demo", "job_creator" : "ae22fd035f354cfa8d82a3f1........", "user_name" : "test", "last_build_time" : 1608004535000, "health_score" : 75, "source_code" : "test", "last_build_status" : "blue", "is_finished" : true, "disabled" : true, "favorite" : true, "is_modify" : true, "is_delete" : true, "is_execute" : true, "is_copy" : true, "is_forbidden" : true, "is_view" : true } ] }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 jobs Array of Job objects 任务列表 total Integer 任务总数 表5 Job 参数 参数类型 描述 id String 任务ID job_name String 任务名称 job_creator String 任务创建者 user_name String 用户名称 last_build_time Number 最新执行时间 health_score Integer 健康分值 source_code String 代码来源 last_build_status String 最新构建状态 is_finished Boolean 是否已结束 disabled Boolean 是否已禁用 favorite Boolean 是否已收藏 is_modify Boolean 是否有修改任务权限 is_delete Boolean 是否有删除任务权限 is_execute Boolean 是否有执行任务权限 is_copy Boolean 是否有复制任务权限 is_forbidden Boolean 是否有禁用任务权限 is_view Boolean 是否有查看任务权限 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表10 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • URI GET /v3/{project_id}/jobs 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String CodeArts项目ID,32位数字、小写字母组合。 表2 Query参数 参数 是否必选 参数类型 描述 page_index 是 Integer 分页页码, 表示从此页开始查询, page_index大于等于0 page_size 是 Integer 每页显示的条目数量,page_size小于等于100
  • 响应示例 状态码: 200 OK { "success" : true, "result" : { "id" : "eb9d73c7-61b3-4823-b476-a7c00c493b8a", "build_project_id" : "31581e9f-5772-4053-a50c-d5690578c8fd", "build_record_id" : "9d6169b9-022d-458c-9dc8-48cc94cc4083", "parent_record_id" : null, "devcloud_project_id" : "b4d3971c3988463b865f6f920846149e", "codeci_job_id" : "68491d9bc97b4774adb93e29b46d2dc6", "user_id" : "ae22fd035f354cfa8d82a3f1c8940446", "build_no" : 532, "daily_build_num" : "20221011.29", "execution_id" : "j_YE1bu9Z7", "repo_name" : "maven", "repo_id" : "2111616838", "branch" : "buildflow_env", "tag" : null, "commit" : null, "commit_message" : null, "commit_create_time" : "2022-10-11T08:28:42.000+00:00", "trigger_type" : "MANUAL", "build_type" : "branch", "status" : "SUCCESS", "domain_id" : "60021bab32fd450aa2cb89226f425e06", "create_time" : "2022-10-11T08:28:42.000+00:00", "schedule_time" : "2022-10-11T08:28:45.000+00:00", "queued_time" : "2022-10-11T08:28:45.000+00:00", "start_time" : "2022-10-11T08:28:47.000+00:00", "runnable_time" : "2022-10-11T08:16:04.000+00:00", "finish_time" : "2022-10-11T08:30:27.000+00:00", "duration" : 100068, "record_status" : null, "use_private_slave" : 0, "region" : "cn-north-7", "err_msg" : null, "build_config_type" : "YAML" } }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 success Boolean 状态 message String 消息 err_code String 错误码 result result object 结果 表4 result 参数 参数类型 描述 id String id build_project_id String 构建工程ID,唯一对应codeci_job_id build_record_id String 构建记录ID parent_record_id String 父构建记录ID devcloud_project_id String 项目ID codeci_job_id String codeci任务ID,唯一对应build_project_id user_id String 用户ID build_no Integer 构建编号 daily_build_num String 每日构建编号,每日从1开始 execution_id String 八爪鱼任务ID repo_name String 仓库名称 repo_id String 仓库id branch String 仓库分支 tag String 仓库tag commit String 仓库commit ID commit_message String 仓库commit提交信息 commit_create_time String commit创建时间 trigger_type String 触发类型 build_type String 构建类型 status String 构建状态 domain_id String 租户ID create_time String 任务创建时间 schedule_time String 构建下发耗时 queued_time String 构建排队耗时 start_time String 开始构建时间 runnable_time String 八爪鱼真正开始构建时间 finish_time String 构建结束时间 duration Float 构建时长 record_status String record状态 use_private_slave Integer 是否使用自定义执行机 region String 租户所在region err_msg String 错误信息 build_config_type String 构建配置类型,YAML或ACTION 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 result Boolean 构建停止结果 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 通过调用IAM服务接口获取 (响应消息头中X-Subject-Token的值)。 不支持租户全局token,请使用scope为project的region级token。 表2 请求Body参数 参数 是否必选 参数类型 描述 job_id 是 String 构建任务ID;编辑构建任务时,浏览器URL末尾的32位数字、字母组合的字符串 build_no 是 String 构建任务的构建编号,从1开始,每次构建递增1
  • 响应示例 状态码: 200 OK { "result" : { "package_info" : null, "package_infos" : { "additionalProp1" : { "project_id" : "a287e712be6c404ca26e5f69040fa12b", "name" : "a287e712be6c404ca26e5f69040fa12b", "version" : "a287e712be6c404ca26e5f69040fa12b", "package_type" : "a287e712be6c404ca26e5f69040fa12b", "uri" : "a287e712be6c404ca26e5f69040fa12b", "type" : "a287e712be6c404ca26e5f69040fa12b", "daily_build_number" : "a287e712be6c404ca26e5f69040fa12b" } }, "image_infos" : null }, "error" : null, "status" : "success" }
  • 响应示例 状态码: 200 OK { "success" : true, "result" : { "edges" : [ { "from" : "d5587caf-05d7-42af-8ed2-daa20eb1de1b", "to" : "af81a8ff-1d53-4e0a-9108-fa7880366e73" } ], "vertices" : [ { "id" : "7607d919-6c21-43b3-a06e-ee016ff8e7c7", "status" : "SUCCESS", "display_name" : "job4", "build_duration" : 38156, "start_time" : "2020-12-30T17:33:11+08:00", "finish_time" : "2020-12-30T17:33:27+08:00", "build_no" : "535" } ] } }
共100000条