在自如大前端DevOps建设中JIRA的应用

发表于:2022-9-30 09:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:自如大前端团队    来源:稀土掘金

  一、背景介绍
  1、什么是DevOps
  近年来DevOps一词在整个IT行业是火遍全球,目前也没有权威的统一定义,在不同的组件及场景也产生了各种各样对它的理解和定义,比如有人把DevOps定义为是一种模式、一种工具、一种平台、一种实践、一种文化、思想、价值观等等,从不同的角度去描绘DevOps。
  DevOps内容非常丰富,有理论也有实践,包括组织文化、自动化、精益、反馈和分享等不同方面,是一组过程、方法与系统的统称,强调高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。
  换句话说DevOps希望做到在软件产品交付过程中,通过IT工具链的打通,自动化流程使得软件构建、测试、发布更加快捷、频繁和可靠,在开发、测试和运维团队减少时间损耗,更加高效地协调工作。
  2、什么是JIRA
  JIRA是Atlassian公司出品的一款集项目管理、任务分配、需求管理、缺陷跟踪的过程管理软件。通过JIRA系统,可以整合项目管理人员、产品人员、开发人员、测试人员、运维人员等各司其职,信息很快得到交流和反馈,通过数据准确地了解项目的开发进度、质量和状态,以及整个团队的工作效率。
  3、相关建设简单介绍
  目前,移动端应用的研发发版流程借助于内部研发的DevOps平台进行,其中发版流程主要的几个阶段了:分支的创建、测试执行的创建、测试用例的创建、提测、测试、分支主干合并、主干分支的打包上线。JIRA作为项目管理和需求追踪工具基本贯穿于软件研发整个生命周期中,从项目的立项开始,产品需求的产出、研发任务需求、QA测试任务需求、缺陷任务需求、到最后运维上线的需求,还有到需求任务的拆解、新增小需等,每个JIRA需求经历从创建流转到最后的完成的整个工作流周期。
  在内部DevOps建设过程中,JIRA相关的应用的也不断的完善,从手动的创建JIRA、手动去关联分支和JIRA、手动更新JIRA状态、手动关联JIRA和测试用例、测试执行等等。我们逐步系统自动化集成,规范项目管理流程、规范需求池的使用,来提高工作沟通效率、较低人为因素的影响、系统记录更客观的研发过程度量数据,提高产品的质量保证和上线交付速度。现介绍下JIRA集成中的一些总结,提供给大家使用中参考。
  二、JAVA项目中JIRA的集成方法
  JIRA本身API非常强大,但它是一个底层的API体系,如果要开发和拓展,需要二次封装,官方提供了java客户端库,也提供了丰富的REST API调用。
  ####方法1、集成jira官方提供的java客户端类库jira-rest-java-client-core
  第一步:maven类库引入
  <dependency>
  <groupId>com.atlassian.jira</groupId>
  <artifactId>jira-rest-java-client-core</artifactId>
  <version>5.2.1</version>
  </dependency>   
  第二步:使用示例
   // 登录获取 jiraClient
   AsynchronousJiraRestClientFactory asynchronousJiraRestClientFactory = new AsynchronousJiraRestClientFactory();
   JiraRestClient jiraRestClient = asynchronousJiraRestClientFactory.createWithBasicHttpAuthentication(URI.create(jiraUrl), userName, password);
   //JIRA ISSUE获取
   IssueRestClient issueClient = jiraRestClient.getIssueClient();
   Issue issue = issueClient.getIssue(issueKey).claim();
   
   //更新jira的状态,如状态从打开修改为处理中
   jiraRestClient.getIssueClient().transition(issue, new TransitionInput(11));
   
   //Jira Issue的创建
   IssueRestClient issueClient = jiraRestClient.getIssueClient();
    IssueInputBuilder builder = new IssueInputBuilder();
    builder.setIssueTypeId(TECHNICAL_TYPE_ID);
    builder.setProjectKey(PROJECT_KEY);
    builder.setSummary(summary);
    builder.setPriorityId(priorityId);
    builder.setDescription(description);
    builder.setFieldValue("customfield_10222", ComplexIssueInputFieldValue.with("value", "技术中心"));
    builder.setFieldValue("customfield_10220", ComplexIssueInputFieldValue.with("value", "互联网产品技术平台"));
    .... //其他属性的设置
    IssueInput issueInput = builder.build();
    BasicIssue basicIssue = issueClient.createIssue(issueInput).claim();
   Issue issue = issueClient.getIssue(basicIssue.getKey()).claim();
   
   ...
   //参考API使用文档
  方法2、集成一款更简单轻量级的java客户端类库JIRA-Client
  第一步:maven类库引入
  <dependency>
    <groupId>net.rcarz</groupId>
    <artifactId>jira-client</artifactId>
    <version>0.5</version>
    <scope>compile</scope>
  </dependency> 
  第二步:使用示例
    //连接获取
    BasicCredentials creds = new BasicCredentials(username, password);
    JiraClient jiraClient = new JiraClient(jiraUrl, creds);
    
    //获取一个Jira需求的内容详情
    Issue issue = jiraClient.getIssue(issueId);
    
    //Jira 状态更新 如从工作流程状态从“开发开发” 到 “提测,等待测试”等
    issue.transition().execute(workflow); 
    
    //更新修改jira一个字段的值 
    issue.update().field(fieldName,fieldValue).execute();
    
    //给Jira需求issue创建连接
    issue.link(oldIssue,"Relates");
    
    //为Jira Issue创建子任务 如为Issue创建开发子任务:issueType=开发子任务
     Issue subtask = Issue.create(jiraClient.getRestClient(),issue.getProject().getKey(),issueType)
              .field("parent", issue.getKey())
              .field(Field.PRIORITY,issue.getPriority())
              .field(Field.ASSIGNEE,assignee)
              .field(Field.SUMMARY, summary)
              .field("customfield_11127",customfield_11127) //研发团队
              .execute();
              
     //获取Issue某个属性的值
     CustomFieldOption customFieldOption= CustomFieldOption.get(jiraClient.getRestClient(),fieldId);
    
     //新需求Issue的创建
     Issue newIssue = jiraClient.createIssue(issueKey, issueType)
              .field(Field.SUMMARY, reqVo.getSummary())
              .field(Field.DESCRIPTION, reqVo.getDescription())
              .field("customfield_11248", customfield_11248) //所属核心聚焦目标 Json对象
              .field("customfield_11127", customfield_11127) //研发团队  Json对象
              .field("customfield_10220",customfield_10220) //需求来源部门  Json对象
              .field("customfield_11120",reqVo.getPlanDate()) //计划上线时间 
              .field("customfield_10116",reqVo.getAssignee()) //需求发起人
              .field(Field.ASSIGNEE, reqVo.getAssignee()) //经办人
              .execute();
  方法3、JIRA的Rest API调用
  目前Jira REST API 提供与V2和V3版本,但V3版本是公共测试版本,正式版本为V2,所以在生成调用的时候参照V2版本的使用。调用接口的路径结构为:https://{site-url}/rest/api/2/{resource-name}
  如:Jira Issue的GET获取:https://{your-jira-domain}/rest/api/2/issue/{issueId}
  RestAPI调用的时候需要本地搭建Jira账号的请求Header鉴权信息。
  三、总结
  以上简单介绍了三种Jira在系统间的对接打通方式,一般普遍功能对接其实都可以满足,具体的选择要注意,一要根据具体的情况,若引入第三方库要注意版本的选择;二要相信只要Web端可以操作的功能,一定会找到相应的API操作。三具体的开发中,可能会遇到各种问题要多参阅文档、多进行单元测试、也多扩展思路。比如Jira的状态是基于工作流的,也就是说状态的更新就是工作流的流转;工作的流转是按照流程顺序,不可逆的;如果有出现工作流的反向操作,那可以通过挂起来解决。
  DevOps的建设是组织团队内不断优化迭代的过程,不断为组织的产品输出和价值交付提供更规范、更高效、更有保障的平台和指导。JIRA在平台化的流程中自动化集成的应用,一方面,让产品、研发、测试、运维能高效的沟通协作,加速价值交付的周期;另一方面,为研发过程、交付时效、研发质量等的度量提供了更客观的的基础系统化数据。
  以上内容如有雷同纯属巧合,感谢阅读,欢迎吐槽。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号