2020/01/03 基于sharedLibrary进行CICD流程的优化(一)

第1章 shared-library工作模式

1.1 sharedLibrary工作模式介绍

在这里插入图片描述
基本上每个项目的构建过程都是一样的,能改动的地方不多,检代码,做CI,构建,镜像推送,部署,后面发消息

在这里插入图片描述
比如发消息是每个项目都要用的,可以抽象成方法
在这里插入图片描述
用groovy去开发sharelibrary,这个库有很多公告逻辑
在这里插入图片描述
library如何去工作。DRY就是don’t repeat yourself
在这里插入图片描述
在这里插入图片描述
实际运用中,jenkins会把library的实际定义公共功能添加到构建目录中

在这里插入图片描述

之前是这么写的,retry(2)执行两次,这里就没有什么错误判断,处理异常的逻辑
在这里插入图片描述
devops就是我们创建的一个共享库,buildimage也就是公共的方法,所以可以把一些处理异常的放在公共的方法里

在这里插入图片描述
比如这样的逻辑
在这里插入图片描述

第2章 Groovy项目语法实践

2.1 开发环境搭建

在这里插入图片描述

在这里插入图片描述
安装jdk

在这里插入图片描述
配置环境变量

在这里插入图片描述
第一个环境变量java home

在这里插入图片描述
第二个环境变量,classpath,这个值是固定的
在这里插入图片描述
在这里插入图片描述
新建一个

在这里插入图片描述
测试一下

在这里插入图片描述
安装groovy
在这里插入图片描述
只需要做一个解压

在这里插入图片描述
在这里插入图片描述
同时path路径下也需要bin目录加进去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装idea

在这里插入图片描述
在这里插入图片描述
快捷方式,关联文件

在这里插入图片描述
30天试用

在这里插入图片描述
在这里插入图片描述
jenkins的sharelibrary,用groovy来写,选择jdk1.8版本
在这里插入图片描述
选择groovy库
在这里插入图片描述
在这里插入图片描述
选择放在哪个目录里
在这里插入图片描述
现在项目就创建好了

在这里插入图片描述
验证能否使用,创建groovy的脚本
在这里插入图片描述
在这里插入图片描述
现在是可以跑的

在这里插入图片描述

在这里插入图片描述

2.2 Groovy基本语法实践(上)

library的代码结构,src,vars两个目录
在这里插入图片描述
这个j是代表java的

在这里插入图片描述

groovy是java派系的,但是偏向脚本式的语言
在这里插入图片描述
在这里插入图片描述
起一个jenkins-share-library
在这里插入图片描述
可以再建立一个目录
在这里插入图片描述
test目录下建立脚本

在这里插入图片描述
就有正常打印

在这里插入图片描述
可以定义一个方法

在这里插入图片描述
创建一个package

在这里插入图片描述
创建一个groovy

在这里插入图片描述
new就是创建类里面的实例
在这里插入图片描述
可以定位到sayhi在哪里
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
现在定义三个方法。this其实就是返回类的自己

在这里插入图片描述
在这里插入图片描述
让saybye return一个值
在这里插入图片描述
在这里插入图片描述
init是返回this这个类,所以可以调用任何方法
在这里插入图片描述
在这里插入图片描述
异常处理,这样会出错
在这里插入图片描述
改造成不报错,try,catch一个exception
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.3 Groovy基本语法实践(下)

在这里插入图片描述
执行看一下

在这里插入图片描述
导入类

在这里插入图片描述
timecatrgory.plus(加)new date当前时间的基础上,getseconds秒,也就是在当前时间基础上+15秒

在这里插入图片描述
break是可以跳出循环的

在这里插入图片描述
倒计时
这个可以应用在,kubectl创建deployment的时候,要去实时检测创建是否成功,不能一直等待看他是否成功,把时间设置5分钟,一直去检测,5分钟到了,就退出监测
在这里插入图片描述
在这里插入图片描述
安装groovy的时候没带,这个是groovy外部解析yaml文件比较好用的包
在这里插入图片描述

