0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DevOps案例旨在帮助用户在实践中更好的运用DevOps

8nfr_ZTEdevelop 来源:未知 作者:李倩 2018-04-11 09:31 次阅读

DevOps案例旨在帮助用户在实践中更好的运用DevOps。

问题描述

Jenkins2.0 Pipeline框架iPipeline(即plll库)对MergeCI的触发条件的设置为Change merged模式且固定不变,即需要由代码走查者+2分后,再由Core成员点击Submit按钮来将代码推入库,然后才来触发MergeCI流程,该过程的VerifyCI和MergeCI流程如下图所示:

结合上图我们可以发现,这里有个问题是: 一旦代码走查通过(+2分),然后Core成员通过(Submit)后,代码立即入库,然后触发MergeCI流程,此时若MergeCI运行出错,那错误此时已经入库并且影响后续开发人员合入代码。

再结合本项目协议开发自身的实际特点,很有可能VerifyCI通过后的MergeCI会和他人产生互相影响,这样便可能导致主干分支代码有错,开发人员之间互相影响,最终影响代码提交合入的效率。

基于此种情况,我们提出的一种模式是,MergeCI由代码审查人员在Gerrit上打出+2分来触发,只有到MergeCI运行通过,代码才会被推入库中,此种方式带来的一个最直接的好处就是主干分支上的代码永远正确的,而且不会因为MergeCI报错而影响他人合代码,而且该方法带来的另外一个好处便是无需设定关键角色来负责Submit代码入库,仅仅需要的是代码走查人员即可,这样也提高了自动化程度,节省人力。将该流程可以示意如下图:

因此plll库的这种MergeCI的设置方式并不满足本项目,因此我们决定扩充plll库对于MergeCI运行模式的支持。

优化实践

通过重载了plll库的属性设置函数,加入了根据CI类型来完成MergeCI不同触发条件的设置:

/**

* 工具名称:set_default_properties

* 工具描述:设置默认的参数

* 参数说明:

* - citype : CI类型

* - args : 参数列表

**/

def set_default_properties(citype, args){

def buildParameters =[]

def buildTriggers =[]

set_parameters_properties(buildParameters, args)

set_cron_properties(buildTriggers, args)

set_gerrit_properties(citype, buildParameters, buildTriggers, args)

/* --------参数------- */

properties([

[$class:'GitLabConnectionProperty', gitLabConnection:''],

[$class:'RebuildSettings', autoRebuild:false, rebuildDisabled:false],

buildDiscarder(logRotator(artifactDaysToKeepStr:'', artifactNumToKeepStr:'', daysToKeepStr:'14', numToKeepStr:'100')),

parameters(buildParameters),

pipelineTriggers(buildTriggers)

])

/* 清空临时变量 */

buildParameters=null

buildTriggers=null

return

}

/**

* 函数名称:设置gerrit属性

**/

def set_gerrit_properties(citype, buildParameters, buildTriggers, args)

{

// ...此处代码省略...

if("verifyci"=="${citype}"){

gerritEvents =[

patchsetCreated(

excludeDrafts:false,

excludeNoCodeChange:true,

excludeTrivialRebase:false

),

draftPublished()

]

// 如果CI类型是MergeCI,则设置器触发条件为Code-Review +2方式来触发

}elseif("mergeci"=="${citype}"){

gerritEvents =[

commentAdded(commentAddedTriggerApprovalValue:'+2', verdictCategory:'Code-Review')

]

}

// ...此处代码省略...

}

由代码可知,在set_gerrit_properties函数中,做了特殊判断,若是MergeCI,则单独将其触发条件设置为Code-Review +2,这样便可以满足需求。

使用举例:

在MergeCI的Jenkinsfile中调用plll.set_default_properties设置项目属性时明确指定mergeci类型即可,以本项目的Jenkinsfile代码中设置默认属性参数为例:

def set_default_properties(){

plll.set_default_properties("mergeci",[

/* 关联gerrit */

gerrit:[

server:"${env.GERRIT_SERVER_NAME}",

projects:[[project:"${env.GERRIT_PROJECT}", branch:"${plll.getJobBaseName()}"]]

],

/* 自定义参数 */

parameters:[

choice(choices:'yes\nno', description:'清空编译环境', name:'CLEAN_ALL'),

string(defaultValue:"${plll.getJobBaseName()}", description:'触发分支',name:'BRANCH_TAG')

],

]);

}

除此之外,还需要在Jenkins系统管理中MergeCI的Gerrit Trigger设置中作如下图所示的配置即可:

优缺点分析

1. 优点

开发人员互相独立,别人错误的代码无法入库,不影响他人

主干分支代码永远正确,不影响别人拉代码验证和正常合入代码

无需小组核心成员进行submit操作,MergeCI一旦运行正确,代码则自动入库

2. 缺点

原理决定了其无法并行,所以需要根据不同的项目情况酌情考虑。但是从本项目实际实践的整局来看,本项目VerifyCI支持数个任务同时并发执行,而MergeCI排队执行,但由于MergeCI执行较快,而且冲突很少,因此MergeCI的代码都能逐个顺利地合入,幸福感较以前有很大提升。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4553

    浏览量

    66664
  • devops
    +关注

    关注

    0

    文章

    100

    浏览量

    11899

