Jenkins简介

2019/06/23 CICD

Jenkins简介

​ 使用jenkins已经很久了,突然想着总结一些,就找了找之间在公司分享devops时候使用的ppt,再加上自己使用这两年来的理解。

1、什么是Jenkins

  1. Jenkins是一款非常优秀的开源持续集成&持续部署的工具,用于自动化各种任务,包括构建,测试,部署和定时任务等。
  2. Jenkins的底层编译语言是java,内置groovy plugin,新版支持pipeline之后,pipeline为groovy语言编译。
  3. Jenkins目前集成了非常强大的插件生态,大约有一千多个插件,有我们常用的git插件,maven插件,docker插件,k8s插件,邮件插件等,可以访问https://plugins.jenkins.io/进行查阅。
  4. Jenkins从2.0版本之后,pipeline的引入使得jenkins的配置可以版本化,将jenkins的配置和程序源码统一放到代码仓库中管理。
  5. Jenkins完成了开发CICD的最重要的一个过程,将所有的工具整合到一起,使用BlueOceran界面展示出了一个非常好看的流水线过程。从代码拉取,代码分析,自定构建打包,镜像,存放制品,部署,自动化测试,邮件发送结果等一系列的工作,它本身,或者集成的工具都可以做得很好。

2、Jenkins的安装

​ jenkins安装方式很多,本身产品做得也很灵活,是一个值得学习的产品。

  1. rpm包安装,添加jenkins的repo地址,或者直接到jenkins的官网下载,yum下载安装即可。 http://pkg.jenkins-ci.org/redhat-stable/
  2. war包安装,war包放到tomcat容器中启动即可,从官网即可下载最新或者历史版本的war。
  3. docker安装,jenkins镜像启动即可,dockerhub也好,自己制作也好,很多人,包括我在内,对jenkins镜像做了很多改动,集成了很多工具,赋予了它强大的灵魂。
  4. helm安装,helm是k8s的一个子项目,旨在管理复杂的k8s资源文件,对于jenkins来说,部署在k8s中也是一种策略,stable仓库中有jenkins的helm包,当然我在公司也基于个性化的jenkins镜像制作了几个版本。

3、Jenkins的使用

​ Jenkins安装完成之后,输入秘钥,初始化插件(使用公司镜像和helm方式安装不用初始化插件),这个和阿里云平台上对jenkins的策略是一样的,插件都是安装好的,直接映射工作空间即可。

3.1、配置式构建任务

登录jenkins,创建job,进行项目构建。

​ 新建任务-maven项目-填写描述,git仓库,凭证,选择分支,执行脚本进行maven打包构建,执行脚本进行镜像构建,镜像上传,删除本地镜像,helm打包等,持久化构建完成的程序包,发送邮件通知开发者构建完成,并告知程序包获取地址,镜像名称和版本号。

使用jenkins部署的方式很多种

  1. ssh publish 到远端服务器上,执行脚本查看服务是否存在,环境检查等,发送本次构建的程序包,完成部署。
  2. sshpass到目标docker机器上执行部署
  3. Jenkins所在服务器集成kubectl客户端,执行k8s部署
  4. Jenkins所在服务器集成helm客户端,执行helm安装应用。

3.2、编程式构建任务

​ jenkins2.0之后支持pipeline,将整个job过程写成配置文件供jenkins识别完成整个执行过程,陪上blueocean整个构建过程可视化。

​ 在jenkins服务中,点击新建任务,选择流水线,填写描述,配置webhook,在流水线的文本框中填写pipeline内容,jenkins会按照pipeline中的内容识别完成整个执行过程,jenkins官方提供了很详细的流水线语法讲解,groovy语言编译,支持shell命令,bat命令执行,并且集成了很多的方法, 如cleanWS()清除工作空间,发送邮件等。

​ 让我们最感兴趣的式多分支流水线解决了分支部署,分支测试的CICD难题,我们只需要把完成的Jenkinsfile放到gitlab中,在blueocean中创建流水线,填写git地址,填写凭证,点击创建,Jenkins为识别所有在根目录在有Jenkinsfile的分支进行创建,并且在gitlab中配置多分支流水线webhook,就可以实现多分支的CICD。如图所示

4、Jenkins的数据存储

Jenkins并不是像我们普通的项目一样,使用数据库作为存储,而是用文件作为存储,在jenkins所在的宿主机上,会有对应的Jenkins home,里面包含了Jenkins的所有配置和缓存,像Jenkins的配置,Jenkins的job,build内容,jenkins的用户秘钥,Jenkins的插件内容,Jenkins的日志,Jenkins的工作空间,等等,一般Jenkins镜像化之后,持久化的目录就是这个,备份的话也是操作这个目录。

5、jenkins的集群化操作

​ Jenkins服务执行了从拉取程序,构建,测试,制作镜像,部署等很多过程,当在其上面部署的应用很多的时候,Jenkins的压力就非常大,就需要集群化操作。

​ Jenkins使用slave节点完成自身的集群化,master负责调度,slave负责执行,slave没有UI.

​ 两种方式实现集群化。

  1. 在master中配置slave节点,docker启动slave,向master注册,通讯保持,一直存活。

  2. 使用jenkins中的k8s插件,让slave运行在K8s集群中,存活周期为一次构建,构建完成,该Slave运行的pod销毁,下次启动会创建新的。

6、个人对Jenkins的看法

​ 从18年在做公司产品开发的时候,使用Jenkins完成程序包的构建,到年底推广DevOps,利用Jenkins完成镜像制作,docker部署过程,Jenkins极大的提升了开发部署效率。

​ 19年初开始正式做部门内部的DevOps工作,Jenkins作为主力工具,集成了十几种工作,完成了各种各样的构建,测试,部署需求,之后,又不断的添加Jenkins周边工具形成了一个比较全的DevOps工具集,这些工具完成了DevOps的整个过程。将Dockerfile,helm charts包,Jenkinsfile都统一交给gitlab管理,解耦了对单一Jenkins服务的依赖,使得项目的CICD变得更加稳定,为了保证DevOps的持续性和高效率,又对Jenkins进行了集群化操作,备份操作,一键安装操作等。

​ 接触Jenkins依赖,感觉这个工具对CICD给出了很好的解决思路和参考,提供了可视化的流水线操作,使得开发的部署更加的友好。

​ 当然,Jenkins并不是CICD的唯一代言人,gitlab CI,drone,包括现在号称云上CICD最牛的jenkinsX平台,都是很优秀的CICD解决方案,其实,我们更应该关注CICD方案本身,而不是单纯的依靠某一个工具。

Search

    欢迎添加我的个人微信号

    个人微信哦

    Table of Contents