在这里插入图片描述
这里就有包了

在这里插入图片描述
准备一个读的yaml文件
在这里插入图片描述
在这里插入图片描述
复制到这里
在这里插入图片描述
取里面的值

在这里插入图片描述
kind就是这一个值

在这里插入图片描述
metadata name
在这里插入图片描述
现在就读取到了

在这里插入图片描述
打印spec replicas

在这里插入图片描述

第3章 library与jenkins集成

3.1 Library与Jenkins集成

jenkins怎么去和刚才写的library做集成
在这里插入图片描述
在这里插入图片描述
先创建一个package

在这里插入图片描述
第一个hello把内容初始化进去,把前面传来的参数放到this对象

在这里插入图片描述
要在jenkins使用library,需要先配置jenkins

在这里插入图片描述
在这里插入图片描述
创建项目
在这里插入图片描述
把一个目录推送到仓库里
在这里插入图片描述

创建一个.gitgnore,让一些目录不提交到gitlab上
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
已经关联到git仓库了
在这里插入图片描述
在这里插入图片描述
已经推送过去了

在这里插入图片描述
在这里插入图片描述
现在去jenkins配置一下library地址

在这里插入图片描述
在这里插入图片描述
**name library名字
default version jenkins里要去找仓库的默认版本(master分支)
**
在这里插入图片描述
scm管理器就是git
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在有了library,jenkinsfile就简化了

在这里插入图片描述
在这里插入图片描述
devops从哪里来的就需要建立目录

在这里插入图片描述
创建vars目录下有一个devops的脚本,也就是vars这个文件其实就是暴露library使用的入口。在devops去实现对src里方法的调用,也就支持下面对jenkinsfile的方法调用了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的方法就是devops最初调用的方法,返回值就是hello.groovy的对象,就可以在jenkinsfile做一个连续的调用

在这里插入图片描述
把新家的文件提交到仓库里

在这里插入图片描述就是为了打通jenkinsfile的调用关系

在这里插入图片描述
在这里插入图片描述
现在就进行调度了

在这里插入图片描述
在这里插入图片描述
也就是在jenknsfle里就可以调用library了,代码构建,服务部署,消息推送都可以实现在library里

在这里插入图片描述

第4章 library实现镜像构建及推送

4.1 Library集成docker镜像构建

用library正式实现镜像构建推送的功能
在这里插入图片描述
想要在jenkinsfile里调用就需要在var是下定义方法,可以给默认值,镜像是repo+tag两个参数,dockerfile路径
在这里插入图片描述

以前构建docker镜像的方法
在这里插入图片描述
但是通常有默认值的放在后面,排一下序
在这里插入图片描述
上面的只是一个入口,真正去执行的docker构建还需要放在上面的实现脚本里,新建一个Docker.groovy。
传递的参数都放到this里

在这里插入图片描述
现在去做一个构建,在groovy脚本里可以通过sh方法调用shell命令,变量是要在${}里引用的
在这里插入图片描述
build写好了,那么就需要写如何调用了
在这里插入图片描述
加一个push操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
提交到git仓库

在这里插入图片描述

在这里插入图片描述
jenkins添加一个docker harbor凭据
在这里插入图片描述
加了一个dockerimage的
第一个参数repo,默认用git仓库的commitid 作为tag
在这里插入图片描述
上下文就是目录

在这里插入图片描述
调用docker命令返回的是docker对象

在这里插入图片描述
在这里插入图片描述
提交一下构建任务自动触发
在这里插入图片描述
执行docker login

在这里插入图片描述
执行docker build

在这里插入图片描述

4.3 丰富构建通知逻辑

之前的原版jenkinsfile

在这里插入图片描述

try异常,目的是执行三次看看是否成功

在这里插入图片描述
但是每次错误都会抛出异常,看看如何去优化

在这里插入图片描述
优化try逻辑,尝试三次,成功打印成功过,错误打印一次错误信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通知giltab端构建任务及状态。也就是下面这个部分

