我在编码过程使用Jenkins自动化的姿势

如果你是程序员新手,更推荐和建议看一下,某个角度上来说,会让你走上老手的道路。

概述

对于一般来使用自动化的团队来说,Jenkins是少不了的这个工具,使用的姿势有很多种,之前也尝试使用过多种其它的自动化工具,比如github-action/gitlab-action/Travis CI,感觉能与之匹敌的应该就github-action,其它的都可以比较专门和针对化。

使用场景

自动化能力平时用得比较多,比如最常见的IT方式,比如开发,构建,测试,运维等,基本上感觉这东西几乎无所不能的感觉。包括自己一些生活的锁事,比如电脑自动清理,某个文档的定时发布,然后做一些文档材料的定时备份,还有定时同步更新网盘,平时自己学习任务的提醒等,这东西都能成为一套东西。

总的给我的感觉是,包括自己生活也自动化起来。这里阐述从几个角度进行说明,结合自己的平常使用:

  • 生活和学习中为什么要选择一款自动化工具
  • 使用Jenkins提升自动化的操作过程

通过过程一切自动化能力,你会发现,开发人员一个人可以做项目管理中的很多事情,比如测试、运维、管理、运维、提醒等各种各样的能力。

过程阐述

目前来说,我们需要考虑时间成本和学习成本,还有管理成本,对于开发人员来说,这些是很容易做到的。

生活和学习中为什么要选择一款自动化工具

为什么要选择一款自动化工具,对于来说,节约成本,不是对公司的成本,而是对自己的成本,让自己提升更高一阶层的思考。

什么叫高一阶层的思考,比如不会再对于一些重复性的工作来来回回倒腾,不会再对以前的一些工具来来回回的倒腾,不会再对以前自己的手稿或者代码来来回回的倒腾。那其它的时间做什么的呢,主要是做架构设计的思考,新的技术点的思考,优化点的思路,这些过程从传统软件模式来说,都是成本。那我们用自动化工具做哪些事情,自己常常使用的作用是这样的:

  • 【编码】做一些练习项目工程的打包和发布,版本的发布管理;
  • 【运维】做一些常见的运维管理,还有学习示例运行,包括调用一些第三方云平台接口;
  • 【数据】做一些常见的数据抽取,汇总,统计结果管理,如每周时间段汇总;
  • 【运维】做一些自己在跑的服务检查和巡检管理,然后出现异常之后,给我报警;
  • 【测试】做一些测试用例和测试运行效果管理,类似于自动化测试之类的;
  • 【运维】做一些邮件定时清理,应用数据定时备份的管理之类的;
  • …..

编程工作中很多都需要很多,这些过程都可以变成自动化,然后自动执行,想到哪些就调用哪些,比如服务器密码修改,开始并不频繁,这个后来变成自动化,每月定时修改一次,然后自动重启服务,然后自动把新密钥发送邮箱里面,然后钉钉会告诉我这个完成了。

这些节省了我很多时间上的成本,而自己也不想在这个上面浪费太多的时间,整个过程下来你会发现,学习和生活过程中方便了很多。

当然,开始的时候可能会觉得这个怎么可能要去做那么多的东西,开始也这么思考,类似于学习Vim工具,这个开始也很难用,但是发现克服之后,你会发现工具使用效率非常高,类似于使用Markdown写文档,速度会比Word快很多,目前最多的是结合Vim+MarkDown一起使用,你会发现编写文字会是另一种享受,所以工具的使用,只是前期稍稍有一些困难,但是走下一个Demo示例之后,整个流程会顺利了很多。

对于新的开发人员来说,学习使用自动化工具,会让你方便很多,同时心理上会有一些莫名其妙的安慰感,比如你会发现很多开发人员还是手工的形式,心里面可以这么考虑,“都2023年了,怎么还是这么手工操作,效率低下。”,心里默念即可。不过对于新手来说,这的的确确增进了你很多的效率。

使用Jenkins提升自动化的操作过程

注意,以下的环境搭建是基于内网环境,注意不要暴露在公网上,我这里是在淘了一台主机回来单独放置的。

先看个简单的数据,几年沉淀下来自动化数据,目前是稍微统计的:

  • Git自动化脚本仓库有4个,自动化脚本数最多的库中有近百个脚本;
  • 积累使用的镜像容器有150个左右,包括基础镜像和学习镜像;
  • 学习安装和调试使用过的软件,在库有90+个;
  • 在过程中及当前在运行中的自动化任务有300+个;

