iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >微服务需求与代码管理的方法是什么
  • 105
分享到

微服务需求与代码管理的方法是什么

2024-04-02 19:04:59 105人浏览 泡泡鱼
摘要

这篇文章主要介绍“微服务需求与代码管理的方法是什么”,在日常操作中,相信很多人在微服务需求与代码管理的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微服务需求与代码

这篇文章主要介绍“微服务需求与代码管理的方法是什么”,在日常操作中,相信很多人在微服务需求与代码管理的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微服务需求与代码管理的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

业务的简称为demo,微服务架构。N多个微服务。服务命名:业务简称-应用名称-类型(demo-hello-service)。特性分支开发,版本分支发布。每个需求(任务/故事)对应一个特性分支。每个发布(release)对应一个版本分支。

1.需求与代码管理
Jira作为需求和缺陷管理,采用Scrum开发方法,jira中的项目名称与业务简称一致(demo)。gitlab作为版本控制系统,每个Group对应一个业务,每个微服务对应一个代码库。

微服务需求与代码管理的方法是什么

需求与代码关联:在jira中创建一个任务/故事,关联模块后自动在该模块创建一个以ISSUE(任务/故事)ID的特性分支。此时的模块等同于每个微服务的项目(代码库)名称。以下面图中为例:我们在demo项目中创建了一个模块demo-hello-service,其实对应的就是Gitlab代码库中demo组的demo-hello-service服务。

微服务需求与代码管理的方法是什么

特性分支:创建好每个模块后,就可以实现需求与代码关联。例如:我们在Jira项目demo中创建一个问题,类型为故事(不受限制可为其他),重点是需要将改故事关联到模块(只有关联到模块,我们才能通过接口得知哪个问题关联的哪个代码库)。

微服务需求与代码管理的方法是什么

版本分支:当特性分支开发完成以及测试验证完成后,基于主干分支创建一个版本分支,然后将所有的特性分支合并到版本分支。此时可以通过Jira中创建一个发布版本,然后问题关联发布版本(此动作表示该特性分支已经通过验证,可以合并)。自动完成版本分支的创建和特性分支到版本分支的合并请求。

微服务需求与代码管理的方法是什么

2. 配置过程
需求与代码库关联,主要用到的工具链为: Jira + GitLab + jenkins。Jira负责创建需求,配置WEBhook。Jenkins负责接收Jira webhook请求,然后通过接口实现GitLab项目分支创建。

特性分支自动化:当我们在jira上面创建了问题,此时会通过Jira的webhook触发对应的Jenkins作业,该Jenkins作业通过解析Jira webhook传递的数据,找到问题名称和模块名称。调用Gitlabapi 项目查询接口,根据模块名称找到代码库。调用GitLabAPI 分支创建接口,根据问题名称基于主干分支创建一个特性分支。任务结束。

版本分支自动化:Jira创建发布版本,Issue关联版本。自动在gitlab代码库基于master创建版本分支,并开启特性分支到版本分支的合并请求。

2.1 准备工作
在Jenkins, 创建一个Pipeline 作业并配置GenericTrigger 触发器,接收JiraWebhook数据。projecTKEy 参数表示Jira项目名称,webHookData 参数为Jira  webhook的所有数据。token 是触发器的触发token,这里默认采用的作业名称(作业名称要唯一)。