在这里插入图片描述

在这里插入图片描述
这里加一个build,可以知道是在build步骤出错的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之前的是做的消息拼接,每次都需要拼接就可以做成公用的

在这里插入图片描述
就是去实现一个方法的问题
在这里插入图片描述

在这里插入图片描述
放到了BUILD_TASK环境变量里,只不过是通过一个接收参数的方式
在这里插入图片描述
在Docker.groovy里去调用新的类
在这里插入图片描述
在这里插入图片描述

每次都调用一个buildmessage

在这里插入图片描述
在这里加,就不需要每一个都new了

在这里插入图片描述
这里就可以直接用this.message了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
push和login都需要把buildmessage方法加进去

在这里插入图片描述
改造一下jenkinsfile,推送到钉钉里
在这里插入图片描述
提交到gitlab上
在这里插入图片描述在这里插入图片描述
blue ocean查看步骤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
push也加入了判断成功与否

在这里插入图片描述
在这里插入图片描述
加一个env
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提交一下library

在这里插入图片描述
这里出现的传参错误

在这里插入图片描述
在这里插入图片描述
提交代码

在这里插入图片描述
看到详细就成功了

在这里插入图片描述
目前的jenkinsfile里只是去做一个docker的构建,加上一个push,
在这里插入图片描述

第5章 library集成k8s服务部署

5.1 library实现自动部署简单版

在这里插入图片描述
之前的部署就是把镜像版本替换,然后进行部署

在这里插入图片描述
要现在devops里添加一个deploy部署方法
在这里插入图片描述
然后下src模块里加上实现
在这里插入图片描述
在这里插入图片描述

getobjects,获取一个deploy实例,下面开始去部署
在这里插入图片描述
这里赋值一个值

在这里插入图片描述
实例化一个buildmessage

在这里插入图片描述
return出去就OK了

在这里插入图片描述

在这里插入图片描述
push也改一下,改成双引号

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在jenkinsfile里加上stage
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
到blueocen看一下

在这里插入图片描述
start可能写错了

在这里插入图片描述
这里是start

在这里插入图片描述
但是这里是deploy
在这里插入图片描述

改成start
在这里插入图片描述
在这里插入图片描述
这里少了目录文件

