精华内容
下载资源
问答
  • 持续集成(CI)系统
    千次阅读
    2020-03-31 14:39:13

                                持续集成(CI)系统

     

    gitlab、gerrit、jenkins三大系统整体框架

    开发本地从gerrit下载代码进行开发后将代码git push review到Gerrit系统上, Jenkins 在监听 Gerrit 上的项目事件会触发构建任务来测试代码,Jenkins把测试结果通过 ssh gerrit 给这个项目打上 Verified (信息校验)成功或失败标记,成功邮件通知审核人员 Review(代码审核),审核人通过查看提交的文件进行人工检查代码,判断合格后合并提交,本次提交merge后会自动同步到gitlab备份。

    一,gitlab

    主要用途:代码备份、在线浏览。在本集成系统中gitlab不提供修改和人为提交功能。

    GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。

    界面如图下:

     

    二、gerrit

    Gerrit,一种免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。

     

    主要用途:代码审核

    开发需要做的是:
    (1)向管理员申请账号,拿着账号根据《gerrit注册用户及使用指导》(这里不提下载请度娘一下)对接gerrit系统,连接成功并修改用户名后通知管理员(由管理员注册邮箱并使用邮箱添加权限)
    (2)下载代码-本地开发-代码提交审核
    常用命令:
    git clone gerrit仓库地址 分支名(无分支名则默认master)
    ./gerrit_env_branch 自己的名字 评审人的名字 git仓名 分支名

    gerrit_env_branch脚本如下:

    #!/bin/bash
    
    BRANCH=master
    
    if [ ! -n "$1" ];
    then
    	echo "[error]: please input your name"
    	exit;
    elif [ ! -n "$2" ];
    then
    	echo "[error]: please input reveiwer name"
    	exit;
    elif [ ! -n "$3" ];
    then 
    	echo "[error]: please input your project name"
    	exit;
    elif [ -n "$4" ];
    then 
    	echo "[Notice] Use branch $4"
    	BRANCH=$4
    fi
    
    echo welcome $1,now begin config......
    
    #config git user name and email
    git config --global user.name "$1"
    git config --global user.email $1@yourmail.cn
    
    #download commit-msg for change-Id
    echo "Download the commit-msg file from gerrit server..."
    scp -P 29418 -p $1@192.168.10.53:hooks/commit-msg .git/hooks/
    chmod 777 .git/hooks/commit-msg
    echo "Dowmload completed."
    
    #check the git config file 
    if grep -q review .git/config;
    then
    	echo "recovery git config file......"
    	cp .git/.config-bak .git/config
    else
    	cp .git/config .git/.config-bak
    
    fi
    
    #modify the git config file,add reviewer
    echo "[remote \"review\"]
    	url = ssh://$1@192.168.10.53:29418/$3
    	push = HEAD:refs/for/$BRANCH%r=$2@yourmail.cn,cc=yourmail@roadrover.cn" >> .git/config
    echo Config Success Done!
    


    git add 修改的文件名
    git commit
    git push review
    (3)登录gerrit页面跟踪审核状态,如果是jenkins门禁失败,分析失败原因(可能是漏提交文件、依赖还未合并、分支切换未通知管理员同步切换等),如果不是代码本身问题告知管理员解决。
    附:审核失败不可再通过Abandon Change按钮撤销,需要git rebase -i + git commit —amend + 重新提交审核,具体操作留给邱工作说明~

    下图为某次提交的审核状态

     

     

    三、jenkins

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。

    1,下载:https://jenkins.io/zh/

    2,主要用途:分布式运行多任务、持续的软件版本发布/测试项目、监控外部调用执行的工作。

    =================================================================

    需要开发做的工作:

    1. 代码提交地址变更:gitlab —->>> gerrit
      前期代码提交地址是gitlab(因为项目前期,管理员这边还未参与,gitlab上的仓库都是由应用/系统负责人创建,开发往gitlab提交代码),当管理员介入时,需要负责人提供该项目的仓库地址并给管理员开通master权限,管理员迁移仓库到gerrit后会将gitlab仓库其他成员的权限修改为Reporter(只允许下载)
      特别注意:
      一旦仓库切到gerrit之后,开发须使用gerrit下载代码提交并走审核,不可再直接往gitlab提交,如需要创建分支也找管理员创建。

    2. 门禁配置
      jenkins的门禁工程由管理员创建,门禁工程所做的事是:
      第一、编译
      第二、静态代码检查
      后面会加git commit规范检查和上机做monkey测试。
      需要应用开发做的是:
      (1)提供管理员依赖仓的地址+分支名
      (2)在app/build.gradle增加findbugs任务

    task findbugs(type: FindBugs) {//
     ignoreFailures = true
     effort = "default"
     reportLevel = "medium"
     //过滤器
     excludeFilter = new File("${project.rootDir}/findbug_filter.xml")
     //这里填写项目classes目录
     classes = files("ivi-radio/build/intermediates/classes")
     source = fileTree('src/main/java')
     classpath = files()
     reports {
         //只能开启一个
         xml.enabled = true
         html.enabled = false
     }

    3.  jenkins版本工程配置
    工程配置由管理员完成,需要系统开发做的是:
    (1)提供代码目录架构,并指明仓库地址
    (2)提供编译命令
    jenkins日常使用:
    1.构建版本
    构建触发方式: (构建结果可配置邮件通知)
    第一种:手动触发,由管理员或者开发自己构建(需要自行注册jenkins账号,然后由管理员添加build权限)
    第二种:定时触发,根据项目需要通知管理员配置构建时间
    2.升级包下载
    3.修改记录查看
    4.构建log查看
     

    更多相关内容
  • 本文简要叙述了使用Subversion、Hudson和Eclipse构建持续集成系统的过程。持续集成系统是指持续地编译、测试、检查和部署源代码的系统。持续集成是一种软件开发实践,团队开发成员经常集成它们的工作,通常每个成员...
  • 本文分析了持续集成系统的功能点,比较Jenkins,Teamcity这两款持续集成工具的优缺点,最后总结了持续集成的最佳实践要点。阅读对象:研发以及研发管理人员,研发工具研究爱好者持续集成(Continuousintegration),...
  • 持续集成( Continuous Integration,简称 CI)是一种软件开发实践,在实践中 项目成员频繁地进行集成,通常每个成员每天都会做集成工作,如此,每天整个 项目将会有多次集成。每次集成后都会通过自动化构建(包括...
  • Jenkins是开源的一套持续集成框架,可以进行大规模的编译、测试和发布的工作,给软件开发团队带来极大的便利性。Jenkins的持续集成环境可以是集群化的,主要的运行模式为master-slave模式。Jenkins的master为Jenkins...
  • 网络技术-系统集成-采用AOP构建高可扩展性持续集成系统的研究与实现.pdf
  • 基于容器化的持续集成系统.pdf
  • 基于容器化的持续集成系统.docx
  • Android项目持续集成系统设计与实现.pdf
  • 使用Python和Shell编写的持续集成系统
  • 一种基于容器化的持续集成系统.pdf
  • esioci:esioci是新一代的持续集成系统
  • Jenkins持续集成系统部署文档
  • 使用Jenkins和Kubernetes搭建一个可伸缩的持续集成系统教程:Jenkins和它的插件体系、使用Docker启动Jenkins服务、Jenkins Pipelin 2.0和持续集成、基于Dockerd持续交付、基于Kubernetes的可伸缩持续集成。...
  • 首先来看什么是持续集成。大师MartinFowler,敏捷开发方法的创始人之一,提出的敏捷开发方法是一种思想,可以为软件的研发提供指导性的建议。而持续集成则是敏捷开发具体实践的一个建议环节,通过这个环节可以在研发...
  • PM01-蒋志强-持续集成和发布在蘑菇街的实践,详细介绍了蘑菇街的相关技术
  • 其中以Jenkins介绍较多,微软也提供一套自动化部署的方式,也有一些其他持续集成工具可以实现自动化的发布,但最终还是选择了Jenkins。主要有以下几个原因:代码开源、插件丰富完善、系统稳定 社区活跃,成功实践和...
  • 持续集成方案

    2021-02-25 09:58:54
    在使用持续集成之前,很多开发团队都是用每日构建...持续集成系统的输出通常作为手工测试流程和后续发布流程的输入。在软件的发布过程中,很多浪费来自于测试和运维环节。例如:我们常常看到:1.构建和运维团队的人
  • 持续集成实践

    2018-08-12 15:53:29
    持续集成实践pdf是一本专业的软件开发类参考图书,该书系统介绍了持续集成的基础理论、核心价值、实践步骤以及测试工具等内容,理论讲解浅显易懂,适合入门学习,
  • 建立可持续集成系统(Jenkins)

    千次阅读 2016-06-20 17:26:10
    在软件工程实践中,...集成系统:输入指定的软件资产,输出根据软件资产生产出的软件产品以及其他副产品的系统。 对于一般系统而言(以VC开发为例),软件的生产过程包括:源码获取,源码检查,源码编译,测试,部署

    在软件工程实践中,需要将开发完成的最终产品交付给用户(或发布给测试部门),就需要我们将源代码编译为可执行文件。将各个分别开发的模块集合为一个完整的系统,这个过程成为系统集成,我们用一个系统来描述这个集成过程。

    集成系统:输入指定的软件资产,输出根据软件资产生产出的软件产品以及其他副产品的系统。

    对于一般系统而言(以VC开发为例),软件的生产过程包括:源码获取,源码检查,源码编译,测试,部署。经历以上几个过程之后得到一个可用的系统。

    故一般而言集成系统通常会按照顺序经历以下几个模块组成:

    1. 版本检查:用于获取代码和其他必要的文件。

    2. 源码检查:对于源代码的静态分析,检查可能存在的错误。

    3. 源码编译:通过编译器和连接器编译源文件,生产可执行文件或库。

    4. 测试:通过对编译出来的文件进行一定测试,并获得测试结果。

    5. 部署:若测试通过则文件可以作为最终得到的产物用于交付。


    在实践过程中软件的最终集成会存在各种各样的问题而导致集成失败,需要大量的修改和测试,而得到最终可以的交付的产品。故每次版本发布时的加班不可避免,而交付的延期也时常发生,软件的质量不可保证。为了解决这些问题或者说减少修复这些问题所需要付出的成本,我们尽量让这些问题提早发生(问题越早发生修复的代价越小)。因此我们可以以一定频率对工程的更改进行集成,若集成失败则尽早修复,以保证能够得到可交付的产品,这样的实践称为持续集成。

    我们可以将系统集成的工作交由项目经理负责,让项目经理定期集成系统并发布版本,我们称之为人肉集成系统:

    1. 版本检查:SVN或者Git工具能够check out出代码的工具都可以。

    2. 源码检查:使用beyondcompare等工具对比原有版本,通过codereview的方式用肉眼对代码进行检查,好坏全凭项目经理的经验。

    3. 源码编译:VS工程的生成功能,将源代码编译,连接,生成可执行文件或库。

    4. 测试:跑完单元测试,对文件的功能进行测试,或检查是否功能完备或者bug是否已经得到修复。

    5. 部署:将生成的文件打包交付。


    人肉集成系统处理了集成最大的问题,通过项目经理以一定频率反复执行以上过程保证交付。但是项目经理的精力完全被消耗在这个重复劳动的过程中,而且质量保证完全取决于项目经理的经验和能力,并且不能量化结果对于决策的支持有限。以上几个模块会被按顺序重复执行,若有一定的工具可以自动完成以上模块的各个功能则可以将项目经理从繁复的重复劳动中解脱出来,大大的节省项目成本。故我们需要构建一个自动持续集成系统来取代人肉集成系统,感谢开源工具让我们能够使用自动化的工具完成以上各个模块的功能,并通过CI工具反复执行,自动集成系统同样包含一下模块:

    1. 版本检查:SVN或者Git工具能够check out出代码的工具都可以。

    2. 源码检查:使用cpplint检查代码规范,使用cppcheck静态检查代码缺陷,使用cppncss或SourceMonitor分析代码复杂度。

    3. 源码编译:通过命令行调用VS工程的生成功能,将源代码编译,连接,生成可执行文件或库。

    4. 测试:执行gtest和gmock进行单元测试和回归测试,通过opencppcoverage来检查代码覆盖率。

    5. 部署:将生成的文件打包交付。

    我们使用jenkins作为CI工具,来完成持续集成的各个模块的管理(jenkins的插件能够帮助我们完成以上工作)。


    我们在windows7下构建CI服务器,并使用vs2013作为开发环境来完成一个CITest的持续构建活动。接下来使用CITest的编码来模拟日常的开发工作,并从开发人员与项目经理两个角色参与CI系统的搭建。

    1. 使用VS2013新建C++工程CITest,并编写一些代码用于测试。


    2. 选择代码仓库,Git不是很熟悉一直用subversion,而且资源有限并不想多架设一条svn的服务器而且作为一个test项目代码需要的空间有限,故选用免费的代码托管服务器(taocode),以此svn地址作为上传下载代码的地址,上传CITest工程代码和工程文件。



    3. 将静态代码检查工具集成到VS上

    推荐google的c++代码规范 (注释风格参考doxygen的格式,使用代码风格检查工具cpplint:

    先安装python2.7,下载cpplint.py到目录C:\cpplint,打开vs,工具菜单,选择外部工具将cpplint添加进去,再通过工具.选项.键盘为cpplint分配快捷键


    添加代码段保持注释的风格一致,工具代码段管理器,导入代码段定义文件,并在工具.选项.文本编辑器.c++.制表符中见制表符替换为两个空格:



    安装完成后运行一次,修复报告的所有问题



    再将静态分析工具cppcheck集成到vs上,与cpplint一样为cppcheck添加快捷键:



    修改代码以使得通过检验。

    使用SourceMonitor测量代码复杂度:



    4. 用命令行编译VS工程

    基于后期使用jenkins持续集成系统的考虑,这里使用ant,调用devenv命令来编译解决方案。

    先安装ant,并配置环境变量,再配置devenv的环境变量,编写bulid.xml放到工程的根目录下,并作为项目资产加入svn,在工程目录下运行ant。


    5. 为工程添加单元测试

    感谢google提供的两个工具,使得完成单元测试的工作变得简单。在实际开发中需要采用测试驱动开发的实践:

    我们下载gtest和gmock两个工具,然后根据被测试代码所在工程的运行库选项并编译他们:


    创建一个空的工程用于单元测试,并将上一步生存的lib文件和头文件拷贝到单元测试工程目录下:


    在工程文件中增加一个用于单元测试的配置,定义输出为lib文件,在单元测试的工程中包含他们,编写测试代码:




    测试代码的编写参考网上的资料:主要有玩转google开元c++单元测试系统和GMockForDummies,cheat sheet,cookbook这几份资料。

    在ant的bulid.xml文件中添加target,实现自动化


    6.安装并使用opencppcoverage开查看测试代码的覆盖率


    以上在开发端的设置全部完成,或者还有其他的需要补充的工具可以视具体项目再决定如何补充和添加。

    接下来使用jenkins来搭建CI服务器,在客户端完成私有构建后将代码提交到svn上,CI服务器将执行以上所有的构建和测试动作,并将结果反馈给相关人员,构建失败应当是优先级最高的处理事件(在错误的基础上做的再多也是白费功夫)。

    1.安装Jenkins和需要的插件

    2.创建一个自由风格的项目,填写基本信息





    2.定义构建动作并解析构建结果(使用以上与客户端相同的工具,并将构建结果解析出来)

    cpplint(此处lint.py遍历当前目录,检查所有.h和.cpp文件,并将结果输出到xml文件中):



    cppcheck:



    SourceMonitor:



    Ant(需要根目录下的build.xml文件支持)


    opencppcoverage(在build.xml文件中去掉执行单元测试的部分内容,在此同时输出两个文件)




    最后在配置邮件通知:


    至此CI系统配置完成,返回上一级,点击立即构建(上边每一步每添加一个功能构建一次,直到这些功能配置完成):




    展开全文
  • 持续集成的开发实践是目前的一个热门话题,在本文中,数人科技云平台负责人周伟涛解析其利用开源的Jenkins,ApacheMesos和Marathon搭建弹性的,高...Jenkins是一个开源项目,它提供了一种易于使用的持续集成系统;Me
  • 持续集成的生态系统

    2018-11-22 11:11:41
    持续集成的特点 ❖ 为开发者提供服务 ❖ 团队协作 ❖ 开发者、代码仓库、持续集成服务,形成⼀一个闭环。 ❖ 考试时,提交试卷,批改后打回来,继续作答,再提 交,直到满分。 ❖ 本地构建是第⼀一道关,持续集成的...
  • 蓝盾(bk-ci)是一个开源的持续集成和持续交付系统,使用蓝盾可以轻松将你的研发流程呈现到你面前。
  • 持续集成git仓库

    2021-02-24 00:07:20
    持续集成03.代码质量管理工具04.程序员鼓励师既然这么好?为什么有些公司没有设计架构规划-代码的存储-构建-测试、预生产、部署、监控vcs`versioncontrolsystem`版本控制系统是一种记录一个或若干个文件内容变化,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 201,115
精华内容 80,446
关键字:

持续集成系统

友情链接: ST 2082-10.rar