triggers {         GenericTrigger( causeString: 'Trigger By Jira Server -->>>>> Generic Cause',                          genericRequestVariables: [[key: 'projectKey', regexpFilter: '']],                          genericVariables: [[defaultValue: '', key: 'webHookData', regexpFilter: '', value: '$']],                          printContributedVariables: true,                          printPostContent: true,                          regexpFilterExpression: '',                          regexpFilterText: '',                          silentResponse: true,                          token: "${JOB_NAME}"         )

在Jira项目中配置Webhook,勾选触发事件填写触发URL。Http://jenkins.idevops.site/generic-webhook-trigger/invoke?token=demo-jira-service&projectKey=${project.key}  (这个地址是jenkins Generictrigger生成的,这里不做过多的介绍)

微服务需求与代码管理的方法是什么

Jira webhook数据参考, 这些参数可以在Jenkinsfile中通过readJSON格式化,然后获取值。

response = readjsON text: """${webHookData}""" println(response)  //获取webhook的事件类型 env.eventType = response["webhookEvent"]
{     "timestamp":1603087582648,     "webhookEvent":"jira:issue_created",     "issue_event_type_name":"issue_created",     "user":Object{...},     "issue":{         "id":"10500",         "self":"http://192.168.1.200:8050/rest/api/2/issue/10500",         "key":"DEMO-2",         "fields":{             "issuetype":{                 "self":"http://192.168.1.200:8050/rest/api/2/issuetype/10001",                 "id":"10001",                 "description":"",                 "iconUrl":"http://192.168.1.200:8050/images/icons/issuetypes/story.svg",                 "name":"故事",                 "subtask":false             },             "components":[                 {                     "self":"http://192.168.1.200:8050/rest/api/2/component/10200",                     "id":"10200",                     "name":"demo-hello-service",                     "description":"demo-hello-service应用"                 }             ],             "timespent":null,             "timeoriginalestimate":null,             "description":null,             ...             ...             ...

2.2 封装GitLab接口
Gitlab接口文档:https://docs.gitlab.com/ce/api/README.html

共享库:src/org/devops/gitlab.groovy

package org.devops  //封装HTTP请求 def HttpReq(reQtype,reqUrl,reqBody){     def gitServer = "http://gitlab.idevops.site/api/v4"     withCredentials([string(credentialsId: 'gitlab-token', variable: 'gitlabToken')]) {       result = httpRequest customHeaders: [[maskValue: true, name: 'PRIVATE-TOKEN', value: "${gitlabToken}"]],                  httpMode: reqType,                  contentType: "APPLICATION_JSON",                 consoleLogResponseBody: true,                 ignoreSslErrors: true,                  requestBody: reqBody,                 url: "${gitServer}/${reqUrl}"                 //quiet: true     }     return result }   //更新文件内容 def UpdateRepoFile(projectId,filePath,fileContent){     apiUrl = "projects/${projectId}/repository/files/${filePath}"     reqBody = """{"branch": "master","encoding":"base64", "content": "${fileContent}", "commit_message": "update a new file"}"""     response = HttpReq('PUT',apiUrl,reqBody)     println(response)  }  //获取文件内容 def GetRepoFile(projectId,filePath){     apiUrl = "projects/${projectId}/repository/files/${filePath}/raw?ref=master"     response = HttpReq('GET',apiUrl,'')     return response.content }  //创建仓库文件 def CreateRepoFile(projectId,filePath,fileContent){     apiUrl = "projects/${projectId}/repository/files/${filePath}"     reqBody = """{"branch": "master","encoding":"base64", "content": "${fileContent}", "commit_message": "create a new file"}"""     response = HttpReq('POST',apiUrl,reqBody)     println(response) }   //更改提交状态 def ChangeCommitStatus(projectId,commitSha,status){     commitApi = "projects/${projectId}/statuses/${commitSha}?state=${status}"     response = HttpReq('POST',commitApi,'')     println(response)     return response }  //获取项目ID def GetProjectID(repoName='',projectName){     projectApi = "projects?search=${projectName}"     response = HttpReq('GET',projectApi,'')     def result = readJSON text: """${response.content}"""          for (repo in result){        // println(repo['path_with_namespace'])         if (repo['path'] == "${projectName}"){                          repoId = repo['id']             println(repoId)         }     }     return repoId }  //删除分支 def DeleteBranch(projectId,branchName){     apiUrl = "/projects/${projectId}/repository/branches/${branchName}"     response = HttpReq("DELETE",apiUrl,'').content     println(response) }  //创建分支 def CreateBranch(projectId,refBranch,newBranch){     try {         branchApi = "projects/${projectId}/repository/branches?branch=${newBranch}&ref=${refBranch}"         response = HttpReq("POST",branchApi,'').content         branchInfo = readJSON text: """${response}"""     } catch(e){         println(e)     }  //println(branchInfo) }  //创建合并请求 def CreateMr(projectId,sourceBranch,targetBranch,title,assigneeUser=""){     try {         def mrUrl = "projects/${projectId}/merge_requests"         def reqBody = """{"source_branch":"${sourceBranch}", "target_branch": "${targetBranch}","title":"${title}","assignee_id":"${assigneeUser}"}"""         response = HttpReq("POST",mrUrl,reqBody).content         return response     } catch(e){         println(e)     } }  //搜索分支 def SearchProjectBranches(projectId,searchKey){     def branchUrl =  "projects/${projectId}/repository/branches?search=${searchKey}"     response = HttpReq("GET",branchUrl,'').content     def branchInfo = readJSON text: """${response}"""          def branches = [:]     branches[projectId] = []     if(branchInfo.size() ==0){         return branches     } else {         for (branch in branchInfo){             //println(branch)             branches[projectId] += ["branchName":branch["name"],                                     "commitMes":branch["commit"]["message"],                                     "commitId":branch["commit"]["id"],                                     "merged": branch["merged"],                                     "createTime": branch["commit"]["created_at"]]         }         return branches     } }  //允许合并 def AcceptMr(projectId,mergeId){     def apiUrl = "projects/${projectId}/merge_requests/${mergeId}/merge"     HttpReq('PUT',apiUrl,'') }

2.3 共享库配置

微服务需求与代码管理的方法是什么

到此,关于“微服务需求与代码管理的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 微服务需求与代码管理的方法是什么

本文链接: https://www.lsjlt.com/news/84431.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微服务需求与代码管理的方法是什么
    这篇文章主要介绍“微服务需求与代码管理的方法是什么”,在日常操作中,相信很多人在微服务需求与代码管理的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微服务需求与代码...
    99+
    2024-04-02
  • MySQL 服务与数据库管理的方法是什么
    本篇内容主要讲解“MySQL 服务与数据库管理的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL 服务与数据库管理的方法是什么”吧!1、启动和关闭服务指令1.1windows下...
    99+
    2023-06-25
  • DNS服务器配置与管理的方法是什么
    DNS服务器配置与管理的方法一般如下:1. 配置DNS服务器的基本信息,包括服务器名称、IP地址、子网掩码等。2. 配置DNS服务器...
    99+
    2023-05-21
    DNS服务器配置 服务器
  • web服务器的配置与管理的方法是什么
    1.选择适当的Web服务器软件:首先需要选择合适的Web服务器软件,比如 Apache、Nginx、IIS等。2.安装Web服务器软...
    99+
    2023-06-03
    web服务器的配置 web服务器 服务器
  • Linux系统启动与服务管理的方法是什么
    今天小编给大家分享一下Linux系统启动与服务管理的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 前言  服...
    99+
    2023-06-29
  • linux云服务器搭建与管理的方法是什么
    1. 选择云服务器服务商,如yi速 芸等,注册账号并购买云服务器实例。2. 登录云服务器,使用SSH协议进行远程连接。3. 安装常用...
    99+
    2023-05-13
    linux云服务器搭建 linux云服务器 云服务器
  • apache的配置与管理方法是什么
    Apache的配置与管理方法主要有两种:通过配置文件进行管理和使用命令行工具进行管理。1. 通过配置文件进行管理:Apache的配置...
    99+
    2023-09-21
    apache
  • web服务器安全配置与管理的方法是什么
    以下是Web服务器安全配置与管理的方法:1. 更新操作系统和软件:确保服务器操作系统和所有安装的软件都是最新的,以便修补已知的安全漏...
    99+
    2023-06-08
    web服务器安全配置 web服务器 服务器
  • python库的导入与管理方法是什么
    Python库的导入与管理方法有以下几种:1. 直接导入:使用`import`语句导入整个库。例如:`import math`2. ...
    99+
    2023-08-09
    python
  • flink state管理与恢复的方法是什么
    Flink提供了两种方法来管理和恢复状态:Checkpoint和Savepoint。 Checkpoint:Checkpoint...
    99+
    2024-03-07
    flink
  • 爬虫需要代理IP的基本要求是什么
    本篇内容介绍了“爬虫需要代理IP的基本要求是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在爬虫的过程中,我们经常会遇到很多网站采用防爬...
    99+
    2023-06-20
  • android任务管理的方法是什么
    Android的任务管理方法可以通过以下几种方式实现:1. 使用任务管理器:Android系统提供了自带的任务管理器,可以通过长按设...
    99+
    2023-08-18
    android
  • 云服务器磁盘管理的方法是什么
    云服务器磁盘管理的方法主要包括以下几种:1. 磁盘分区:根据需求将物理磁盘划分为多个逻辑分区,以便更好地管理数据和文件。2. 文件系...
    99+
    2023-09-27
    云服务器
  • MongoDB的内存管理与优化方法是什么
    MongoDB的内存管理与优化可以通过以下方法实现: 使用合理的索引:为经常查询的字段创建索引,可以加快查询速度,减少内存的占用...
    99+
    2024-05-07
    MongoDB
  • Java远程配置的服务器调试与管理方法是什么
    本篇内容主要讲解“Java远程配置的服务器调试与管理方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java远程配置的服务器调试与管理方法是什么”吧!1,Socket ,ServerSo...
    99+
    2023-06-17
  • linux服务器批量管理的方法是什么
    在Linux服务器上进行批量管理的方法有多种,以下是一些常见的方法: 使用Shell脚本:编写Shell脚本可以实现批量执行多个...
    99+
    2024-04-09
    linux 服务器
  • python文件与路径管理的方法是什么
    这篇“python文件与路径管理的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python文件与路径管理的方法是...
    99+
    2023-06-29
  • MongoDB的安全配置与管理方法是什么
    MongoDB的安全配置和管理方法包括以下几个方面: 访问控制:设置用户认证和授权,确保只有经过授权的用户才能访问数据库。可以创...
    99+
    2024-05-07
    MongoDB
  • Zookeeper的配置与集群管理方法是什么
    这篇文章主要讲解了“Zookeeper的配置与集群管理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Zookeeper的配置与集群管理方法是什么”吧!4.1 配置文件ZooKeep...
    99+
    2023-06-04
  • ADO管理的方法是什么
    这篇文章主要介绍“ADO管理的方法是什么”,在日常操作中,相信很多人在ADO管理的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO管理的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作