服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 编程技术 - Jira自动化实践:基于Jenkins实现需求与代码基线关联

Jira自动化实践:基于Jenkins实现需求与代码基线关联

2021-11-15 22:01DevOps云学堂Lizeyang 编程技术

JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。

Jira自动化实践:基于Jenkins实现需求与代码基线关联

一. Jira简介

中文官网:https://www.atlassian.com/zh/software/jira

Jira自动化实践:基于Jenkins实现需求与代码基线关联

1.1 Jira可以做什么?

规划

创建项目,用户需求和事务、规划 Sprint 并跨团队分配开发任务。

跟踪

全面了解项目进度情况,安排整个团队工作的优先级排序并进行讨论。

Jira自动化实践:基于Jenkins实现需求与代码基线关联

二. 安装部署

2.1 数据中心版本

https://www.atlassian.com/zh/software/jira/pricing?tab=data-center 试用

Jira自动化实践:基于Jenkins实现需求与代码基线关联

选择历史版本下载:

Jira自动化实践:基于Jenkins实现需求与代码基线关联

下载最新的LTS 长期支持版本:

Jira自动化实践:基于Jenkins实现需求与代码基线关联

选择部署的环境:

Jira自动化实践:基于Jenkins实现需求与代码基线关联

开始下载Jira Software Server安装程序:

Jira自动化实践:基于Jenkins实现需求与代码基线关联

2.2 安装部署

  1. scp atlassian-jira-software-8.20.1-x64.bin root@192.168.1.200:/opt/
  2. ## 添加权限
  3. [root@zeyang-nuc-service opt]# chmod +x atlassian-jira-software-8.20.1-x64.bin
  4. ## 运行安装程序
  5. [root@zeyang-nuc-service opt]# ./atlassian-jira-software-8.20.1-x64.bin
  6. Unpacking JRE ...
  7. Starting Installer ...
  8. This will install Jira Software 8.20.1 on your computer.
  9. OK [o, Enter], Cancel [c] ## 回车
  10. Click Next to continue, or Cancel to exit Setup.
  11. Choose the appropriate installation or upgrade option.
  12. Please choose one of the following:
  13. Express Install (use default settings) [1], Custom Install (recommended for advanced users) [2, Enter], Upgrade an existing Jira installation [3]
  14. ## 此处选择自定义安装, 输入回车
  15. Select the folder where you would like Jira Software to be installed.
  16. Where should Jira Software be installed?
  17. [/opt/atlassian/jira]
  18. ## 选择安装目录
  19. Default location for Jira Software data
  20. [/var/atlassian/application-data/jira]
  21. ## 选择数据目录
  22. Configure which ports Jira Software will use.
  23. Jira requires two TCP ports that are not being used by any other
  24. applications on this machine. The HTTP port is where you will access Jira
  25. through your browser. The Control port is used to startup and shutdown Jira.
  26. Use default ports (HTTP: 8080, Control: 8005) - Recommended [1, Enter], Set custom value for HTTP and Control ports [2]
  27. 2 ## 输入2 自定义服务端口
  28. HTTP Port Number
  29. [8071]
  30. 8801
  31. Control Port Number
  32. [8077]
  33. 8802
  34. ## 安装服务
  35. Jira can be run in the background.
  36. You may choose to run Jira as a service, which means it will start
  37. automatically whenever the computer restarts.
  38. Install Jira as Service?
  39. Yes [y, Enter], No [n]
  40. y
  41. Details on where Jira Software will be installed and the settings that will be used.
  42. Installation Directory: /opt/atlassian/jira
  43. Home Directory: /var/atlassian/application-data/jira
  44. HTTP Port: 8801
  45. RMI Port: 8802
  46. Install as service: Yes
  47. Install [i, Enter], Exit [e]
  48. Extracting files ...
  49. ## 启动服务
  50. Please wait a few moments while Jira Software is configured.
  51. Installation of Jira Software 8.20.1 is complete
  52. Start Jira Software 8.20.1 now?
  53. Yes [y, Enter], No [n]
  54. y
  55. Please wait a few moments while Jira Software starts up.
  56. Launching Jira Software ...
  57. Installation of Jira Software 8.20.1 is complete
  58. Your installation of Jira Software 8.20.1 is now ready and can be accessed
  59. via your browser.
  60. Jira Software 8.20.1 can be accessed at http://localhost:8801
  61. Finishing installation ...

访问:http://serverip:8801

2.3 初始化配置

Jira自动化实践:基于Jenkins实现需求与代码基线关联

获取授权码:

Jira自动化实践:基于Jenkins实现需求与代码基线关联

注册账号登录:生成授权码,激活实例;