原文标题:DevOps 案例 |Jenkins2.0 Pipeline框架(iPipeline)优化实践之路(三)

文章出处:【微信号:ZTEdeveloper,微信公众号:中兴开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DevOps拥抱日志管理系统ELK623浅析

    DevOps之拥抱日志管理系统ELK623
    发表于 07-15 06:06

    DevOps工具链的项目端到端应用实践过程

    如何在项目中快速建立起一套比较完整的DevOps工具链支持。
    的头像 发表于 04-05 18:30 6799次阅读
    <b class='flag-5'>DevOps</b>工具链的项目端到端应用<b class='flag-5'>实践</b>过程

    DevOps工程师是干什么的

    我们之前已经听到很多谈论DevOpsDevOps世界的最新趋势的事情,但是就DevOps工程师本身,到底干些什么呢?
    的头像 发表于 09-24 16:37 4945次阅读

    DevOps工程师必知的7大技能

    从应付DevOps压力的角度出发,DevOps工程师除了需要日常技能的基础,每个工程师都必须具备多种技能。DevOps工程师除了要对脚本和编码有着强烈的热情之外,还必须具有开放的思想和协作精神,才能成功地执行该过程。
    的头像 发表于 04-26 18:14 6643次阅读

    DevOps Foundation® 是什么?DevOps塑造着软件世界的未来

    DevOps Foundation® 课程旨在培养个人对 DevOps Foundation® 概念的理解以及 DevOps 如何用于提升软件开发人员和 IT 运维人员之间沟通、合作和
    的头像 发表于 04-16 12:46 5188次阅读

    深度解读什么是DevOp以及DevOps的技术实现

    近两年,随着容器、Kubernetes 等技术的兴起,DevOps 这个概念被广泛提及并被大量使用。本文将会从DevOps的产生、DevOps 与容器/Kubernetes 之间的关系、Dev
    的头像 发表于 06-21 17:46 3701次阅读
    深度解读什么是DevOp以及<b class='flag-5'>DevOps</b>的技术实现

    什么是DevOpsDevOps的优势以及生命周期

    在大多数情况下,软件应用程序开发由于其规范性和复杂性而变得很耗时。为了在短时间内交付高质量应用程序,软件开发人员正在遵循一套通用的实践,称为DevOps生命周期。那么,DevOps在软件应用程序开发
    的头像 发表于 06-29 17:19 4982次阅读
    什么是<b class='flag-5'>DevOps</b>?<b class='flag-5'>DevOps</b>的优势以及生命周期

    云原生技术下的华为云DevOps实践之路

    DevOps最早在2009年被人提出,愿景非常美好,但真正实施起来困难重重。 随着近几年微服务、容器等技术的兴起,使得企业对DevOps的需求更加迫切,实施变得更加容易,DevOps越来越被接受
    的头像 发表于 12-06 16:52 2244次阅读

    项目实施DevOps时,我们是如何做测试的

    ,因此想趁热打铁,就DevOps模式下如何做测试,谈一谈自己的认知。 DevOps有什么特征 DevOps是一系列软件开发实践,强调开发人员(Dev)和运维人员(Ops)之间的沟通合作
    的头像 发表于 12-16 17:33 1928次阅读
    项目实施<b class='flag-5'>DevOps</b>时,我们是如何做测试的

    ks-devops基于Kubernetes的DevOps平台

    gitee-ks-devops.zip
    发表于 04-28 10:39 1次下载
    ks-<b class='flag-5'>devops</b>基于Kubernetes的<b class='flag-5'>DevOps</b>平台

    DevOps的基本知识介绍

    根据Google DORA( DevOps、Research与Assessment)团队最新的《DevOps现状》报告,在DevOps方面成效不佳的团队很少能够在6个月内将软件投入生产运营。
    的头像 发表于 06-01 10:51 1334次阅读

    DevOps如何加速软件开发过程

      DevOps 已成为当今技术世界中任何云解决方案不可或缺的一部分。为了使云解决方案的旅程顺利、高效和有效,必须遵循 DevOps 原则和实践
    的头像 发表于 07-01 09:25 575次阅读

    软通动力DevOps团队荣获“2022年互联网行业DevOps领域明星团队”

    作为DevOps 规范任务组成员单位,软通动力具备成熟的DevOps端到端建设能力。迄今为止,软通动力已成功协助多个客户实现了 DevOps 相关工程实践落地,并围绕这一过程研发了相关
    的头像 发表于 11-15 15:27 476次阅读

    DevOps自动化的核心

    DevOps全自动化运维平台,用于从代码到生产对可信软件版本进行分发。参与的DevOps项目具有用户、资源和权限,可加快部署频率。
    的头像 发表于 04-13 09:41 443次阅读

    什么是DevOps中的持续测试?持续测试如何融入DevOps

    持续测试(CT) 是在整个软件开发生命周期(SDLC) 中自动测试软件应用程序和组件的实践。在 DevOps 中,持续测试是在整个DevOps 管道中集成测试活动的实践
    的头像 发表于 01-09 09:10 163次阅读
    什么是<b class='flag-5'>DevOps</b>中的持续测试?持续测试如何融入<b class='flag-5'>DevOps</b>?