前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >微服务模式下如何实现多模块并行构建发布

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

作者头像
DevOps云学堂
发布2020-04-22 10:55:26
发布2020-04-22 10:55:26
1.1K00
代码可运行
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成
运行总次数:0
代码可运行

在微服务项目中具有很多个服务模块,为了便于管理需要将项目规范化,使用GitLabGroup管理整个项目,每个project对应一个微服务,每个微服务对应一个Jenkins job。开始发布的时候需要我们在手动选择各个服务然后发布。模块很多的时候就不太方便了。

创建一个Jenkins项目用来统一管理,绑定GitLab group信息,然后调用Gitlab接口获取project信息。用户选择要发布的微服务,然后根据服务名称并行触发每个要发布服务的流水线进行构建和发布。

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

并行任务

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

代码语言:javascript
代码运行次数:0
运行
复制
def tasks = [:]

//定义要并行的任务名称和任务
tasks["build01"] =  {sh "ls"} 
tasks["build02"] =  {sh "ls"}

//并行
parallel tasks

并行阶段

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

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

代码语言:javascript
代码运行次数:0
运行
复制
pipeline {
    agent none
    stages {
        stage('Run Tests') {
            parallel {
                stage('Test On Windows') {
                    agent {
                        label "windows"
                    }
                    steps {
                        bat "run-tests.bat"
                    }
                    post {
                        always {
                            junit "**/TEST-*.xml"
                        }
                    }
                }
                stage('Test On Linux') {
                    agent {
                        label "linux"
                    }
                    steps {
                        sh "run-tests.sh"
                    }
                    post {
                        always {
                            junit "**/TEST-*.xml"
                        }
                    }
                }
            }
        }
    }
}

主控Job实现

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

代码语言:javascript
代码运行次数:0
运行
复制
def jobs = ["test2","demo-test-service"]
def parallelMap = [:]
def buildStatus = [:]

jobs.each{ 
    println(it)

    parallelMap[it] = {
        try {
            build job: "${it}", 
            parameters: [string(name: 'branchName', value: 'Dev')]
        } catch(e){
            println("${it}  " + e)
            buildStatus[it] = e
        }
    }
}

parallel parallelMap


//判断状态

for ( i in buildStatus.keySet()){
     currentBuild.description = "构建信息"
     currentBuild.description += ("\n项目名称->"  + i  + "错误信息:->"+ buildStatus[i])
}

运行效果

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档