Jira自动化实践:基于Jenkins实现需求与代码基线关联

Jira自动化实践:基于Jenkins实现需求与代码基线关联

Jira自动化实践:基于Jenkins实现需求与代码基线关联

三. Jira使用实践

3.1 创建一个项目

注意:一个Jira 项目对应一个GitLab项目组;

Jira自动化实践:基于Jenkins实现需求与代码基线关联

Jira自动化实践:基于Jenkins实现需求与代码基线关联

3.2 为项目添加模块

注意:一个Jira模块对应一个GitLab项目;

Jira自动化实践:基于Jenkins实现需求与代码基线关联

Jira自动化实践:基于Jenkins实现需求与代码基线关联

3.3 配置WebHook系统, 网络钩子(webhook)

Jira自动化实践:基于Jenkins实现需求与代码基线关联

3.4 需求/任务管理

创建需求

这里在Jira上面把这个需求logging-error, 类型为故事 关联到devops03-devops-service模块;

Jira自动化实践:基于Jenkins实现需求与代码基线关联

3.5 发布Release

课程中把 发布对应为GitLab项目代码库中的版本分支;

Jira自动化实践:基于Jenkins实现需求与代码基线关联

issue关联发布:可以想象成GitLab特性分支合并到版本分支;

Jira自动化实践:基于Jenkins实现需求与代码基线关联

四. Jira自动化实践

工作流

Jira自动化实践:基于Jenkins实现需求与代码基线关联

工具链集成

Jira自动化实践:基于Jenkins实现需求与代码基线关联

4.1 需求与代码关联

Jira自动化实践:基于Jenkins实现需求与代码基线关联

1. 创建Jenkins作业并配置webhook

Jira自动化实践:基于Jenkins实现需求与代码基线关联

webhookData:这个变量存放的是Jira 传递的数据。

2. 为Jira配置一个系统级别的webhook

Jira自动化实践:基于Jenkins实现需求与代码基线关联

选项解释:

  • 指定Jenkins的webhook触发器地址;
  • 通过JQL指定,允许devops03这个项目进行触发;
  • 勾选动作,触发事件;(我在jira做了什么操作之后能够触发)

3. Jenkins流水线配置

解析Jira传递过来的数据;

  1. webhookData = readJSON text: "${webhookData}"
  2. // Jira事件
  3. jiraEvent = webhookData.webhookEvent
  4. jiraProjectName = webhookData.issue.fields.project.name
  5. // 获取gitlab参数
  6. gitlabProjects = []
  7. gitlabBranchName = webhookData.issue.key
  8. gitlabGroupName = jiraProjectName
  9. for (i in webhookData.issue.fields.components){
  10. gitlabProjects.add(i["name"])
  11. }
  12. currentBuild.description = "Trigger by ${jiraEvent} \n project: ${gitlabProjects} \n branch: ${gitlabBranchName}"

封装GitLab API接口

https://docs.gitlab.com/ee/api/branches.html#create-repository-branch

  1. // 创建分支
  2. def CreateBranch(projectId, newBranchName, sourceBranchName){
  3. try {
  4. apiUrl = "projects/${projectId}/repository/branches?branch=${newBranchName}&ref=${sourceBranchName}"
  5. response = HttpReq('POST', apiUrl, "")
  6. }
  7. catch(Exception e) {
  8. println(e)
  9. }
  10. }
  11. // 获取所有项目的id
  12. def GetProjectsId(gitlabGroupName, gitlabProjects){
  13. gitlabProjectIds = []
  14. for (project in gitlabProjects){
  15. id = GetProjectId(gitlabGroupName, project)
  16. println(id)
  17. if (id != 0){
  18. gitlabProjectIds.add(id)
  19. }
  20. }
  21. return gitlabProjectIds
  22. }
  23. // 根据项目名称获取项目id
  24. def GetProjectId(groupName, projectName){
  25. apiUrl = "projects?search=${projectName}"
  26. response = HttpReq('GET', apiUrl, "")
  27. response = readJSON text: response.content - "\n"
  28. if (response.size() > 1){
  29. for (i in response){
  30. println(i["path_with_namespace"])
  31. println(groupName + projectName)
  32. if (i["path_with_namespace"] == "${groupName}/${projectName}"){
  33. println(i["id"])
  34. return i["id"]
  35. }
  36. }
  37. } else {
  38. return response[0]["id"]
  39. }
  40. }
  41. // 封装HTTP
  42. def HttpReq(reqType, reqUrl,reqBody ){
  43. def gitServer = "http://192.168.1.200/api/v4"
  44. withCredentials([string(credentialsId: '058b7907-ebe2-4d14-9b91-1ac72e071c59', variable: 'GITLABTOKEN')]) {
  45. response = httpRequest acceptType: 'APPLICATION_JSON_UTF8',
  46. consoleLogResponseBody: true,
  47. contentType: 'APPLICATION_JSON_UTF8',
  48. customHeaders: [[maskValue: false, name: 'PRIVATE-TOKEN', value: "${GITLABTOKEN}"]],
  49. httpMode: "${reqType}",
  50. url: "${gitServer}/${reqUrl}",
  51. wrapAsMultipart: false,
  52. requestBody: "${reqBody}"
  53. }
  54. return response
  55. }

