• CI/CD持续集成与持续交付(五)钉钉报警、ansible自动化构建部署


    一、钉钉报警

     接下来我们在上文流水线任务的基础上,利用jenkins中的插件,做一个钉钉报警系统。无论部署上线是否成功,都在钉钉群里报警@某人。

    安装插件

    新建钉钉群

    首先我们需要在钉钉上创建一个群,这个群是用来接收我们的告警信息的: 

     

    添加智能群助手

     选择自定义机器人

    注意:此webhook 一定要保留。在jenkins系统设置中添加钉钉机器人:

    保存后再进来就有机器人的UUID了:

    我们点击测试后:

     

    我们再进入devops项目中进行配置:

     jenkins钉钉官方文档:在 pipeline 中使用 | 钉钉机器人插件

     在之前的pipline代码之后添加:

    保存后立即构建:

     构建成功!我的钉钉上也收到了消息:

    我们注释调登陆代码,并从server6 执行节点上退出harbor仓库的登陆来模拟项目失败的情况:

     

    再次构建:

     构建失败,钉钉提示:

    二、将pipline代码放入gitlab中做版本控制

     我们的代码写在pipline中是不太严谨的,接下来我们要在gitlab上写pipline,做到可以进行版本控制。我们先在gitlab中新建一个项目:

    使用ssh克隆将其复制到本地:

    进入devops创建Jenkinsfile,将刚刚pipline的代码复制进去,上传到gitlab中:

    此时我们进入jenkins 的devops项目中进行修改,将所有的流水线都放在gitlab中做控制:

    去掉触发器:
     

     

     保存。现在我们jenkins中的流水线和项目代码都是在gitlab中拿的。接下来构建项目:

    项目构建成功,这说明我们将整个流水线代码放入gitlab中做版本控制是没有问题的。

    三、ansible自动化部署构建

    为了实验方便,我们接下来要完成的是,在gitlab中写好ansible 的相关配置文件,持续集成到jenkins主机server4,同时server4作为ansible管理端进行持续交付,将ansible的playbook.yml的内容部署到server5、6、7上。

    jenkins设置执行节点

    首先在节点master上开3个子节点,将builder-1删掉:

    安装ansible

    在jenkins主机上安装ansible:

    注:安装时会有许多依赖项,建议提前配置好阿里云的centos7的源。

    gitlab中新建项目

     将ansible项目clone到gitlab本地:

    新建测试主机

    我们将server5、6、7作为我们的测试主机,删除之前的容器并停掉docker: 

     即jenkins主机server4作为ansible管理端,需要推ansible的playbook 到server5、6、7上。

    编辑ansible配置文件

    在gitlab主机上项目里,编辑ansible配置文件:

     

    同时我们建立了两个组,一个test测试组,一个prod生产组。编辑playbook:

    创建模板 index.html.j2 ,目的是为了获取主机名:

    推送至gitlab

    创建完成后提交git推送:

     

    jenkins中新建项目并配置

    接下来我们就要在jenkins中做拉取了,在jenkins中新建项目:

    设置参数化构建,添加prod和test两个参数,让用户选择往哪个组的主机推playbook: 

     添加git:

    ansible用户设置

    在ansible的配置文件中写了我们是通过连接远程的devops用户来操作的,所以我们在远程主机server5、6、7上创建devops用户同时赋予权限:

    我们要在jenkins用户和devops用户之间做免密:

     jenkins在访问server5时,以devops用户身份访问免密。server6、7同理:

    jenkins脚本设置

    接下来再进入jenkins的playbook项目配置,构建时直接执行shell脚本: 

    构建测试

    选择test进行构建:
     

     运行成功:

    运行成功说明test组server5、6都已经成功安装httpd并更改发布文件index.html,我们来查看一下:

     

    没有问题,都是从index.html.j2 中获取的本机的hostname。 说明ansible通过CI/CD进行持续集成交付没有问题。

  • 相关阅读:
    服务治理-Nacos
    【OpenCV-Torch-dlib-ubuntu】Vm虚拟机linux环境摄像头调用方法与dilb模型探究
    微信小程序开发实战7 小程序订阅消息
    基于跳蛛优化的BP神经网络(分类应用) - 附代码
    vector中的迭代器失效问题
    程序员怎样才能学好算法,推荐好书送给大家
    Qt扫盲-QJsonDocument理论总结
    从零开始搭建React+TypeScript+webpack开发环境-自定义配置化的模拟服务器
    A-Level经济真题(10)
    世界国旗/地图:世界各国国旗图标整理/与echarts世界地图配置对应
  • 原文地址:https://blog.csdn.net/cjzcc1996/article/details/125757224