DevOps DevOps
产品简介
产品安装
快速入门
使用指南
开发指南
FAQ
6.7更新说明
  • 前端开发规范
  • 文件夹/文件命名规范
  • Vue 组件命名规范
  • 路由命名规范
  • 组件模板规范
  • 验证组件的 props
  • Javascript 规范
  • 后端开发规范
  • 总体命名规范
  • Restful命名规范
  • Java开发规范
  • 数据库规范

# 前端开发规范

# 文件夹/文件命名规范

文件名必须用 蛇形命名法,例如:user-list.vue

相关模块文件必须放在同一目录下,目录入口文件必须命名为 index.vue

# Vue 组件命名规范

组件的命名需遵从以下原则:

  • 有意义的 : 不过于具体,也不过于抽象
  • 简短 : 2 到 3 个单词
  • 具有可读性 : 以便于沟通交流

同时还需要注意:

  • 必须符合自定义元素规范 : 使用连字符分隔单词,切勿使用保留字。
  • app-前缀作为命名空间 : 如果非常通用的话可使用一个单词来命名,这样可以方便于其它项目里复用。

# 路由命名规范

路由 path 必须使用蛇形命名法,例如 /user/user-index,必须符合 restfull 定义规范

路由跳转必须使用 name 定位, 禁止直接使用 path 定位,

# 组件模板规范

模板中禁止出现复杂的三元表达式和计算式,应用 computed、method 代替。

模板中禁止出现行内样式

# 验证组件的 props

props 应尽量使用原始数据类型,并强制要求增加数据类型限制。

# Javascript 规范

Javascript 代码 统一采用 ES6 规范编写.

如无特殊需要,function() 一律用箭头函数代替

禁止出现使用 "+" 号连接动态字符串,应使用魔术字符串代替

处理异步代码时,统一使用 async await 方式编写,禁止使用 *, yield

必须符合项目定义的 ESLint 标准,代码必须统一格式化


# 后端开发规范

# 总体命名规范

  1. 命名即设计。好的代码,有意义的名字,一看就懂。
  2. 项目名、包名、目录名,以模块为基准;类名、方法名、流程名、rest 资源名以模型为基准。
  3. 表名不要超过30个字符,所以可以用缩写。其他不建议用缩写。rest 里面要用-分隔,其他命名要驼峰式。
  4. 除了常量、枚举类外,不建议大写。

# Restful命名规范

  • 规范

    1. 统一前缀,一般是所有path前缀为/api;
    2. 统一前缀后面一般是系统名(或者模块名),然后是资源名
    3. 资源名:
      1. 使用名词,而不是动词
      2. 使用复数,而不是单数
      3. 资源名必须小写,或者用短横线“-”连接,如tree-node
    4. HTTP Method
      1. GET:从服务器中查询一个或多个资源
      2. DELETE:在服务器中删除资源
      3. PUT:在服务器中更新资源
      4. POST:在服务器新建一个资源
      5. 其他方法一般不用
    5. @PathVariable还是@RequestParam:一般来讲,通过资源唯一标识查询单个资源实体时,将唯一标识放在path上,即用@PathVariable。而通过资源其他属性来做过滤查询的话,则用@RequestParam。
    6. 资源操作:如果资源需要做一些具体的操作可以用actions作为path(尽量避免用action)
    • RestEasy改造成Spring Restful 请参考【FAQ】-【RESTEasy更新为Spring RESTful说明】
  • 示例(restful 和 swagger)


@RequestMapping(value = "/api/ci/builddefs", consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE})
@Api(tags="IBuildDefinitionController", description = "构建定义管理对外接口")
public interface IBuildDefinitionController {
	