Pipeline主程序

  1. pipeline {
  2. agent { label "build" }
  3. stages{
  4. stage("Process"){
  5. steps{
  6. script{
  7. println(gitlabProjects)
  8. println(gitlabBranchName)
  9. projectIds = GetProjectsId(gitlabGroupName, gitlabProjects)
  10. switch(jiraEvent) {
  11. case "jira:issue_created":
  12. println(projectIds)
  13. for (id in projectIds){
  14. CreateBranch(id, gitlabBranchName, "master")
  15. }
  16. break
  17. default:
  18. println("error...")
  19. break
  20. }
  21. }
  22. }
  23. }
  24. }
  25. }

4. 效果验证

在Jira里面创建一个模块和issue, 关联项目;

Jira自动化实践:基于Jenkins实现需求与代码基线关联

Jira自动化实践:基于Jenkins实现需求与代码基线关联

Jenkins 流水线运行;

Jira自动化实践:基于Jenkins实现需求与代码基线关联

Jira自动化实践:基于Jenkins实现需求与代码基线关联

验证Gitlab中多了分支;

Jira自动化实践:基于Jenkins实现需求与代码基线关联

Jira自动化实践:基于Jenkins实现需求与代码基线关联

原文链接:https://mp.weixin.qq.com/s/LFR4NB1zLLKeJNutkz800w

延伸 · 阅读

精彩推荐
  • 编程技术AIOps,SRE工程师手中的利器

    AIOps,SRE工程师手中的利器

    AIOps开始成为一种极为重要的站点可靠性工程工具。它能够高效吸纳观察数据、参与数据以及来自第三方工具的数据,判断系统运行状态并保证其处于最佳...

    至顶网5972021-03-08
  • 编程技术真正聪明的程序员,总有办法不加班

    真正聪明的程序员,总有办法不加班

    工作效率提升了,就可以少加班了,聪明的程序员,总会有一堆可以提升编码效率的工具?当一种工具满足不了工作需求,就去探索新的,今天纬小创就给...

    今日头条12482021-03-04
  • 编程技术从Context源码实现谈React性能优化

    从Context源码实现谈React性能优化

    这篇文章主要介绍Context的实现原理,源码层面掌握React组件的render时机,从而写出高性能的React组件,源码层面了解shouldComponentUpdate、React.memo、PureComponen...

    魔术师卡颂5312020-12-20
  • 编程技术2021年值得关注的React PDF 库

    2021年值得关注的React PDF 库

    今天,许多网络应用程序为其用户提供内置的PDF浏览选项。然而,选择一个并不容易,因为它们的功能远远超过显示PDF。在这篇文章中,我将评估5个React的...

    TianTianUp5232021-06-21
  • 编程技术简单、好懂的Svelte实现原理

    简单、好懂的Svelte实现原理

    本文会围绕一张流程图和两个Demo讲解,正确的食用方式是用电脑打开本文,跟着流程图、Demo一边看、一边敲、一边学...

    魔术师卡颂4822021-11-10
  • 编程技术让开发效率倍增的 VS Code 插件

    让开发效率倍增的 VS Code 插件

    今天来分享一些提升开发效率的实用 VS Code 插件!Better Comments 扩展可以帮助我们在代码中创建更人性化的注释,有不同形式和颜色的注释供我们选择。 ...

    前端充电宝7132022-04-21
  • 编程技术Delphi - Indy idMessage和idSMTP实现邮件的发送

    Delphi - Indy idMessage和idSMTP实现邮件的发送

    这篇文章主要介绍了Delphi - Indy idMessage和idSMTP实现邮件的发送,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    JJ_JeremyWu6592020-09-22
  • 编程技术用户态 Tcpdump 如何实现抓到内核网络包的?

    用户态 Tcpdump 如何实现抓到内核网络包的?

    在网络包的发送和接收过程中,绝大部分的工作都是在内核态完成的。那么问题来了,我们常用的运行在用户态的程序 tcpdump 是那如何实现抓到内核态的包...

    开发内功修炼11612021-09-08