在这里插入图片描述
加上/*

在这里插入图片描述
在这里插入图片描述
这样就成功了

在这里插入图片描述
在这里插入图片描述

5.2 library实现自动部署优化版(上)

在这里插入图片描述
简单的版本只是去部署,还没有去检测部署状态,到底是成功还是失败没有检测

在这里插入图片描述
人工检查的思路

在这里插入图片描述
这是一个deployment

在这里插入图片描述
在这里插入图片描述
先把pod列表找出来
在这里插入图片描述
在这里插入图片描述
第二步,看这个pod是否running
在这里插入图片描述
查看部署的副本数和running是否达标
在这里插入图片描述
第一个难点是去做循环检测,多少分钟内一直去检测,类似定时器

如何通过library去实现
在这里插入图片描述
可以去解析拿到deployment里面的值

在这里插入图片描述
可以用label app=myblog过滤

在这里插入图片描述
在这里插入图片描述
如何检测pod状态
在这里插入图片描述
-o输出格式,jsonpath json的一个路径

在这里插入图片描述
.点好就是整个json文件
在这里插入图片描述items就取到了数组第0项

在这里插入图片描述
status字段的phase属性

在这里插入图片描述

在这里插入图片描述
3.查看上述running pod数,是否和myblog的deployment中定义的repipas副本数一致

在这里插入图片描述
如果有多个pod,就需要遍历item列表确保每个状态值都是正常的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

写一个计时器5分钟,5分钟不通过超时失败退出了,

在这里插入图片描述
在这里插入图片描述
这三个逻辑其实是在这个里,连续ready次数大于5次才认为更新deploy状态成功

在这里插入图片描述
如果readycount不满足,还没有超过5分钟,就休息5秒继续检测

在这里插入图片描述

5.3 library实现自动部署优化版(下)

在这里插入图片描述
是不是等待成功检测的过程,如果是true就去读代码workloadfilepath

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
观察pod的状态,正常来才去执行更新状态
在这里插入图片描述
在这里插入图片描述
否则就去执行else逻辑

在这里插入图片描述
在这里插入图片描述
这里可以直接readfile去读取文件内容,如果没有kind,那么这个yaml文件就不合法,抛出异常。
kind放到workloadtype

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个monitordeployment只是针对判断deployment,其他还需要自己写
在这里插入图片描述
查看monitordeployment如何实现
在这里插入图片描述
5分钟超时,就认为pod不正常,printcontainerlogs打印container日志

在这里插入图片描述
printcontainerlogs是如何实现的,namespace是从yaml文件里拿的

在这里插入图片描述
monitordeployment下半部分,没超时去做循环检测,去获取pod的json文件就是去读每个pod的状态内容,连续三次成功才去更新状态是成功的

在这里插入图片描述
否则状态0,打回原形,查看pod状态,这些都可以在jenkins看到,有异常就去更新失败

在这里插入图片描述

解析之后是一个json对象

在这里插入图片描述
在这里插入图片描述
循环检测,联系3次,也就是10秒钟去检测
在这里插入图片描述

在这里插入图片描述
重点是查看每个pod的状态

在这里插入图片描述
现在服务没有不可用的
在这里插入图片描述
在这里插入图片描述
有不可用的肯定是false

在这里插入图片描述
下面就是检测pod

在这里插入图片描述
在这里插入图片描述
传一个参数,是否检测

在这里插入图片描述
、deployment文件路径

在这里插入图片描述
提交library代码
在这里插入图片描述
再提交jenkinsfile

在这里插入图片描述
循环检测和倒计时是很重要的

在这里插入图片描述
在这里插入图片描述
执行成功

在这里插入图片描述
在这里插入图片描述
这里还处于一个创建中的状态
在这里插入图片描述
通过一个label的方式去查找
在这里插入图片描述

在这里插入图片描述
还处于创建的时候,继续往下走

在这里插入图片描述
一个副本的时候,会有同一时间两个pod都在running的时候

在这里插入图片描述

第6章 library实现即使消息推送

6.1 手写library集成消息通知逻辑框架

消息通知也可以放到library去实现

在这里插入图片描述
比如想要直接调用一个library的方法,不在jenkins去实现

在这里插入图片描述

在library去实现,成功和失败都需要通知
在这里插入图片描述
有title,有项目名称

在这里插入图片描述
有用微信的,有email,需要通用,加个参数receiver

在这里插入图片描述、比如传一个wechat

在这里插入图片描述
先搭一个框架,传一些参数,credentialsid,title

在这里插入图片描述
新建一个notification类
在这里插入图片描述
上面只是实现了一个类,真正实现一个通知还需要写方法
在这里插入图片描述

这里进行一个调用

在这里插入图片描述
jenkins里去调用

在这里插入图片描述
现在要区分成功还是失败,不用return给前面了,直接调用即可

在这里插入图片描述
jenkisnfile就可以这么写了

在这里插入图片描述
定义消息,失败和成功的消息

在这里插入图片描述
查看这几个参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

再实现把message传过去,定义一个方法

在这里插入图片描述
这里要去获取构建地址,构建分支的一些信息

在这里插入图片描述
在这里插入图片描述
拼接了一些项目名称,gitlog

在这里插入图片描述
在这里插入图片描述
有了这些拼成的msg,就可以发送消息,根据不同的receiver发送消息
在这里插入图片描述
这里实现一个失败消息,成功消息发送

在这里插入图片描述
再jenkinsfile里调用

在这里插入图片描述
这里实现了一个消息组装

在这里插入图片描述

6.2 library优化dingTalk消息通知

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看dingtalk和wechat如何去实现

在这里插入图片描述
建立一个dingtalk类,但是没必要用shell来实现了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
token放在这里

在这里插入图片描述
在这里插入图片描述
生成的message信息,
validresponsecodes发送http请求的返回码

在这里插入图片描述
这里还是生成一个markdown格式

在这里插入图片描述
new一个dingtalk,然后markdown就可以了

在这里插入图片描述
wechat的就类似dingtalk的就行

在这里插入图片描述
在这里插入图片描述
httprequest不是默认的,是需要插件实现的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码提交
在这里插入图片描述
修改jenkinsfile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提交一下jenkinsfile

在这里插入图片描述
已经在构建执行了

在这里插入图片描述
传递的错误参数是failure

在这里插入图片描述
提交一下

在这里插入图片描述
notification里生成了消息的内容

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

但是链接没有

在这里插入图片描述
这是定义了,没有加链接

在这里插入图片描述
markdown的语法,可以中括号,括起来

在这里插入图片描述
这就是期望的链接

在这里插入图片描述
第一次使用的时候需要加一个换行

在这里插入图片描述
遍历拼接

在这里插入图片描述
提交

在这里插入图片描述
持续构建中
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
返回res

在这里插入图片描述
在这里插入图片描述
消息通知
在这里插入图片描述

第7章 library集成代码扫描

7.1 library集成代码扫描

直接去执行代码扫描,等待3秒返回结果
在这里插入图片描述
检测的时候有一个version概念

在这里插入图片描述
在这里插入图片描述

有时候可以不等待检测结果,可以给一个开关

在这里插入图片描述
现在去建立sonar的类
在这里插入图片描述
在这里插入图片描述
这样就拿到version,commitid

在这里插入图片描述
这样就实现动态version变化

在这里插入图片描述
是否需要等待,然后成功或者失败

在这里插入图片描述
没有找到scan

在这里插入图片描述
在这里插入图片描述
提交一下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提交一下

在这里插入图片描述
在这里插入图片描述
不想检测就false,前面的空值会自动帮你获取version
在这里插入图片描述
在这里插入图片描述
对应上面的version

在这里插入图片描述

这里少了一次调用
在这里插入图片描述
提交一下

在这里插入图片描述
scan开始运行了

在这里插入图片描述
可以根据自己情况加扫描,不然有些太苛刻

在这里插入图片描述
新的检测

在这里插入图片描述
加入扫描成功

在这里插入图片描述
整个过程是ok的

在这里插入图片描述

第8章 集成robot自动化测试

8.1 配置robot-cases项目自动化

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章介绍docker的前世今生,了 解docker的实现原理,以Django项目为例,教大家如何编写最佳的Dockerfile实现构业务镜像的制作。通过本章的学习,大家会知道docker的概念及基本操作,并学会构建自己的业务镜像,并通过抓包的方式掌握Docker最常用的bridge网络模式的通信。第二章本章学习kubernetes的架构及工作流程,重点介绍如本章学习kubernetes的架构及工作流程,重点介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的服务。同时介绍基于EFK如何搭建Kubernetes集群的日志收集系统。学完本章,我们的Django demo项目已经可以运行在k8s集群中,同时我们可以使用域名进行服务的访问。第三章本章基于k8s集群部署gitlab、sonarQube、 Jenkins等工具,并把上述工具集成到Jenkins中,以Django项目为例,通过多分支流水线及Jenkinsfle实现项目代码提交到不同的仓库分支,实现自动代码扫描、单元测试、docker容器构建、k8s服务的自动部署。第四章由于公司内部项目众多,大量的项目使用同一套流程CICD,那么势必会存在大量的重复代码,因此本章主要通过使用groovy实现Jenkins的sharedL ibrary的开发,以提取项目在CICD实践过程中的公共逻辑,提供一系列的流程的接口供公司内各项目调用,开发完成后,还是以Django的demo项目为例,进行Jenkinsfle的改造,最后仅需通过简单的Jenkinsfle的配置,即可优雅的完成CICD流程的整个过程,此方式已在大型企业内部落地应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值