	/**
	 * 获取构建定义
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @return 构建定义
	 * @throws Exception
	 */
	@GetMapping(value = "/{buildDefinitionId}")
	@ApiOperation("获取构建定义")
	BuildDefinition getBuildDefinition(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
	
	/**
	 * 获取构建定义详细信息
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @return 构建定义详细信息
	 * @throws Exception
	 */
	@GetMapping(value = "/{buildDefinitionId}/details")
	@ApiOperation("获取构建定义详细信息")
	BuildDefinition getBuildDefinitionDetails(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
	
	/**
	 * 查询项目所有的构建定义
	 * 
	 * @param projectId 项目ID
	 * @param projectCode 项目code
	 * @param definitionName 模糊匹配构建定义名称
	 * @param includeClosed 包含已关闭的构建定义
	 * @param labelName 标签名称
	 * @return 构建定义列表
	 * @throws Exception
	 */
	@GetMapping
	@ApiOperation("查询项目所有的构建定义")
	List<BuildDefinition> queryBuildDefinitions(@RequestParam(name = "projectId", required = false) @ApiParam("项目ID") String projectId,
			@RequestParam(name = "projectCode", required = false) @ApiParam("项目Code") String projectCode,
			@RequestParam(name = "definitionName", required = false) @ApiParam("模糊匹配构建定义名称") String definitionName,
			@RequestParam(name = "includeClosed", required = false) @ApiParam("包含已关闭的") String includeClosed, 
			@RequestParam(name = "labelName", required = false) @ApiParam("标签名称") String labelName) throws Exception;
	
	@GetMapping(value = "/actions/query-with-page")
	@ApiOperation("分页查询项目所有的构建定义")
	default PageResultList<BuildDefinition> queryBuildDefinitionsWithPage(
			@RequestParam(name = "projectId", required = false) @ApiParam("项目ID") String projectId,
			@RequestParam(name = "projectCode", required = false) @ApiParam("项目Code") String projectCode,
			@RequestParam(name = "definitionName", required = false) @ApiParam("模糊匹配构建定义名称") String definitionName,
			@RequestParam(name = "includeClosed", required = false) @ApiParam("包含已关闭的") String includeClosed, 
			@RequestParam(name = "labelName", required = false) @ApiParam("标签名称") String labelName,
			@RequestParam(name = "pageIndex", required = false, defaultValue = "0") @ApiParam("第几页")int pageIndex, 
			@RequestParam(name = "pageSize", required = false, defaultValue = "0") @ApiParam("每页的数量")int pageSize) throws Exception {
		return new PageResultList<>(queryBuildDefinitions(projectId, projectCode, definitionName, includeClosed, labelName), pageIndex, pageSize);
	}
	
	/**
	 * 根据ID列表查询项目所有的构建定义
	 * 
	 * @param buildDefinitionIds 构建IDs
	 * @return 构建定义列表
	 * @throws Exception
	 */
	@PostMapping(value = "/actions/query-by-ids")
	@ApiOperation("根据ID列表查询项目所有的构建定义")
	List<BuildDefinition> queryBuildDefinitionsByIds(@MultiRequestBody @ApiParam("构建定义ID列表") String[] buildDefinitionIds) throws Exception;
	
	/**
	 * 创建一个构建定义
	 * 
	 * @param buildDefinition 构建定义
	 * @param componentIds 组件IDs
	 * @return 构建定义
	 * @throws Exception
	 */
	@PostMapping
	@ApiOperation("创建一个构建定义")
	@Permission("project_build_definition_create")
	BuildDefinition createBuildDefinition(@MultiRequestBody @ApiParam("构建定义") BuildDefinition buildDefinition,
			@MultiRequestBody @ApiParam("组件ID") String componentIds) throws Exception;
	
	/**
	 * 克隆一个构建定义
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @param buildDefinitionName 构建定义名称
	 * @param isDisable 是否是禁用,否则是删除任务ID列表
	 * @param disableOrRemoveStageIds 禁用或者删除任务ID列表
	 * @param buildParams 构建参数
	 * @return 构建定义
	 * @throws Exception
	 */
	@PostMapping(value = "/{buildDefinitionId}/clone")
	@ApiOperation("克隆一个构建定义")
	@Permission("project_build_definition_create")
	BuildDefinition cloneBuildDefinition(
			@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId,
			@RequestParam(name = "buildDefinitionName", required = false) @ApiParam("构建定义名称") String buildDefinitionName,
			@PathVariable(name = "isDisable", required = false) @ApiParam("是否是禁用") boolean isDisable,
			@RequestParam(name = "disableOrRemoveStageIds", required = false) @ApiParam("禁用或者删除任务ID列表") String[] disableOrRemoveStageIds,
			@MultiRequestBody @ApiParam("构建参数") Map<String, String> buildParams,
			@MultiRequestBody @ApiParam("触发规则") List<Map<String, Object>> triggers) throws Exception;
	
	/**
	 * 批量克隆构建定义
	 * 
	 * @param buildDefinitionIds 构建定义ID数组,或者逗号分隔皆可
	 * @param buildDefinitionNamePrefix 构建定义名称前缀
	 * @param labelNames 标签名称
	 * @return 构建定义
	 * @throws Exception
	 */
	@PostMapping(value = "/actions/batch-clone")
	@ApiOperation("批量克隆构建定义")
	@Permission("project_build_definition_create")
	List<BuildDefinition> cloneBuildDefinitions(@MultiRequestBody @ApiParam("构建定义ID数组,或者逗号分隔皆可") Object buildDefinitionIds,
			@MultiRequestBody @ApiParam("构建定义名称前缀") String buildDefinitionNamePrefix,
			@MultiRequestBody @ApiParam("标签") String labelNames) throws Exception;
	
	/**
	 * 修改构建定义
	 * 
	 * @param buildDefinition 构建定义
	 * @param componentIds 组件IDs
	 * @return 构建定义
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}")
	@ApiOperation("修改构建定义")
	@Permission("project_build_definition_edit")
	BuildDefinition modifyBuildDefinition(@MultiRequestBody @ApiParam("构建定义") BuildDefinition buildDefinition,
			@MultiRequestBody @ApiParam("组件ID") String componentIds) throws Exception;
	
	/**
	 * 根据模板修改构建定义
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @param templateId 模板ID
	 * @param reservedOldParams 是否保留原来的参数
	 * @return 构建定义
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}/by-template")
	@ApiOperation("根据模板修改构建定义")
	@Permission("project_build_definition_template_import")
	BuildDefinition modifyBuildDefinitionByTemplate(
			@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId,
			@RequestParam(name = "templateId", required = false) @ApiParam("模板ID") String templateId, 
			@RequestParam(name = "reservedOldParams", required = false) @ApiParam("是否保留原来的参数") String reservedOldParams,
			@MultiRequestBody @ApiParam("需要强制替换的参数名称列表,多个逗号分割") String forceReplaceParamNames) throws Exception;
	
	/**
	 * 修改构建定义的默认参数值
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @param buildParams 构建参数
	 * @return 构建定义
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}/build-params")
	@ApiOperation("修改构建定义的默认参数值")
	@Permission("project_build_definition_edit")
	BuildDefinition modifyBuildDefinitionParams(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId,
			@MultiRequestBody @ApiParam("构建参数") Map<String, String> buildParams) throws Exception;
	
	/**
	 * 修改构建定义的名称
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @param definitionName 构建名称
	 * @return 构建定义
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}/actions/modify-name")
	@ApiOperation("修改构建定义的名称")
	@Permission("project_build_definition_edit")
	BuildDefinition modifyBuildDefinitionName(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId,
			@MultiRequestBody @ApiParam("构建名称") String definitionName) throws Exception;
	
	/**
	 * 批量修改构建定义的默认参数值
	 * 
	 * @param buildDefinitionIds 构建定义ID数组,或者逗号分隔皆可
	 * @param buildParams 构建参数
	 * @return 数量
	 * @throws Exception
	 */
	@PutMapping(value = "/actions/batch-build-params")
	@ApiOperation("批量修改构建定义的默认参数值")
	@Permission("project_build_definition_edit")
	int modifyBuildDefinitionsParams(@MultiRequestBody @ApiParam("构建定义ID数组,或者逗号分隔皆可") Object buildDefinitionIds,
			@MultiRequestBody @ApiParam("构建定义名称被替换的段") String nameSegment,
			@MultiRequestBody @ApiParam("构建定义新名称的段") String newNameSegment,
			@MultiRequestBody @ApiParam("构建参数") Map<String, String> buildParams,
			@MultiRequestBody @ApiParam("标签") String labelNames) throws Exception;
	
	/**
	 * 打开构建定义
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @return 构建定义
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}/actions/open")
	@ApiOperation("打开构建定义")
	@Permission("project_build_definition_open")
	BuildDefinition openBuildDefinition(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
	
	/**
	 * 批量打开构建定义
	 * 
	 * @param buildDefinitionIds 构建定义ID数组,或者逗号分隔皆可
	 * @return 数量
	 * @throws Exception
	 */
	@PutMapping(value = "/actions/batch-open")
	@ApiOperation("批量打开构建定义")
	@Permission("project_build_definition_open")
	int openBuildDefinitions(@MultiRequestBody @ApiParam("构建定义ID数组,或者逗号分隔皆可") Object buildDefinitionIds) throws Exception;
	
	/**
	 * 关闭构建定义
	 * 
	 * @param buildDefinitionId 构建定义ID,或者逗号分隔皆可
	 * @return 构建定义
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}/actions/close")
	@ApiOperation("关闭构建定义")
	@Permission("project_build_definition_close")
	BuildDefinition closeBuildDefinition(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
	
	/**
	 * 批量关闭构建定义
	 * 
	 * @param buildDefinitionIds 构建定义ID数组
	 * @return 数量
	 * @throws Exception
	 */
	@PutMapping(value = "/actions/batch-close")
	@ApiOperation("批量关闭构建定义")
	@Permission("project_build_definition_close")
	int closeBuildDefinitions(@MultiRequestBody @ApiParam("构建定义ID数组,或者逗号分隔皆可") Object buildDefinitionIds) throws Exception;
	
	/**
	 * 打开构建定义自动触发
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @return 构建定义
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}/actions/open-auto-trigger")
	@ApiOperation("打开构建定义")
	@Permission("project_build_definition_open")
	BuildDefinition openBuildDefinitionAutoTrigger(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
	
	/**
	 * 批量打开构建定义自动触发
	 * 
	 * @param buildDefinitionIds 构建定义ID数组,或者逗号分隔皆可
	 * @return 数量
	 * @throws Exception
	 */
	@PutMapping(value = "/actions/batch-open-auto-trigger")
	@ApiOperation("批量打开构建定义")
	@Permission("project_build_definition_open")
	int openBuildDefinitionAutoTriggers(@MultiRequestBody @ApiParam("构建定义ID数组,或者逗号分隔皆可") Object buildDefinitionIds) throws Exception;
	
	/**
	 * 关闭构建定义自动触发
	 * 
	 * @param buildDefinitionId 构建定义ID,或者逗号分隔皆可
	 * @return 构建定义
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}/actions/close-auto-trigger")
	@ApiOperation("关闭构建定义")
	@Permission("project_build_definition_close")
	BuildDefinition closeBuildDefinitionAutoTrigger(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
	
	/**
	 * 批量关闭构建定义自动触发
	 * 
	 * @param buildDefinitionIds 构建定义ID数组
	 * @return 数量
	 * @throws Exception
	 */
	@PutMapping(value = "/actions/batch-close-auto-trigger")
	@ApiOperation("批量关闭构建定义")
	@Permission("project_build_definition_close")
	int closeBuildDefinitionAutoTriggers(@MultiRequestBody @ApiParam("构建定义ID数组,或者逗号分隔皆可") Object buildDefinitionIds) throws Exception;

	
	/**
	 * 删除构建定义
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @return 构建定义
	 * @throws Exception
	 */
	@DeleteMapping(value = "/{buildDefinitionId}")
	@ApiOperation("删除构建定义")
	@Permission("project_build_definition_remove")
	BuildDefinition removeBuildDefinition(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
	
	/**
	 * 批量删除构建定义
	 * 
	 * @param buildDefinitionIds 构建定义ID数组
	 * @return 构建定义
	 * @throws Exception
	 */
	@DeleteMapping(value = "/actions/batch-remove")
	@ApiOperation("批量删除构建定义")
	@Permission("project_build_definition_remove")
	int removeBuildDefinitions(@MultiRequestBody @ApiParam("构建定义ID数组,或者逗号分隔皆可") Object buildDefinitionIds) throws Exception;
	
	/**
	 * 执行构建
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @param disableStageIds 禁用任务ID列表
	 * @param buildParams 构建参数
	 * @param buildTag 构建标签
	 * @param executeTime 指定的执行时间(延迟构建)
	 * @return 构建实例
	 * @throws Exception
	 */
	@PostMapping(value = "/{buildDefinitionId}/actions/execute")
	@ApiOperation("执行构建")
	@Permission("project_build_definition_execute")
	BuildInstance executeBuildDefinition(
			@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId,
			@RequestParam(name = "disableStageIds", required = false) @ApiParam("禁用任务ID列表") String[] disableStageIds,
			@MultiRequestBody @ApiParam("构建参数") Map<String, String> buildParams,
			@MultiRequestBody @ApiParam("配置组信息") Map<String, String> configurationGroupInfo,
			@MultiRequestBody @ApiParam("全局参数") Map<String, Object> globalData,
			@RequestParam(name = "buildTag", required = false) @ApiParam("构建标签") String buildTag,
			@RequestParam(name = "executeTime", required = false) @ApiParam("指定的执行时间(延迟构建):yyyy-MM-dd HH:mm:ss") String executeTime) throws Exception;
	
    /**
     * 执行构建 (通过项目编码和构建定义名称)
     * @param projectCode 项目编码
     * @param buildDefinitionName 构建定义名称
     * @param buildParams 构建参数
	 * @param executeTime 指定的执行时间(延迟构建)
     * @throws Exception
     */
	@PostMapping(value = "/actions/execute")
	@ApiOperation("执行构建")
	@Permission("project_build_definition_execute")
	BuildInstance executeBuildDefinitionByName(
			 @RequestParam(name = "projectCode", required = false) @ApiParam("项目编码") String projectCode,
			 @RequestParam(name = "buildDefinitionName", required = false) @ApiParam("构建定义名称") String buildDefinitionName,
			 @MultiRequestBody @ApiParam("构建参数") Map<String, String> buildParams,
			 @MultiRequestBody @ApiParam("配置组信息") Map<String, String> configurationGroupInfo,
			 @MultiRequestBody @ApiParam("全局参数") Map<String, Object> globalData,
			 @RequestParam(name = "executeTime", required = false) @ApiParam("指定的执行时间(延迟构建):yyyy-MM-dd HH:mm:ss") String executeTime) throws Exception;
	
	/**
	 * 取消延迟构建
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}/actions/cancel-delay-build")
	@ApiOperation("取消延迟构建")
	@Permission("project_build_instance_cancel")
	void cancelDelayBuild(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
	
	/**
	 * 取消构建
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @param buildInstanceId 构建实例ID
	 * @throws Exception
	 */
	@PutMapping(value = "/{buildDefinitionId}/instances/{buildInstanceId}/actions/cancel")
	@ApiOperation("取消构建")
	@Permission("project_build_instance_cancel")
	void cancelBuildDefinition(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId, 
			@PathVariable(name = "buildInstanceId", required = false) @ApiParam("构建实例ID") String buildInstanceId) throws Exception;
	
	/**
	 * 分页查询构建实例历史
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @param cascadeStageInstance 是否包含流水线任务实例信息
	 * @param pageIndex 起始页数
	 * @param pageSize 每页大小
	 * @return 构建实例历史列表
	 * @throws Exception
	 */
	@GetMapping(value = "/{buildDefinitionId}/instances")
	@ApiOperation("查询构建实例历史")
	PageResultList<BuildInstance> queryBuildInstances(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId, 
			@RequestParam(name = "cascadeStageInstance", required = false, defaultValue = "false") @ApiParam("是否包含流水线任务实例信息") boolean cascadeStageInstance,
			@RequestParam(name = "pageIndex", required = false, defaultValue = "0") @ApiParam("起始页数") int pageIndex, 
			@RequestParam(name = "pageSize", required = false, defaultValue = "0") @ApiParam("每页大小") int pageSize) throws Exception;
	
	/**
	 * 查询构建实例
	 * 
	 * @param buildInstanceIds 构建实例Id集合
	 * @return 构建实例列表
	 * @throws Exception
	 */
	@PostMapping(value = "/instances/actions/query-by-instance-ids")
	@ApiOperation("查询构建实例")
	List<BuildInstance> queryBuildInstancesByInstanceId(@MultiRequestBody @ApiParam("构建实例Id集合") Object buildInstanceIds,
			@RequestParam(name = "cascadeStageInstance", required = false) @ApiParam("是否包含流水线任务实例信息") boolean cascadeStageInstance) throws Exception;
	
	/**
	 * 获取构建实例
	 * 
	 * @param buildInstanceId 构建实例ID
	 * @return 构建实例
	 * @throws Exception
	 */
	@GetMapping(value = "/{buildDefinitionId}/instances/{buildInstanceId}")
	@ApiOperation("获取构建实例")
	BuildInstance getBuildInstance(@PathVariable(name = "buildInstanceId", required = false) @ApiParam("构建实例ID") String buildInstanceId, 
			@RequestParam(name = "retainDefinitionDetails", required = false) @ApiParam("保留定义详情") boolean retainDefinitionDetails) throws Exception;
	
	/**
	 * 获取最新构建实例
	 * 
	 * @param buildInstanceId 构建实例ID
	 * @return 构建实例
	 * @throws Exception
	 */
	@GetMapping(value = "/{buildDefinitionId}/actions/latest-instance")
	@ApiOperation("获取最新构建实例")
	BuildInstance getLatestBuildInstance(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId, 
			@RequestParam(name = "retainDefinitionDetails", required = false, defaultValue = "false") @ApiParam("保留定义详情") boolean retainDefinitionDetails) throws Exception;
	
	/**
	 * 获取构建实例(通过projectCode、构建定义名称以及buildNumber查询单个构建实例详情)
	 * 
	 * @param projectCode 项目Code
	 * @param definitionName 构建定义名称
	 * @param buildNumber 构建号
	 * @param pageIndex 起始页数
	 * @param pageSize 每页大小
	 * @return 构建实例
	 * @throws Exception
	 */
	@GetMapping(value = "/actions/query-instances")
	@ApiOperation("获取构建实例")
	PageResultList<BuildInstance> queryBuildInstancesByCode(
			@RequestParam(name = "projectCode", required = false) @ApiParam("项目Code") String projectCode,
			@RequestParam(name = "definitionName", required = false) @ApiParam("构建定义名称") String definitionName,
			@RequestParam(name = "buildNumber", required = false) @ApiParam("构建号") String buildNumber,
			@RequestParam(name = "pageIndex", required = false, defaultValue = "0") @ApiParam("起始页数")int pageIndex, 
			@RequestParam(name = "pageSize", required = false, defaultValue = "0") @ApiParam("每页大小")int pageSize) throws Exception;	
	
	/**
	 * 获取构建实例的全局数据区数据
	 * 
	 * @param buildInstanceId 构建实例ID
	 * @return 构建实例的全局数据区数据
	 * @throws Exception
	 */
	@GetMapping(value = "/{buildDefinitionId}/instances/{buildInstanceId}/actions/global-data")
	@ApiOperation("获取构建实例的全局数据区数据")
	Map<String, Object> getBuildInstanceGlobalData(@PathVariable(name = "buildInstanceId", required = false) @ApiParam("构建实例ID") String buildInstanceId) throws Exception;
	
	/**
	 * 重新执行构建
	 * 
	 * @param buildInstanceId 构建实例ID
	 * @param disableStageIds 禁用任务ID列表
	 * @param buildParams 构建参数
	 * @return 构建实例
	 * @throws Exception
	 */
	@PostMapping(value = "/{buildDefinitionId}/instances/{buildInstanceId}/actions/reexecute")
	@ApiOperation("重新执行构建")
	@Permission("project_build_definition_execute")
	BuildInstance reexecuteBuildDefinition(@PathVariable(name = "buildInstanceId", required = false) @ApiParam("构建实例ID") String buildInstanceId,
			@MultiRequestBody @ApiParam("禁用任务ID列表") String disableStageIds,
			@MultiRequestBody @ApiParam("构建参数") Map<String, String> buildParams) throws Exception;
	
	/**
	 * 删除构建实例
	 * 
	 * @param buildInstanceId 构建实例ID
	 * @return 构建实例
	 * @throws Exception
	 */
	@DeleteMapping(value = "/{buildDefinitionId}/instances/{buildInstanceId}")
	@ApiOperation("删除构建实例")
	@Permission("project_build_instance_remove")
	BuildInstance removeBuildInstance(@PathVariable(name = "buildInstanceId", required = false) @ApiParam("构建实例ID") String buildInstanceId) throws Exception;
	
	/**
	 * 清空构建历史
	 * 
	 * @param buildDefinitionId 构建定义ID
	 * @return 
	 * @throws Exception
	 */
	@DeleteMapping(value = "/{buildDefinitionId}/instances")
	@ApiOperation("清空构建历史")
	@Permission("project_build_instance_clear")
	void clearBuildInstances(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
	
	/**
	 * 获取构建控制台日志
	 * 
	 * @param buildInstanceId 构建实例ID
	 * @param start 起始行数
	 * @return 构建控制台日志
	 * @throws Exception
	 */
	@GetMapping(value = "/{buildDefinitionId}/instances/{buildInstanceId}/consolelogs")
	@ApiOperation("获取构建控制台日志")
	BuildLog getBuildLog(@PathVariable(name = "buildInstanceId", required = false) @ApiParam("构建实例ID") String buildInstanceId,
			@RequestParam(name = "start", required = false, defaultValue = "0") @ApiParam("起始行数") int start, 
			@RequestParam(name = "onlyKeyLog", required = false, defaultValue = "false") @ApiParam("只包含关键日志") boolean onlyKeyLog) throws Exception;
	
	/**
	 * 获取某一个构建任务日志
	 * 
	 * @param buildInstanceId 构建实例ID
	 * @param buildStageId 构建任务ID
	 * @param start 起始行数
	 * @return 构建任务日志
	 * @throws Exception
	 */
	@GetMapping(value = "/{buildDefinitionId}/instances/{buildInstanceId}/stagelogs")
	@ApiOperation("获取某一个构建任务日志")
	BuildLog getStageLog(@PathVariable(name = "buildInstanceId", required = false) @ApiParam("构建实例ID") String buildInstanceId,
			@RequestParam(name = "buildStageId", required = false) @ApiParam("构建任务ID") String buildStageId,
			@RequestParam(name = "start", required = false, defaultValue = "0") @ApiParam("起始行数") int start, 
			@RequestParam(name = "onlyKeyLog", required = false, defaultValue = "false") @ApiParam("只包含关键日志") boolean onlyKeyLog) throws Exception;
	
	/**
	 * 根据构建定义ID和项目ID查询组件
	 * @param buildDefinitionId
	 * @param projectId
	 * @return
	 * @throws Exception
	 */
	@GetMapping(value = "/{buildDefinitionId}/components")
	@ApiOperation("根据构建定义ID和项目ID查询组件")
	PageResultList<Component> listComponentsByBuildDefinitionId(@PathVariable(name = "buildDefinitionId", required = false) @ApiParam("构建定义ID") String buildDefinitionId, 
			@RequestParam(name = "projectId", required = false) @ApiParam("项目ID") String projectId) throws Exception;
	
	/**
	 * 查询组件关联的所有的构建定义 组件为空时查项目下所有构建定义
	 *
	 * @param projectId 项目ID
	 * @param componentId 组件ID
	 * @param includeClosed 包含已关闭的构建定义
	 * @return 构建定义列表
	 * @throws Exception
	 */
	@GetMapping(value = "/by-component")
	@ApiOperation("查询组件关联的所有的构建定义")
	List<BuildDefinition> queryBuildDefinitionsByComponentId(
			@RequestParam(name = "projectId", required = false) @ApiParam("项目ID") String projectId,
			@RequestParam(name = "componentId", required = false) @ApiParam("组件ID") String componentId,
			@RequestParam(name = "includeClosed", required = false) @ApiParam("包含已关闭的") String includeClosed) throws Exception;
	/**
	 * 查询应用关联的所有的构建定义 应用为空
	 * @param projectId
	 * 				项目ID
	 * @param appId
	 * 				应用ID
	 * @param includeClosed
	 * 				包含已关闭的构建定义
	 * @return 构建定义列表
	 * @throws Exception
	 */
	@GetMapping(value = "/query-by-app")
	@ApiOperation("查询应用关联的所有的构建定义")
	List<BuildDefinition> queryBuildDefinitionsByAppId(
			 @RequestParam(name = "projectId", required = false) @ApiParam("项目ID") String projectId,
			 @RequestParam(name = "appId", required = false) @ApiParam("应用ID") String appId,
			 @RequestParam(name = "includeClosed", required = false) @ApiParam("包含已关闭的") String includeClosed) throws Exception;
}

# Java开发规范

  1. 代码不只是用于机器执行,更重要的是要给人看的。
  2. 命名规范
    1. 所有命名一定要通俗易懂,宁可长一点。
    2. 项目命名规范:一般是系统名-子系统名[-模块名]
    3. 包命名规范:固定前缀. 系统名 . 子系统名 . [ 模块名 ] .[ 子模块名 ].[代码类型]
      1. 固定前缀: 比如:com.gdrcu.itamp
      2. 代码类型:
        • api:api接口
        • spi:spi接口
        • impl:实现接口
        • model:模型
        • exception:异常定义
        • constant:常量定义
        • util:工具类
        • extension:扩展
        • controller:rest对外接口及实现
        • service:业务逻辑接口及实现
        • dao:数据库模型操作
    4. 类命名规范:有意义的英文名词,接口一般以I为前缀,工具类一般以Util为后缀
    5. 方法命名规范:动宾结构。
      1. controller/service前缀: get(query)/create/remove/modify, get返回的是单个实体,query返回的是List或者Array;如果是其他业务,可以是使用其他更有意义的名字;
      2. dao前缀: get(query)/insert/delete/update, get返回的是单个实体,query返回的是List或者Array
      3. controller:方法不允许重名
  3. 代码文件规范
    1. 全部文件必须使用UTF-8编码
    2. 文件名不允许使用中文字符
    3. 文件名不允许使用空格,目录不允许大写
    4. 代码一定要统一格式化,要注意可阅读性
  4. 注释规范
    1. Class必须有注释说明(JavaDoc)
    2. 对外API的方法必须有注释说明(JavaDoc),参数也要说明
    3. restApI必须要有swagger注解
    4. Public方法建议有注释说明(JavaDoc)
    5. 关键复杂算法,一定要有注释说明
  5. 日志规范
    1. error 出错时,除了堆栈信息外的一些参数需要在此加入
    2. 不允许使用system.out,e.printStackTrace记录日志
  6. 异常规范
    1. 如果不知道如何处理异常,不要捕获异常
    2. 如果捕获异常,一定要记录异常日志信息,或者转译异常(一定要带着原始异常)
  7. 单元测试
    1. 类名:单元测试XXXTestCase,比如:UserTestCase
    2. 方法名:testXXX前缀,比如:testUser
    3. assertXXX,正向判断
    4. 可重复执行(增删改查,还原系统)
    5. 测试最外层即可(因为覆盖率很重要),比如controller;除非测试不到
  8. 代码提交日志规范
    1. TASK:完成JIRA系统中的任务 示例:TASK:12345,EPP部署
    2. BUG:修改BUG系统中的BUG
    3. Review:修改代码评审发现的缺陷
    4. Update:修改了XXX功能,或者新增了XXX,或者删除了XXXX,或者重构了XXX
    5. 禁止强推(git push -f)或者其他工具,比如eclipse

# 数据库规范

  1. 命名
    1. 总体
      1. 全部大写,一般不区分大小写
      2. 不能太长,不超过30个字符,如果超长,必须缩写
      3. 有意义的英文单词
      4. 不能有空格
      5. 不能使用中文
      6. 不建议使用中文拼音
      7. 一般没有阿拉伯数字
      8. 使用下划线连接
    2. 表名:系统名称缩写_对象名称,示例:DPS_DEPLOY_DESIGN,DPS_USER
    3. 列名:有意义的英文单词,示例:ORG_ID,ORG_CODE,ORG_NAME,CREATE_TIME,IS_EDITABLE,USER_NAME, PASSWORD等
    4. 值:不建议大写、缩写。建议小写,中杠分隔。
  2. 列类型
    1. 一个表一般都要有主键(除了关联表之外),主键一般是数字构成,即使是varchar类型(主键是给计算机用的)
    2. varchar类型,一定要设置合适的长度
    3. 时间类型,一定要选取合适类型,有的只有日期,有的只有时间,有的全有,比如date,time,timestamp
    4. 表设计时,注意增加扩展列的可能性,考虑一定的冗余

← 后端编译打包 前端扩展参考 →