写点什么

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

  • 2022-12-21
    新加坡
  • 本文字数:3287 字

    阅读完需:约 11 分钟

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

概述

对于一般来使用自动化的团队来说,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 自动化操作的一些场景和经验积累,提供做下参考。

发布于: 刚刚阅读数: 4
用户头像

我是一名设计和编码的小东大人 2018-05-05 加入

软件工程师,架构师,擅长架构设计和团队管理,交流可关注本人公众号:软件工程师罗小东 :-)

评论

发布
暂无评论
我在编码过程使用Jenkins自动化的姿势_软件工程师-罗小东_InfoQ写作社区