GitLab 与 Jenkins

1、持续集成概述及运行流程

1.1、CI/CD介绍

吧开发工作流程分为以下几个阶段

编码-》构建-》集成-》测试-》交付-》部署

 正如你在上图中看到,持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)有着不同的软件自动化交付周期

2、概述

 1、持续集成(CI)

持续集成是找开发者在代码的开发过程中,可以频繁的将代码合并到主干源码仓库,并立刻进行构建、测试。根据测试结果,我们可以确定新代码和原有代码能否正确的集成在一起

他的好处主要有两个

1、快速发现错误。每完成一点开发,就集成主干,可以快速发现错误,定位错误也比较容易

2、防止分支大幅度偏离主干。如果不是经常集成,主干又不在不断更新,会导致以后集成难度变大,甚至难以集成

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。持续集成并不能消除Bug,而是让它们非常容易发现和改正

持续交付:

指的是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。

持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的

 

持续部署

持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,部署到生产环境

持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段

持续部署的前提是能自动化完成测试、构建、部署等步骤。它与持续交付的区别,可以参考下图

总的来说,CI/CD提供了一个优秀的DevOps环境。对整个团队开发团队来说,能很大的提升开发效率,好处与挑战并行,无论如何,频繁部署、快速交付以及开发测试自动化都将成为未来软件工程师的重要成分

 2、流程

1、提交

开发人员向代码仓库提交代码

2、测试(第一轮)

对代码仓库commit操作配置个钩子(hook)程序,只要提交代码或者合并主干,就会到自动化程序

测试有好几中

单元测试:针对单元测试

集成测试:针对整体产品的功能的测试,又称为功能测试

端对端测试:从用户界面直达数据库的全链路测试

第一轮至少要跑单元测试

注:钩子程序它属于是一种监控机制,来监控git仓库有没有提交或者合并的事件发生钩子程序就会通知ci/cd通知jenkins开始跑自动化测试

3、构建

吧ci完成的相关代码合并到主干分支,然后交付给相关的测试或者运维部门,然后就可以进行第二次测试

常用的构建工具Jenkins、Travis、Codeship、Strider。Jenkins和Strider是开源软件,Travis和Codeship对于开源项目可以免费使用。它们都会将构建和测试,在一次运行中执行完成。

4、测试(第二轮)

第二轮测试是全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试。所有测试以自动化为主,少数无法自动化的测试用例,就要人工跑

5、部署

通过了第二轮测试,当前代码就是一个可以直接部署的版本了。将这个版本的所有文件打包( tar filename.tar * )存档,发到生产服务器

生产服务器将打包文件,解包成本地的一个目录,再将运行路径的符号链接(symlink)指向这个目录,然后重新启动应用。这方面的部署工具有Ansible,Chef,Puppet等

6、回滚

当发现有问题,就要回滚到上一个版本

3、jenkins概述

Jenkins 概述:是一个开源软件项目,是基于Java开发的一种持续集成、交付、部署的基于web界面的平台,用于自动化各种任务,包括构建、测试和部署软件

Jenkins其实很早之前就有了,最近火起来的原因是,大家都在关注devops,关注如何来做CI/CD。Jenkins作为持续集成的工具,他其实只是一个平台或者是一个大的框架,它的工作完全就是依靠插件,也就是说你想使用什么功能,你就找到什么样的插件

4、GitLab 概述

gitlab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web界面进行访问公开的或者私人项目。Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架

 GitLab 拥有与Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找

5、项目的部署方式

分为两种

手动部署和自动化部署

手动部署

自动化部署

 “自动化” 的具体体现:向版本库提交新的代码后,应用服务器上自动部署,用户或测试人员使用的马上就是最新的应用程序

 

 搭建上述持续集成环境可以把整个构建、部署过程自动化,很大程度上减轻工作量。对于程序员的日常开发来说不会造成任何额外负担,自己把代码提交上去之后,服务器上运行的马上就是最新版本

6、集群和分布式

 通过此图可以形象的解释集群和分布式的含义:
单机结构中的全栈意思是:即做前端的js、css、html等,又做后端的java等
集群结构中的全栈意思是:同时有两个或者更多的人即做前端,又做后端
分布式的意思就是此图所表示的:将后端和前端分开,各做各的

7、持续集成系统的工作流程

 

 这里是选择Gitlab作为git server。Gitlab的功能和Github差不多,但是是开源的,可以用来搭建私有git server,也提供非常强大的web GUI,比如开发者互相review源代码的时候就会很方便。
 系统的工作流程大概分为以下几步:
 1> 开发者将新版本push到git server (Gitlab)。
 2> Gitlab随后触发jenkins master结点进行一次build。(通过web hook或者定时检测)
 3> jenkins master结点将这个build任务分配给若干个注册的slave结点中的一个,这个slave结点根据一个事先设置好的脚本进行build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给jenkins来做。
 4> 我们在build中要进行编译,这里使用了分布式编译器distcc来加快编译速度。
 注:
 jenkins的工作原理是先将源代码从gitlab中拷贝一份到本地,然后根据设置的脚本进行build。我们可以看出,整个系统的关键就是那个build脚本,用来告诉jenkins在一次集成中需要执行的任务
 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值