微服务项目中有很多服务模块。为了便于管理,项目需要标准化。GitLabGroup用于管理整个项目。每个项目对应一个微服务,每个微服务服务对应一个Jenkins作业。当我们开始发布时,我们需要手动选择每一个服务然后发布。模块多时不方便。创建Jenkins项目统一管理,绑定GitLab组信息,然后调用Gitlab接口获取项目信息。用户选择要发布的微服务,然后并行触发各个待发布服务的pipeline,根据服务名称进行构建和发布。我们先来看看如何在管道中使用并行语法。这里有两个例子:并行任务和并行阶段。并行任务首先我们需要定义每个任务的名称和对应的操作,可以通过一个Map类型的参数来实现。这里定义了一个空的map,然后在这个map中添加了两个task,build01和build02,它们的操作就是执行shell命令。最后并行运行。deftasks=[:]//定义任务名称和要并行化的任务一个经常使用的操作方法,我们可以用这个方法来解决不必要的时间浪费,尤其是在各种平台运行自动化测试的时候,我们不用等待针对windows平台的验证,在Linux系统中完成验证。相反,它直接在每个平台上同时运行,从而加快了测试速度。我们还可以使用failFast参数来配置当其中一个任务失败时其他任务是否失败。参数值为布尔值(truefalse)。这个例子是jenkins官方提供的。大致内容是在不同的系统环境下并行进行自动化测试。管道{agentnonestages{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"}}}}}}}MasterJobImplementation首先,我们使用静态数据将要发布的项目名称存储为一个List,并定义一个Map来存储并行任务。定义buildStatus以显示项目错误信息(信息在此处格式化)。使用构建来触发项目。这将在管道日志中存储和显示每个失败的任务。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//判断状态为(iinbuildStatus.keySet()){currentBuild.description="BuildInformation"currentBuild.description+=("\nProjectName->"+i+"ErrorInformation:->"+buildStatus[i])}运行效果基本都是一个模块对应一个流水线项目。有时我们需要设置一个集中控制的项目,按照设置的参数依次触发各个模块服务对应的pipeline进行释放。当模块之间没有发布顺序时,我们可以使用Pipeline的Parallel语法来并行构建项目。加快发布速度,降低重复人工操作成本。
