微服务模式下如何实现多模块并行构建发布

 在微服务项目中具有很多个服务模块,为了便于管理需要将项目规范化,使用GitLabGroup管理整个项目,每个project对应一个微服务,每个微服务对应一个Jenkins job。开始发布的时候需要我们在手动选择各个服务然后发布。模块很多的时候就不太方便了。创建一个Jenkins项目用来统一管理,绑定GitLab group信息,然后调用Gitlab接口获取project信息。用户选择要发布的微服务,然后根据服务名称并行触发每个要发布服务的流水线进行构建和发布。

创新互联专业为企业提供琼海网站建设、琼海做网站、琼海网站设计、琼海网站制作等企业网站建设、网页设计与制作、琼海企业网站模板建站服务,10余年琼海做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

我们先来看看如何使用pipeline中的parallel语法,这里列举了两个例子:并行任务、并行阶段。

并行任务

首先我们需要定义每个任务的名称和对应的操作,可以通过一个Map类型参数实现。在这里定义了一个空的map,然后为这个map增加了两个任务分别为build01和build02,它们的操作是执行shell命令。最后通过parallel运行。

 
 
 
 
  1. def tasks = [:] 
  2.  
  3. //定义要并行的任务名称和任务 
  4. tasks["build01"] =  {sh "ls"}  
  5. tasks["build02"] =  {sh "ls"} 
  6.  
  7. //并行 
  8. parallel tasks 

并行阶段

并行stage也是一种经常用到的运行方式,我们可以使用这种方式解决不必要的时间浪费,尤其在各个平台运行自动化测试的时候,我们不必等到windows平台验证完成再进行Linux系统中的验证。而是直接在各个平台中同时运行,加快了测试的速度。我们还可以使用failFast参数配置当其中一个任务失败其他任务是否一样失败,参数值为布尔类型(true false)。

这个例子是jenkins官方提供的,大概的内容是并行在不同系统环境下进行自动化测试。

 
 
 
 
  1. pipeline { 
  2.     agent none 
  3.     stages { 
  4.         stage('Run Tests') { 
  5.             parallel { 
  6.                 stage('Test On Windows') { 
  7.                     agent { 
  8.                         label "windows" 
  9.                     } 
  10.                     steps { 
  11.                         bat "run-tests.bat" 
  12.                     } 
  13.                     post { 
  14.                         always { 
  15.                             junit "**/TEST-*.xml" 
  16.                         } 
  17.                     } 
  18.                 } 
  19.                 stage('Test On Linux') { 
  20.                     agent { 
  21.                         label "linux" 
  22.                     } 
  23.                     steps { 
  24.                         sh "run-tests.sh" 
  25.                     } 
  26.                     post { 
  27.                         always { 
  28.                             junit "**/TEST-*.xml" 
  29.                         } 
  30.                     } 
  31.                 } 
  32.             } 
  33.         } 
  34.     } 

主控Job实现

首先我们用静态数据来存储要发布的项目名称存储为一个List,定义一个Map用来存储并行任务。定义buildStatus展示项目错误信息(这里做了信息格式化)。使用build进行项目触发。这里会把每个失败的任务存储展示到流水线日志中。

 
 
 
 
  1. def jobs = ["test2","demo-test-service"] 
  2. def parallelMap = [:] 
  3. def buildStatus = [:] 
  4.  
  5. jobs.each{  
  6.     println(it) 
  7.  
  8.     parallelMap[it] = { 
  9.         try { 
  10.             build job: "${it}",  
  11.             parameters: [string(name: 'branchName', value: 'Dev')] 
  12.         } catch(e){ 
  13.             println("${it}  " + e) 
  14.             buildStatus[it] = e 
  15.         } 
  16.     } 
  17.  
  18. parallel parallelMap 
  19.  
  20.  
  21. //判断状态 
  22.  
  23. for ( i in buildStatus.keySet()){ 
  24.      currentBuild.description = "构建信息" 
  25.      currentBuild.description += ("\n项目名称->"  + i  + "错误信息:->"+ buildStatus[i]) 

运行效果

基本上每个模块对应一个pipeline项目。有时候我们需要设置一个集中控制项目来根据设置的参数有序触发各个模块服务对应的流水线进行发布。在各个模块之间没有发布顺序的时候,我们可以使用Pipeline的Parallel语法进行项目的并行构建。加快发布速度,减少重复手工操作成本。

新闻名称:微服务模式下如何实现多模块并行构建发布
当前URL:http://www.hantingmc.com/qtweb/news38/554288.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联