以上自动化任务也只是管理我的学习环境,方便我自己生活中的一些自动化能力,远超我自己的想像范围。

在选择性上,老实说,自动化工具目前市面上免费的(肯定首选免费)比较强悍稳定的还比较少,我们过程需要比较高度的制定化高一些,同时会兼容很多第三方的工具和插件,这个自己相对来比较喜欢的是GithubAction,但是发现本地化和定制化能力比较强的,还是Jenkins,本地化方便放我们的隐私,而且没有约束。

那这些过程怎么做的呢,怎么实现我们自己生活和学习中的自动化呢?

准备一下脚本仓库,这里的脚本使用Git做的管理,这里选择性比较多,然后每个脚本都定时更新到Git上面,分配好目录即可,或者分配好每个Git基线的权限和职责,这个应该是比较容易做到,开始乱一些也没什么问题,后面再规范也可以。

过程方便的时候或者有灵感的时候都可以随时提交你的记录,方便后期的管理,这个基线库就会形成你后面的通用脚本库。我开始也觉得不会有多少,但是几年沉淀下来,有上百个脚本,这些都是前期学习和过程中坑点的积累,通过这些脚本库,就类似于我有一套较为完善的软件开发自动化的能力,应付一般的项目和管理完全是没啥大的问题。

比如自动化软件的安装,然后我把它放在网盘做个软件库(网盘是备份,下载使用的是七牛),沉淀几年下来的,有几十款软件,而且都是学习验证过的:

另外一个例子,在容器打包上面,平时生活中打的容器也有多个(这些只是过程中的验证,而且这些都积累成脚本),这些都是在使用过程中的坑点,一点点积累的优化完善,而且有完整的修复和优化记录,完全可以查询痕迹的,下面这些只是目录,目录下面还有多版本,包括服务器环境等。

如果你平时把自己积累的一些学习脚本还有练习脚本积累下来,两三年左右,基本上就成套了,这些规模远可能超过你原来的想像的。

所以这些自动化的脚本基本上都我都打成一套脚本放在Git管理,同时不断的优化完善,然后通过Jenkins的自动执行操作,而整个下来的Jenkins任务下来,到目前为止,也有300多个自动化任务,这些只是我一个人在过程中的自动化操作任务。

在集成脚本管理之后,各类型的定时化管理,比如一些可能需要调用的第三接口,如果比如集中的,这里采用Python脚本或者Java脚本进行编写,一些简单的脚本编写并不难,只是简单的调用,然后集成自动化发布和版本更新管理,这样在任务里面就可以调用这些脚本。

这类似的场景并不是特别多,也考虑过做成Jenkins插件,但是感觉没啥必要,维护这个插件成本也不低,另外兼容性等成问题。

有了脚本库还有定时化解决之后,任务的排版目前使用是Jenkinsfile,即Pipeline进行任务编排,这个方式效果会好很多,至少在打包上,几乎可以做到一种无所不能的感觉(当前,你也可以理解成它就是一个执行器),但是整合起来效果就非常强大。

不过就是工作流的执行上,当前比较差强人意,目前Jenkins的编排还是硬编码的形式,还不能有可视化拖拉,多个任务形成原子性,不过基本上也可以达到效果,就是简单的流程还行,多个复杂的流程就有点难,整体下来结合使用的效果还是不错的。

这些任务常年累月下来,形成的自动化能力基本上已经覆盖了平时编码和学习的场景,节省了我很多的时间和场景。同时自己也在不断的优化找更好的方案提升本身学习环境的效能,目前使用的方式都是有现成的脚本案例参考还有调优模式,然后不断的优化查找更好的方案,尝试使用过其它的自动化工具,但是还是缺少很多的能力和稳定性。

这些对于开发人员特别是新人来说,相对来说,会节约很多的时间成本和学习沉淀,不管是在后期工作中还是管理中,自动化的能力都是很普遍的,比如对于中小型公司来说,这基本上整体的效能会提升很多,对于个人来说,积累下来的东西是在某个程度上,也是经验的积累,在一些工作上是远远超过资历年限的积累的,修改一下就可以使用,会解决很多问题。

总结

自动化能力在IT领域是普遍的能力,工具的使用和场景的覆盖面,还有效能的提升相对来说对个人是一个非常大的帮助,也见过很多在使用自动化能力的,在很多场景下是可以优化的,同时提高效率的。

以上是自己使用Jenkins自动化操作的一些场景和经验积累,提供做下参考。