时间:2021-05-02
在微服务项目中具有很多个服务模块,为了便于管理需要将项目规范化,使用GitLabGroup管理整个项目,每个project对应一个微服务,每个微服务对应一个Jenkins job。开始发布的时候需要我们在手动选择各个服务然后发布。模块很多的时候就不太方便了。创建一个Jenkins项目用来统一管理,绑定GitLab group信息,然后调用Gitlab接口获取project信息。用户选择要发布的微服务,然后根据服务名称并行触发每个要发布服务的流水线进行构建和发布。
我们先来看看如何使用pipeline中的parallel语法,这里列举了两个例子:并行任务、并行阶段。
并行任务
首先我们需要定义每个任务的名称和对应的操作,可以通过一个Map类型参数实现。在这里定义了一个空的map,然后为这个map增加了两个任务分别为build01和build02,它们的操作是执行shell命令。最后通过parallel运行。
deftasks=[:]
//定义要并行的任务名称和任务
tasks["build01"]={sh"ls"}
tasks["build02"]={sh"ls"}
//并行
paralleltasks
并行阶段
并行stage也是一种经常用到的运行方式,我们可以使用这种方式解决不必要的时间浪费,尤其在各个平台运行自动化测试的时候,我们不必等到windows平台验证完成再进行Linux系统中的验证。而是直接在各个平台中同时运行,加快了测试的速度。我们还可以使用failFast参数配置当其中一个任务失败其他任务是否一样失败,参数值为布尔类型(true false)。
这个例子是jenkins官方提供的,大概的内容是并行在不同系统环境下进行自动化测试。
pipeline{
agentnone
stages{
stage('RunTests'){
parallel{
stage('TestOnWindows'){
agent{
label"windows"
}
steps{
bat"run-tests.bat"
}
post{
always{
junit"**/TEST-*.xml"
}
}
}
stage('TestOnLinux'){
agent{
label"linux"
}
steps{
sh"run-tests.sh"
}
post{
always{
junit"**/TEST-*.xml"
}
}
}
}
}
}
}
主控Job实现
首先我们用静态数据来存储要发布的项目名称存储为一个List,定义一个Map用来存储并行任务。定义buildStatus展示项目错误信息(这里做了信息格式化)。使用build进行项目触发。这里会把每个失败的任务存储展示到流水线日志中。
defjobs=["test2","demo-test-service"]
defparallelMap=[:]
defbuildStatus=[:]
jobs.each{
println(it)
parallelMap[it]={
try{
buildjob:"${it}",
parameters:[string(name:'branchName',value:'Dev')]
}catch(e){
println("${it}"+e)
buildStatus[it]=e
}
}
}
parallelparallelMap
//判断状态
for(iinbuildStatus.keySet()){
currentBuild.description="构建信息"
currentBuild.description+=("\n项目名称->"+i+"错误信息:->"+buildStatus[i])
}
运行效果
基本上每个模块对应一个pipeline项目。有时候我们需要设置一个集中控制项目来根据设置的参数有序触发各个模块服务对应的流水线进行发布。在各个模块之间没有发布顺序的时候,我们可以使用Pipeline的Parallel语法进行项目的并行构建。加快发布速度,减少重复手工操作成本。
原文地址:https://mp.weixin.qq.com/s/Ra6Wq_p8vIKlDjXu2OEVOg
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
后端微服务的整体架构。微服务是为满足应用多元需求,模式多样,主要有:(1)聚合器微服模式,由聚合器实现多微服的调动和应用功能,业务逻辑简单;(2)代理微服模式,
微服务进程间的通信设计。单体应用中需要通过各模块协调调用实现进程间通信。但一些基于微服进行的分布式应用,其运行模式为多机器处理,每个微服是整体的一部分,也是一个
微服务之间的调用如何实现首先你需要两个或以上的微服务模块至于怎么创建可以参考我上一篇博客springcloudeureka注册中心如果想在页面显示那么需要先加上
服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。springcloudeureka是springcloudne
背景:使用java实现jenkins构建很简单,但是如何确定什么时候job已经构建完成才是关键,而且要实现多个job并行构建。分析:我有一篇文章提到过使用jav