华为云用户手册

  • 购买并配置云容器引擎 本文档中使用的是云容器引擎CCE。 通过控制台可购买CCE集群。 其中集群及节点的必要配置建议参照表2与表3,表中未涉及的可根据实际情况选择。 表2 CCE集群购买配置 配置分类 配置项 配置建议 基础配置 计费模式 选择“按需计费”。 集群版本 根据需要选择,建议选择最新版本。 网络配置 网络模型 选择“容器隧道网络”。 虚拟私有云 选择已有的虚拟私有云,若列表中没有合适的选项,单击“新建虚拟私有云”完成创建。 控制节点子网 选择已有的子网,若列表中合适的选项,单击“新建子网”完成创建。 容器网段 勾选“自动设置网段”。 表3 节点配置 配置分类 配置项 配置建议 计算配置 计费模式 选择“按需计费”。 节点类型 选择“弹性云服务器-虚拟机”。 节点规格 选择“通用型”、2核8G及以上规格即可。 容器引擎 选择“Docker”。 操作系统 选择公共镜像中的Euler镜像。 节点名称 输入自定义名称 。 登录方式 选择“密码”。 密码 输入自定义密码 。 网络配置 节点IP 选择“随机分配”。 弹性公网IP 选择“自动创建”。
  • 预置流水线简介 示例项目中预置以下5个流水线任务,可根据需要查看并使用。 表1 预置流水线任务 预置流水线任务 任务说明 phoenix-workflow 基本的流水线任务。 phoenix-workflow-test 测试环境对应的流水线任务。 phoenix-workflow-work Worker功能对应的流水线任务。 phoenix-workflow-result Result功能对应的流水线任务。 phoenix-workflow-vote Vote功能对应的流水线任务。 关于Vote、Result、Worker的说明,请参见方案架构。 购买专业版或企业版CodeArts套餐的用户,创建示例项目后可见5条流水线;购买体验版或基础版CodeArts套餐的用户,创建示例项目后只可见流水线“phoenix-workflow”,升级套餐至专业版或企业版后,需重新创建示例项目才可见5条流水线。
  • 配置准出条件 该功能需购买专业版或企业版CodeArts套餐可用。 为了控制代码的质量,代码必须经过扫描,并且错误数量控制在合理范围内,才允许发布。通过添加质量门禁可以有效的自动化控制流程。 在流水线任务“phoenix-workflow”详情页,单击页面右上角,在下拉列表中选择“编辑”。 在阶段“代码检查”中,单击“准出条件”。 在“准出条件”窗口中,单击“标准策略准出条件”插件后的“添加”。 选择“系统策略”,单击“确定”。 单击“保存并运行”,启动流水线任务。 若代码检查问题数未达到准出条件,流水线任务将执行失败。
  • 背景信息 华为端到端(HE2E)DevOps实施框架,是结合了多年研发经验并集合了业界先进的实践所形成的一套可操作可落地的敏捷开发方法论,如图1所示。 图1 HE2E DevOps实施框架 规划和设计 步骤①和②是业务(或者是客户)与技术之间进行产品规划,梳理产品整体脉络,以及进行产品规划实施设计,并控制需求粒度与拆分的过程。 软件开发的本质是为了解决问题,提供用户价值的,而不仅是为了提供功能。影响地图就是用来鉴别用户需求是什么,深层的根因是什么。 用户故事就是目标和需求的载体,以用户的场景来讲故事,便于在客户、业务与开发之间进行信息的传递。在这个过程中,独立的需求条目的堆积,很容易导致只能看到各个需求条目,不能从整个解决方案思考需求。用户故事以用户使用的场景为主线,将大的阶段点,及其细分的活动,以树状的结构进行梳理和展现,既可以看到独立的需求条目,又能够看到整体需求场景。 计划和跟踪、迭代开发 步骤③~⑩是Scrum框架过程,是主要的管理实践。 Scrum定义了一个相对完整的敏捷过程管理的框架。在CodeArts中,将Scrum的框架与团队日常的开发活动,很好的融合起来。主要的过程产物包括产品故事列表、迭代故事列表、潜在可交付的产品增量、以及过程中产生的问题列表;核心的团队活动包括Sprint计划会议、团队每日站会、Sprint演示会议、Sprint回顾会议等会议、以及团队的日常更新。 同时,将Kanban方法与Scrum框架进行了结合,团队借鉴Kanban方法中的精益思想,可视化价值流,发现并解决阻塞与瓶颈,加速价值流交付,并加快反馈回路,持续进行改进。 持续交付 从步骤⑪开始,进入到工程实践,也就是通常说的CI/CD过程。 持续交付以代码配置管理为基础,除了传统意义的代码资产安全与管控、多人并行开发、版本与基线管理外,也体现了团队的协作与沟通。 代码检查(即静态扫描)、自动化的构建、各阶段的自动化测试、以及相应的自动化部署过程,都被有机的串联在流水线上。 除了代码检查、构建、测试、部署等动态的阶段与活动,还有制品管理,以及各级的环境管理,包括开发环境、测试环境、准生产环境,以及生产环境。 持续交付流水线就是将整个持续交付中,都有哪些阶段,分别运行在什么环境,每个阶段执行什么活动,准入与准出的质量门禁,以及每个阶段的输入与输出的制品进行管理。
  • 方案架构 “凤凰商城”示例程序架构 “凤凰商城”示例程序的架构图如图2所示。 图2 凤凰商城技术架构图 示例程序由表1中的5个可以独立开发、测试和部署的微服务组件构成。 表1 凤凰商城微服务组件表 微服务组件 说明 Web用户端服务器(对应样例代码中的“Vote”功能) 业务逻辑:用户可以通过浏览器访问此服务的WebUI。当用户在特定商品上单击“Like”时,服务将用户所选择物品的记录保存在Redis缓存中。 技术栈:Python、Flask框架。 应用服务器:Gunicorn。 Web管理端服务器(对应样例代码中的“Result”功能) 业务逻辑:用户可以通过浏览器访问此服务的WebUI,会动态显示用户端UI上用户单击“Like”的统计数据,此数据来自PostgreSQL数据库。 技术栈:Node.js、express框架。 应用服务器:server.js。 后台订单批处理程序(对应样例代码中的“Worker”功能) 业务逻辑:此服务为后台进程,会监控Redis缓存中物品记录,并将新纪录取出并保存在PostgreSQL数据库中,以便管理端UI可以抽取数据进行统计显示。 技术栈:.net core或者Java(此服务提供两种技术栈实现了同样的功能,可根据需要修改配置选择其中一个作为运行时进程)。 订单缓存 业务逻辑:此服务作为用户端UI服务的数据持久化服务存在。 技术栈:Redis 订单数据库 业务逻辑:此服务作为管理端UI服务的数据源。 技术栈:PostgreSQL “DevOps全流程样例项目”构成 “DevOps全流程样例项目”是一个Scrum类型的模板项目,项目中预置了部分服务的使用模板。项目实践过程中涉及到的产品及服务如下表。 表2 实践涉及产品/服务列表 服务 说明 软件开发生产线 需求管理 预置3个已规划并已完成的迭代、项目的模块设置、以及若干统计报表。 代码托管 预置代码仓库“phoenix-sample”,存放项目示例代码。 代码检查 预置4个任务,任务详情介绍请参见步骤四:检查代码。 编译构建 预置5个任务,任务详情介绍请参见步骤五:构建应用。 制品仓库 用于存储通过构建任务生成的软件包。 部署 预置3个应用,应用详情介绍请参见步骤六:部署应用(CCE篇)。 测试计划 功能测试用例库,预置十余个测试用例。 流水线 预置5条流水线,流水线详情介绍请参见步骤八:配置流水线,实现持续交付。 说明: 购买专业版或企业版CodeArts套餐的用户,创建示例项目后可见5条流水线;购买体验版或基础版CodeArts套餐的用户,创建示例项目后只可见流水线“phoenix-workflow”,升级套餐至专业版或企业版后,需重新创建示例项目才可见5条流水线。 其它组件和服务 统一身份认证 服务 用于管理账号。 容器镜像服务 用于存放构建任务生成的Docker镜像。 云容器引擎 用于软件包部署,与E CS 部署属于两种不同的部署方式。 弹性云服务器 用于软件包部署,与CCE部署属于两种不同的部署方式。
  • 共享会议屏幕 会议中单击“共享”,可让所有与会者实时观看共享的屏幕、白板或者程序,眼见胜过千言。 会议主持人可以将桌面共享给所有与会者,与会者也可以申请远程控制桌面。管理后台开启“会议水印”后,通过PC端共享屏幕后,支持显示水印。 高级设置可以设置“共享时包含音频”是否开启。 边共享边标注,让头脑风暴更简单。 锁定共享 主持人锁定共享后,仅主持人可以发起共享。如此时有其他用户正在共享,将被取消共享。 主持人邀请及取消共享 会议中当需要与会者共享时,主持人可以指定与会者进行共享,也可以随时取消与会者共享。
  • 加入会议 用户可通过多种方式加入会议: 受邀入会 将邀请邮件/短信中的会议分享链接复制到浏览器中打开,即可入会。 直接单击会议链接入会。 在“会议”页签中查看右边的会议日程对应日期的会议列表,在会议列表里,选择正在召开的会议,单击“加入”。 PC端预约会议后,会议日程信息会自动同步到移动端 WeLink 日历; 在移动端,进入“日历”应用,点击“加入会议”,即可入会。 会议ID入会 在“会议”页签中选择“加入会议”,输入会议ID和密码(若会议发起者没有设置来宾密码,则不需要),单击“加入会议”即可入会。 会议ID和密码从转发的会议通知邮件/短信中获取。
  • 管理/主持会议 没有加入会议,您也可以轻松管理会议。 已经使用个人会议ID创建了会议,单击 “会议管理”,页面跳转至会议管理界面,即可查看和管理自己的会议。 控制页面,点击右上角的主持会议,即可开始主持会议。会议控制相关操作请参考会议控制。 如果您已经获取了其他会议的会议ID和主席密码,可以主持其他人预定的会议。 单击“主持会议”,输入的“会议ID”和“主席密码”,单击“开始主持”,页面跳转至会议控制页面,即可开始主持会议。会议控制相关操作请参考会议控制。 如果在“我的会议”中有会议记录,且您已获取该会议的主持人密码,可以进入会议详情页面,点击“主持”,跳转至会议控制页面主持该会议。会议控制相关操作请参考会议控制。
  • 快速创会 在“会议”页签中选择“发起会议”,可以发起视频会议或者语音会议,召开即时会议。 可以选择使用不同类型的会议ID,并设置来宾密码 个人会议ID:保持不变,方便记忆,适合召开部门例会 此时可对来宾密码进行修改或置空的操作,置空后,其他用户无需输入会议密码即可主动接入会议。 随机会议ID:随机产生,适合发起临时讨论,或召开安全性高的会议 此时可以选择是否启用来宾密码。 云会议室ID:会议资源稳定,适合召开大型或固定会议 此时可对来宾密码进行修改或置空的操作,置空后,其他用户无需输入来宾密码即可主动接入会议。 如果您的企业同时购买了云会议室资源和并发资源,您可以选择云会议室ID(需要企业管理员为您分配云会议室)、个人会议ID、随机会议ID。 如果您的企业只购买了会议并发资源,您可以选择个人会议ID、随机会议ID。 如果您的企业只购买了云会议室资源,您可以选择云会议室ID(需要企业管理员为您分配云会议室)。 高级设置可以设置“本地麦克风”、“本地摄像头”和“录制会议”是否开启 “允许入会”可以设置允许与会人员范围 所有人:企业内外用户都可以通过会议ID和会议密码加入会议; 仅组织内人员:只有企业内部员工才可以通过会议ID和会议密码加入会议,企业外部人员无法入会; 仅会议邀请人员:只有被邀请的成员才可以加入会议,未被邀请的人员无法加入会议。
  • 预约会议 在“会议”页签中选择“预约会议”,可以预约会议,提前提醒与会人员准时参加会议, 支持预约线下会议,支持直接选择跨月日期,当选择的会议开始时间早于当前时间时,出现文字提醒。 可以选择使用不同类型的会议ID,并设置来宾密码 个人会议ID:保持不变,方便记忆,适合召开部门例会 此时可对来宾密码进行修改或置空的操作,置空后,其他用户无需输入会议密码即可主动接入会议。 随机会议ID:随机产生,适合发起临时讨论,或召开安全性高的会议 此时可以选择是否启用来宾密码。 云会议室ID:会议资源稳定,适合召开大型或固定会议 此时可对来宾密码进行修改或置空的操作,置空后,其他用户无需输入来宾密码即可主动接入会议。 如果您的企业同时购买了云会议室资源和并发资源,您可以选择云会议室ID(需要企业管理员为您分配云会议室)、个人会议ID、随机会议ID。 如果您的企业只购买了会议并发资源,您可以选择个人会议ID、随机会议ID。 如果您的企业只购买了云会议室资源,您可以选择云会议室ID(需要企业管理员为您分配云会议室)。 未购买会议资源的免费企业,视频会议/语音会议的会议预约时长限定最长为45分钟。 在高级设置中可选择是否发送邮件和邮件日历通知给所有与会者,还可设置时区及是否开启录制会议。 “允许入会”可以设置允许与会人员范围。 所有人:企业内外用户都可以通过会议ID和会议密码加入会议; 仅组织内人员:只有企业内部员工才可以通过会议ID和会议密码加入会议,企业外部人员无法入会; 仅会议邀请人员:只有被邀请的成员才可以加入会议,未被邀请的人员无法加入会议。 邀请会议终端 预约会议时,可以通过添加企业会议终端,一键加入会议。 在“预约会议”页签,单击“邀请>组织>会议终端”,即可添加企业会议终端。 使用个人会议ID预约会议,如果通过会议链接提前加入,此会议会被提前召开,此时使用个人会议ID发起立即会议进入会议或者通过会议链接/会议ID+密码的方式进入个人会议的其他预约会议,都会进入到正在召开的会议中。 当会议中的所有人退出会议后半小时内,此时使用个人会议ID发起立即会议进入会议或者通过会议链接/会议ID+密码的方式进入个人会议的其他预约会议,都会进入到正在召开的会议中。 当会议中的所有人退出会议半小时后,正在召开的会议会被自动结束并转为历史会议记录,预约记录会保留,此后仍可以进入会议。 如果主持人离开会议的时候选择了离开并结束会议,会将此在线会议结束,并清除预约记录。 编辑已预约会议 会议预约成功后,可再次编辑和修改会议信息。 在“我的会议”界面,选择要修改的已预约的会议,单击右上角的,单击“编辑”即可再次编辑会议。 预约视频/语音会议可选择会议室 预约会议时,能同步预约会议室,无需分开进行预约操作。
  • 加入会议 用户可通过多种方式加入会议: 受邀入会 将邀请邮件/短信中的会议分享链接复制到浏览器中打开,即可入会。 主持人或者与会者可单击某个预约会议下方的“议题管理”,进入会议详情界面,点击右侧的“”,将会议信息复制给需要入会的成员。 在“会议”页签中选择“我的会议”,在会议列表里,选择正在召开的会议,点击“加入”。 会议ID入会 在“会议”页签中选择“加入会议”,输入会议ID和密码(若会议发起者没有设置来宾密码,则不需要),单击“加入会议”即可入会。 会议ID和密码从转发的会议通知邮件/短信中获取。
  • 快速创会 在“会议”页签中选择“发起会议”,可以发起视频会议或者语音会议,召开即时会议。 可以选择使用不同类型的会议ID,并设置来宾密码。 个人会议ID:保持不变,方便记忆,适合召开部门例会。 此时可对来宾密码进行修改或置空的操作,置空后,其他用户无需输入会议密码即可主动接入会议。 随机会议ID:随机产生,适合发起临时讨论,或召开安全性高的会议。 高级设置可以设置“本地麦克风”,“本地摄像头”和“录制会议”是否开启。 “允许入会”可以设置允许与会人员范围。 所有人:企业内外用户都可以通过会议ID和会议密码加入会议; 仅企业内人员:只有企业内部员工才可以通过会议ID和会议密码加入会议,企业外部人员无法入会; 仅会议邀请人员:只有被邀请的成员才可以加入会议,未被邀请的人员无法加入会议。
  • 预约会议 在“会议”页签中选择“预约会议”,可以预约会议,提前提醒与会人员准时参加会议。 在高级设置中可选择是否发送邮件,短信通知及邮件日历给所有与会者,还可设置时区及是否开启录制会议。 “允许入会”可以设置允许与会人员范围。 所有人:企业内外用户都可以通过会议ID和会议密码加入会议; 仅企业内人员:只有企业内部员工才可以通过会议ID和会议密码加入会议,企业外部人员无法入会; 仅会议邀请人员:只有被邀请的成员才可以加入会议,未被邀请的人员无法加入会议。 支持预约线下会议。 邀请会议终端 预约会议时,可以通过添加会议终端,添加公司会议终端,一键加入会议。 未购买会议资源的免费企业,视频会议/语音会议的会议预约时长限定最长为45分钟。 使用个人会议ID预约会议,如果通过会议链接提前加入,此会议会被提前召开,此时使用个人会议ID发起立即会议进入会议或者通过会议链接/会议ID+密码的方式进入个人会议的其他预约会议,都会进入到正在召开的会议中。 当会议中的所有人退出会议后半小时内,此时使用个人会议ID发起立即会议进入会议或者通过会议链接/会议ID+密码的方式进入个人会议的其他预约会议,都会进入到正在召开的会议中。 当会议中的所有人退出会议半小时后,正在召开的会议会被自动结束并转为历史会议记录,预约记录会保留,此后仍可以进入会议。 如果主持人离开会议的时候选择了离开并结束会议,会将此在线会议结束,并清除预约记录。 编辑已预约会议 会议预约成功后,可再次编辑和修改会议信息。 方式一:在“我的会议”界面,单击某个预约会议右上角的“…”,可编辑会议。 方式二:在“我的会议”界面,单击某个预约会议下方的“会议详情”,可编辑会议。 预约会议时,能同步预约会议室,无需分开进行预约操作。
  • 主持会议 没有加入会议,您也可以轻松主持会议。 已经使用个人会议ID创建了会议,在“我的会议”下选择相应的会议ID,点击“开始主持”,页面跳转至会议控制页面,即可开始主持会议。会议控制相关操作请参考会议控制。 如果您已经获取了其他会议的会议ID和主席密码,可以主持其他会议。 点击“其他会议”,输入的“会议ID”和“主持人密码”,点击“开始主持”,页面跳转至会议控制页面,即可开始主持会议。会议控制相关操作请参考会议控制。 如果在“我的会议”中有会议记录,且您已获取该会议的主持人密码,可以进入会议详情页面,点击下方的“主持”,跳转至会议控制页面主持该会议。会议控制相关操作请参考会议控制。
  • 响应示例 状态码: 200 OK { "result" : { "id" : 2111886200, "type" : "DiffNote", "body" : "检视意见内容", "author" : { "id" : 1234, "name" : "beta", "username" : "c369c68f1ff84679b5a8ed904d8bff1c", "state" : "active", "name_cn" : "beta" }, "created_at" : "2023-06-01T17:05:12.000+08:00", "updated_at" : "2023-06-01T17:05:12.000+08:00", "system" : false, "noteable_id" : 19387, "noteable_type" : "MergeRequest", "resolvable" : true, "is_reply" : true, "noteable_iid" : 2, "discussion_id" : "8bbe6d4e797169c4c1ce56507fdf1abc11f95601", "project" : "DevOpsqlcylxm00004/project-test", "diff_file" : "7", "diff" : "@@ -0,0 +1,0 @@\n+7", "archived" : false, "review_categories" : "regulations", "review_categories_cn" : "编程军规问题", "review_categories_en" : "Regulations", "review_modules" : "aaa,bbb", "severity" : "suggestion", "severity_cn" : "建议", "severity_en" : "Suggestion", "assignee" : { "id" : 1234, "name" : "beta", "username" : "c369c68f1ff84679b5a8ed904d8bff1c", "state" : "active", "name_cn" : "beta" }, "proposer" : { "id" : 1234, "name" : "beta", "username" : "c369c68f1ff84679b5a8ed904d8bff1c", "state" : "active", "name_cn" : "beta" }, "position" : { "base_sha" : "973bcc0211c32dbaa8473561c6767f74e1a81471", "start_sha" : "973bcc0211c32dbaa8473561c6767f74e1a81471", "head_sha" : "f5bf0230f9b996ed6c0d64d2b2fef789d91b164c", "old_path" : "7", "new_path" : "7", "position_type" : "text", "new_line" : 1 }, "resolved" : false, "is_outdated" : false }, "status" : "success" }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 error Error object 响应错误 result NoteDto object 响应结果 status String 响应状态 表5 Error 参数 参数类型 描述 code String 错误码 message String 错误信息 表6 NoteDto 参数 参数类型 描述 id Integer note id 最小值:1 最大值:2147483647 type String note类型 body String 检视意见内容 attachment String 附件 author UserBasicDto object 作者 created_at String 创建时间 updated_at String 更新时间 system Boolean 是否是系统生成的日志 noteable_id Integer 目标id 最小值:1 最大值:2147483647 noteable_type String 目标类型 commit_id String 关联的提交id resolvable Boolean 是否可解决 is_reply Boolean 是否是回复 resolved_by UserBasicDto object 解决人 noteable_iid Integer 目标iid 最小值:1 最大值:2147483647 discussion_id String 讨论id project String 所属项目 diff_file String 变更文件 diff String 变更内容 archived Boolean 是否存档 review_categories String 检视意见分类 review_categories_cn String 检视意见分类中文名 review_categories_en String 检视意见分类英文名 review_modules String 检视意见模块 severity String 严重程度 severity_cn String 严重程度中文名 severity_en String 严重程度英文名 file_path String 文件路径 line String 行号 assignee UserBasicDto object 指派人 proposer UserBasicDto object 提出人 position PositionDto object 关联的代码位置 resolved Boolean 是否解决 is_outdated Boolean 是否过时 表7 UserBasicDto 参数 参数类型 描述 id Integer 用户id 最小值:1 最大值:2147483647 name String 姓名 username String 用户名 state String 状态 avatar_url String 头像url avatar_path String 头像路径 email String 邮箱 name_cn String 中文名 web_url String 主页 nick_name String 昵称 tenant_name String 租户名称 表8 PositionDto 参数 参数类型 描述 base_sha String 源分支base提交节点 start_sha String 目标分支最新提交节点 head_sha String 源分支最新提交节点 old_path String 修改前文件路径 new_path String 修改后文件路径 position_type String 变更类型 old_line Integer 修改前行号 new_line Integer 修改后行号
  • URI POST /v2/repositories/{repository_id}/merge_requests/{merge_request_iid}/discussions/{discussion_id}/notes 表1 路径参数 参数 是否必选 参数类型 描述 repository_id 是 Integer 仓库短id 最小值:1 最大值:2147483647 merge_request_iid 是 Integer 合并请求iid 最小值:1 最大值:2147483647 discussion_id 是 String 评论id
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 error Error object 响应错误 result CommitStatistic object 代码增加和删除的行数 status String 响应状态 表5 Error 参数 参数类型 描述 code String 错误码 message String 错误信息 表6 CommitStatistic 参数 参数类型 描述 additions Integer 增加的行数 deletions Integer 删除的行数
  • URI GET /v3/repositories/{repository_id}/commit-lines 表1 路径参数 参数 是否必选 参数类型 描述 repository_id 是 Integer 仓库短id 表2 Query参数 参数 是否必选 参数类型 描述 ref_name 是 String 分支名称 begin_date 是 String 起始提交日期,格式为yyyy-MM-dd end_date 是 String 终止提交日期,格式为yyyy-MM-dd(begin_date和end_date时间间隔不超过60天)
  • 响应示例 状态码: 200 OK { "result" : { "name" : "master", "commit" : { "id" : "3b68902cf0eb7de3d5c8757e4a990bc3fe0af349", "short_id" : "3b68902c", "title" : "新建文件", "created_at" : "2022-03-08T03:14:39.000Z", "parent_ids" : [ "08618c900a4048aae7e4cd88913d3d521eae02eb" ], "message" : "新建文件", "author_name" : "repo", "committer_name" : "repo", "committed_date" : "2022-03-08T03:14:39.000Z" }, "protected" : true, "developers_can_push" : false, "developers_can_merge" : false, "master_can_push" : false, "master_can_merge" : false, "no_one_can_push" : true, "no_one_can_merge" : true, "in_an_opened_merge_request" : false }, "status" : "success" }
  • 响应参数 状态码: 200 表5 响应Body参数 参数 参数类型 描述 error Error object 响应错误 result AddProtectResponse object 响应结果 status String 响应状态 表6 Error 参数 参数类型 描述 code String 错误码 message String 错误信息 表7 AddProtectResponse 参数 参数类型 描述 name String 分支名称 commit CommitRepoV2 object 提交信息 protected Boolean 是否保护 developers_can_push Boolean 是否允许开发者提交 developers_can_merge Boolean 是否允许开发者合并 master_can_push Boolean 是否允许管理员提交 master_can_merge Boolean 是否允许管理员合并 no_one_can_push Boolean 没有人允许提交 no_one_can_merge Boolean 没有人允许合并 in_an_opened_merge_request Boolean 是否在一个打开的合并请求 表8 CommitRepoV2 参数 参数类型 描述 id String 提交对应的SHA id short_id String 提交对应的短SHA id created_at String 创建时间 title String 提交标题 parent_ids Array of strings 父提交id message String 提交信息 author_name String 作者 committer_name String 提交作者 committed_date String 提交时间
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 通过调用 IAM 服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 表3 请求Body参数 参数 是否必选 参数类型 描述 access_level 是 AddProtectAccessLevel object 新建保护分支权限 表4 AddProtectAccessLevel 参数 是否必选 参数类型 描述 push_access_level 是 Integer 提交权限 0:任何人不允许提交,30:开发者及管理员可提交,40:管理员可提交 枚举值: 0 30 40 merge_access_level 是 Integer 合并权限 0:任何人不允许合并,30:开发者及管理员可合并,40:管理员可合并,合并权限必须大于等于提交权限 枚举值: 0 30 40
  • 响应示例 状态码: 200 OK { "result" : { "iid" : 1, "approval_merge_request_approvers" : [ { "nick_name" : "emily", "name" : "emily", "id" : 7513, "state" : "optional", "username" : "0c1de3e61c80d56b1f7dc01164788784" }, { "nick_name" : "lmptest02", "name" : "lmptest02", "id" : 7745, "state" : "optional", "username" : "2ef8c2c835424e988ff33a8339ee1cb4" } ], "description" : "merge \"branch123\" into \"master\"\n新建文件 dsadsad11", "created_at" : "2021-12-08T16:34:49.000+08:00", "title" : "tesafrds.", "source_branch" : "branch123", "updated_at" : "2021-12-09T11:21:02.000+08:00", "id" : 6670, "state" : "opened", "closed_at" : "2021-12-08T16:34:50.000+08:00", "author" : { "name" : "repo", "id" : 6879, "state" : "active", "username" : "e0c068bf68c44bfab87b763ff85da277" }, "is_source_branch_exist" : true, "target_branch" : "master", "merge_status" : "unchecked", "merge_request_diff" : { "merge_request_id" : 6670, "head_commit_sha" : "715fc146292edc31a588fbc74349a2b8d18dbc27", "updated_at" : "2021-12-09T11:20:58.000+08:00", "start_commit_sha" : "02f0482056d3b949699eb69683914466c84529af", "created_at" : "2021-12-09T11:20:58.000+08:00", "base_commit_sha" : "6e90282f6334433a9fe3be809a7c1eed1afbf10b", "commits_count" : 2 }, "devcloud_source_branch" : "branch123", "merge_request_assignee_list" : [ { "name" : "六月飞雪", "id" : 6743, "state" : "active", "username" : "a618e34bd5704be3ae3395dfede06041" }, { "name" : "管理员总账户", "id" : 6747, "state" : "active", "username" : "42dd0277cfb048dea856e4ee352e937d" } ], "merged_at" : "2023-08-14T20:51:51.000+08:00", "merged_by" : { "id" : "9124,", "name" : "CodeHub_beta_dev", "username" : "c369c68f1ff84679b5a8ed904d8bff1c", "state" : "active", "avatar_url" : "", "web_url" : "https://devcloud.cn-north-7.ulanqab.huawei.com/c369c68f1ff84679b5a8ed904d8bff1c" }, "merge_request_related_work_items" : [ { "id" : 7343, "user_id" : "9124", "repo_id" : 2111746921, "merge_request_id" : 20637, "target_branch" : "master", "source_branch" : "test123", "merge_request_url" : "https://devcloud.cn-north-7.ulanqab.huawei.com/codehub/2111746921/18/mergedetail?source=test123&target=master", "merge_request_state" : "opened", "related_id" : "6437435", "related_title" : "msm-0115-1000", "related_url" : "https://devcloud.cn-north-7.ulanqab.huawei.com/projectman/scrum/e76c13e86364438d9183ca2f395371e1/task/detail/6437435", "result" : 1, "create_at" : "2023-09-18T20:29:59.000+08:00", "update_at" : "2023-09-18T20:29:59.000+08:00" } ] }, "status" : "success" }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 error Error object 响应错误 result MergeInfoResult object 响应结果 status String 响应状态 表4 Error 参数 参数类型 描述 code String 错误码 message String 错误信息 表5 MergeInfoResult 参数 参数类型 描述 approval_merge_request_approvers Array of ApprovalMergeRequestApproversItem objects 评审人 author Author object 作者 closed_at String 关闭时间 created_at String 创建时间 description String 合并请求描述 devcloud_source_branch String 源分支 id Double 合并请求id iid Double 当前仓库内合并请求序号 is_source_branch_exist Boolean 源分支是否存在 merge_request_assignee_list Array of MergeRequestAssigneeListItem objects 检视人 merge_request_diff MergeRequestDiff object 合并差异 merge_status String 是否可以被合并 source_branch String 源分支 state String 合并请求状态 target_branch String 目标分支 title String 标题 updated_at String 更新时间 merged_at String 合并时间 merged_by MergedByUser object 合并人 merge_request_related_work_items Array of MergeRequestRelatedWorkItem objects 关联工作项 表6 ApprovalMergeRequestApproversItem 参数 参数类型 描述 id Double 用户id name String 用户名 nick_name String 用户昵称 state String 用户状态 username String 用户iamId 表7 Author 参数 参数类型 描述 id Double 用户id name String 用户名 state String 用户状态 username String 用户iamId avatar_url String 头像url web_url String web url 表8 MergeRequestAssigneeListItem 参数 参数类型 描述 id Double 用户id name String 用户名 state String 用户状态 username String 用户iamId 表9 MergeRequestDiff 参数 参数类型 描述 id Double 合并请求差异id state String 合并请求状态 merge_request_id Double 合并请求id created_at String 创建时间 updated_at String 更新时间 base_commit_sha String base提交 real_size Double 实际大小 head_commit_sha String head提交 start_commit_sha String start提交 commits_count Double 提交数 external_diff String 外部差异 external_diff_store Double 外部存储差异 stored_externally Boolean 是否存在外部存储 added_lines Double 新增行数 removed_lines Double 删除行数 表10 MergedByUser 参数 参数类型 描述 id Double 用户id name String 用户名 state String 用户状态 username String 用户iamId avatar_url String 头像url web_url String 主页url 表11 MergeRequestRelatedWorkItem 参数 参数类型 描述 id Double id user_id String 用户id repo_id Double 仓库id merge_request_id Double 合并请求id target_branch String 目标分支 source_branch String 源分支 merge_request_title String 合并请求标题 merge_request_url String 合并请求url merge_request_state String 合并请求状态 related_id String 关联工作项id related_title String 关联工作项标题 related_url String 关联工作项url result Double 查询结果 create_at String 创建时间 update_at String 更新时间
  • V2Project 接口 说明 查询用户的所有仓库 获取用户的所有仓库信息。 创建项目、仓库 创建项目后,创建仓库组由后台生成方式 传入参数:仓库名、模板id、是否导入项目成员、归属项目。 创建项目并fork仓库 创建仓库后fork仓库 传入参数:仓库名、是否导入项目成员、归属项目。 查询项目下的所有仓库 获取仓库列表,模糊查询支持范围,如果未传入project uuid,则支持按仓库名或项目名模糊查询,否则,只按仓库名模糊匹配。 分支关联工作项 分支关联工作项。
  • Repository 接口 说明 获取分支目录下的文件 获取分支目录下的文件。 获取仓库统计数据 获取仓库统计数据。 获取一个仓库下特定分支的图片文件 获取一个仓库下特定分支的图片文件。 修改被流水线引用的仓库状态 修改被流水线引用的仓库状态。 判断用户是否有仓库的管理员权限 判断用户是否有仓库的管理员权限。 设置仓库是公开状态还是私有状态 设置仓库是公开状态还是私有状态。 获取一个仓库下特定分支指定文件内容 获取一个仓库下特定分支指定文件内容。 获取公开示例模板列表 获取公开示例模板列表。 创建仓库 用指定的名称在指定项目上创建仓库。传入参数:仓库名、模板id、是否导入项目成员、归属项目。 根据仓库名组名获取仓库短id,用以拼接与commitid对应提交详情页面url 获取仓库短id,用于获取仓库详情页面url。 根据组名和仓库名查询某仓库某分支对应的提交 根据仓库组名、仓库名和分支获取提交列表。 查询某仓库对应的分支 根据仓库id获取指定仓库的分支列表。 根据仓库id查询仓库某分支对应的提交,提供更多可选参数 根据仓库id查询仓库某分支对应的提交。 添加部署密钥 添加部署密钥。 删除仓库部署密钥 删除仓库部署密钥。 获取仓库上一次的提交统计信息 获取仓库上一次的提交统计信息。 仓库统计 根据仓库短id,查询仓库的代码提交记录统计。 删除仓库 根据仓库32位uuid删除指定的仓库。 查看仓库的创建状态 获取仓库状态。 查询某仓库的标签列表 查询指定仓库对应的分支。 新建标签 新建标签。 查询某个仓库的详细信息 根据仓库UUID获取仓库信息仓库信息。返回 包含id,name,组名,仓库访问URL。 获取代码提交行数 获取指定日期内代码仓指定分支的代码提交行数。 下载仓库 按照指定格式下载仓库。 新建保护分支 新建保护分支。 获取仓库分支列表 获取仓库分支列表。 获取仓库合并请求列表 获取仓库合并请求列表。 获取仓库合并请求详情 获取仓库合并请求详情。
  • Commit 接口 说明 查询某个仓库的提交信息 根据仓库短ID获取提交信息,支持根据文件路径,查询这个路径下所有的commits列表。 创建提交 能够一次提交位于不同目录的多个文件,目录不存在时,能自动创建目录。支持强制覆盖选项,当选择强制覆盖标志为true时,忽略冲突,强制提交。 查询某个仓库的特定提交信息 获取由commit id或分支或标记的名称标识的特定提交。 查询某个仓库的提交差异信息 根据commit id查询提交差异信息。
  • 响应示例 状态码: 200 OK { "result" : { "total" : 14, "repositories" : { "repository_uuid" : "d0457f74cc5b43d989ded7248f71b4e5", "repository_id" : 468480, "repository_name" : "CreatRepository_2qD5i", "ssh_url" : "git@repo.alpha.devcloud.inhuawei.com:Demo00228/CreatRepository_2qD5i.git", "https_url" : "https://repo.alpha.devcloud.inhuawei.com/Demo00228/CreatRepository_2qD5i.git", "group_name" : "Demo00228", "web_url" : "https://alpha.devcloud.inhuawei.com/repo/468480/home", "visibility_level" : 0, "created_at" : "2019-10-15 09:40:26", "updated_at" : "2019-10-15 09:40:26", "repository_size" : "0.06M", "lfs_size" : "0.00M", "creator_name" : "repo", "domain_name" : "repo", "star" : false, "status" : 0, "is_owner" : 1, "iam_user_uuid" : "a618e34bd5704be3ae3395dfede06041", "project_uuid" : "4838955a48e2492bbe44b31bc4c272f6", "project_is_deleted" : "false", "userRole" : null } }, "status" : "success" }
  • URI GET /v2/projects/{project_uuid}/repositories 表1 路径参数 参数 是否必选 参数类型 描述 project_uuid 是 String 项目ID,获取方式请参见获取项目ID。 表2 Query参数 参数 是否必选 参数类型 描述 page_index 否 Integer 分页索引,从1开始计数 page_size 否 Integer 每页条目数 search 否 String 搜索关键字
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 error Error object 响应错误 result RepoListInfoV2 object 响应结果 status String 响应状态 表5 Error 参数 参数类型 描述 code String 错误码 message String 错误信息 表6 RepoListInfoV2 参数 参数类型 描述 repositories Array of RepoInfoV2 objects 仓库列表 total Integer 仓库总数 表7 RepoInfoV2 参数 参数类型 描述 created_at String 创建时间 creator_name String 创建者的用户名,在用户是租户的情况下,用户名和租户名相等 domain_name String 创建者的租户名 group_name String 仓库组名(克隆地址中域名后面仓库名前的一段 示例:git@repo.alpha.devcloud.inhuawei.com:Demo00228/testword.git 组名:Demo00228 ) https_url String 使用 https 克隆仓库时所使用的 url iam_user_uuid String 用户的 iam user uuid is_owner Integer 当前用户是否是仓库的创建者,1:是,0:不是 lfs_size String 仓库 LFS 容量,单位为M,大于 1024M 则单位为 G project_is_deleted String 项目是否被删除 project_uuid String 项目ID,获取方式请参见获取项目ID。 repository_id Integer 仓库主键id repository_name String 仓库名 repository_size String 仓库总容量 = 仓库 LFS 容量 + git 库容量,单位为M,大于 1024M 则单位为 G repository_uuid String 仓库uuid(由CreateRepository接口返回) ssh_url String 使用 ssh 方式克隆仓库时所使用的 url star Boolean 当前用户是否收藏该仓库 status Integer 仓库状态, 0:仓库正常创建成功 1:仓库创建中 2:创建失败 3:仓库冻结 4:仓库已经关闭 updated_at String 更新时间 userRole Integer 用户在仓库中的权限:20:只读成员 30:普通成员 40:管理员 visibility_level Integer 是否可见:0私有仓库,20公有仓库 web_url String web url 路径,访问它将跳转至仓库详情页
共100000条