前言
大家好,我是CSDN的拿我格子衫来
, 昨天我的第一本书《GitLab CI/CD 从入门到实战》上架啦,这是业内第一本详细讲解GitLab CI/CD的书籍。
历经无数个日夜,最终开花结果。感触良多,今天就借这篇文章来谈一谈这本书的创作。
写书前
在正式写书前,我已经写了很多有关GitLab CI/CD的文章,有的只是简单的记录,有些是自己的思考,当时也没想着以后会写书,但无疑,这些前期积累的资料都给了我很大的支撑,是我最初始的素材。我写的最早的GitLab CI/CD文章可以追溯到2020年7月份,那是我刚进入滴普科技的第二个月,新的工作总是充满了挑战性,在两个月内我也熟练使用了Docker,接触了一些开源的K8s相关的项目,这些知识都让我以后使用某个平台变得轻而易举。一行docker命令就将项目部署起来。
在2021年的某一天,在CSDN的博客专家群里,热心分享的博主们开始讨论了写书这件事。有些博主已经写了三本书,而且还在写书,有些新作者也开始尝试。这给我的心里埋下了一颗种子。这颗种子在上班路上发芽,在下班路上发芽,在我写博文时成长,最终我不得不深刻思考写书这件事。
就像我写了几年的博客,得到了社区的博客专家称号,前端领域优秀作者称号,积累到一定的程度就会有一个里程碑,不是开始,也不是结束,只是一个里程碑。而成书也是对某一个细分领域的深刻,系统学习,总结的一个里程碑。技术人偶尔要站起来跳一跳,看看自己到底能达什么样的高度。别人的认可是一部分因素,更重要的自己想写书,写书的价值是毋庸置疑的。
衡量一个人的价值,不是他拥有什么,而是看他给后来者留下了什么。
书,我一定要写。
当我在博主群里询问是否有编辑推荐时,邹老师向我推荐了人邮的编辑。这里再次感谢。
当时可供我选择的选题有三个Node-RED
,ThingsBoard
,GitLab CI/CD
这三个选题在2021年我都有一定的研究和专栏(感兴趣的同学可以看看我的相关专栏),最重要的很认同他们都是非常好的优秀项目,相信在不久的将来会有更多人的需要学习,了解,研究它们。其实现在这三个开源项目也有很多的社区和社群。
在Node-RED被否定后,我硬着头皮申请了GitLab CI/CD这个选题。
为什么说是硬着头皮?因为严格来说GitLab CI/CD 属于DevOps领域,在写书的时候必然需要一些相关概念,理论基础。除了这些,最大的拦路虎是 作为一个前端,我的shell脚本技能只局限于 ls -l
, mkdir
,touch
,vim
,这几个简单命令🙃。为了解决这个短板,我向编辑申(bai)请(piao)了四本书,其中就有《鸟哥的Linux 私房菜 第四版》,《持续交付 2.0》。刚开始会怕这些未知的问题。但后来想通了,兵来将挡,遇水搭桥,而且当时坐我旁边的就是一个运维大拿。我怕谁,谁阻挡我,我就解决谁。带着豪气干云的决心,开始了我的写作之旅。在真正写的时候,针对shell脚本这一块,是我当初夸大了问题的复杂度,一本书里三行的shell脚本都不超过五处。所以如果你想在书里学习shell脚本,那很大程度会失望😂。刚入门的小白也不要担心,书里没什么很深奥的代码片段。
有关之前的教程可以查看这篇文章我是如何把一套GitLab CI/CD课程做到全网第一的?
写书中
写书是很枯燥的,而且不像我写博客那样随心所意。
很多个周末我都是待在村口的肯德基,边听音乐边写作。这篇文章就是坐在这个肯德基里写的,还有免费空调。有时为了心无旁骛地写作,也会去公司写,坐一个小时的公交。
写作的时候,女儿都是母亲带着,那段时间很辛苦,自己还要备考。
写作的过程中我也收到了很多帮助,让我印象最深的是,我因为手头没有集群去实践k8s部署应用,一个网友知道后,就直接把他的集群配置文件交给我啦。我也在他的帮助下搞通了整个流程,写下了这篇文章《使用GitLab CI/CD部署应用到Kubernetes集群的方案》
在学习的过程中,受助于人,是非常幸运的。我们应该感恩。再次感谢那位朋友。
写书的时候,在啃官方文档上我是下了苦功夫的,GitLab CI/CD有一页文档,是.gitlab-ci.yml 关键词解析。点击此处可以查看
这个页面用A4纸的打印有69
页,69页,69页。 我就在上班路上啃,下班路上咀嚼。
休息的片刻翻译。
官方文档我看了不止3篇,有的地方看了5篇不止。发现有不对的地方,也给官方提了3个PR。
有很多人在学习技能,看文档时,不止如何下手。
我告诉你,从第一页开始,每一篇文档都要看,完整地看,不留死角地看。
不仅要看,还要看3遍,5遍,10遍。构建一个完整的知识体系。
我的其他几个专栏也都是这样成型的。如果你要练书法,就要先从点,横,竖这些最最基本的做起。
书的内容
在写书前我花了很长时间,把那些东西放进去,那些东西不放进去。知识整理,组织规划一直是我的强项,所以我对书的目录安排还算比较满意。
本书的内容主要分为两大部分,
一部分是GitLab CI/CD的基础知识,包括CI/CD的含义,什么是流水线,GitLab CI/CD的组成部分,GitLab Runner,.gitalb.yml文件。最重要的是34个关键词的使用。
第二部分是项目实战,如果上面的基础知识是点的,实战篇就是将点连成线,聚焦具体的应用项目,解决连续,复杂的业务场景,能够落地实施,提高研发效能。
一共有三个项目实战,作为一名前端,我把前端项目的CI/CD放在第一位,应该不会有人有意见吧。在书中详细描写了三种前端Vue项目的部署方式,分别是使用Docker部署应用,使用阿里云OSS部署,在远程机器上部署。
第二项目是 前后端分离的项目,后端为Java语言,前端是React框架,讲解了在前后的分离的应用架构下,如何使用父子流水线,跨项目流水线来合理设计CI/CD流程。并延伸了一些微服务架构的应用部署。
第三项目是 Python应用,Flask Web 应用框架,部署到Kubernetes集群中。
每一个实战项目都是不同的架构,不同的编程语言,不同的部署方式。这样能够覆盖更多的业务场景,这也是运维人员经常遇到的场景。
除了覆盖到各种业务场景,书中也对探讨了另一个话题——速度,流水线的运行速度,部署速度一直都是软件团队关注的重要指标,也非常影响开发体验。所以在书里也加大力度探讨了如何加快流水线运行速度。每一个实战项目后,都有针对该项目的优化措施,最佳实践。
虽然我尽力覆盖更多的业务场景,但无奈场景是无穷无尽的。使用GitLab CI/CD 解决复杂的业务场景我们只能从基础知识下手,它的能力都是有基础知识支撑起来的。正所谓 万变不离其宗,只有打好基础,我们才能战胜更加复杂的困难(这好像是我初中老师经常说的)。
GitLab CI/CD的流水线都写在一个yml文件中,使它能够保持优美的格式。除了30多个关键词用来覆盖多数业务场景,最让人叹服的是很多时候你可以使用预设变量非常简单地实现不可思议的复杂功能。
你可以在流水线中实现,如果a开发人员的提交信息里包含[pass]
, 就不运行某个检查作业,也可实现b开发人员的提交必须经过Approval
才能合并,这些判断都只是一行表达式,并不需要你写shell脚本去实现,而且会有版本控制,各个分支互不影响。
在书中我根据自己的学习经历给出了合适学习路线,先了解概念,搭建环境,学习7,8个常用的关键词,然后实践。学习更多关键词,优化流水线。
书的内容介绍,目录都可以在商品详情页可以看到,这里就不做太多的介绍啦。
后记
在我分享GitLab CI/CD时,有很多专业的运维朋友向我请教问题,和他们的交流中,让我始终保持着强烈的求知欲和探索欲。一个前端,不去卷前端,便要来混运维,我只想告诉大家,没有人可以给自己打标签,不要把自己圈养,打破固有的知识牢笼。之前有个人告诉我前端不该学GitLab CI/CD,当我用它把公司的前端开发环境部署流程搞成模范时,他又想让我学习Jenkins😅。学习GitLab CI/CD就像程序员业余时间炒股票,弹钢琴,健身,刷短视频,玩塞尔达一样,不要当作养家户口的工具,当作自己的兴趣,而兴趣产生价值就是开花结果。
因为相信所以坚持。
如果你们公司正在使用GitLab 管理代码,请务必使用GitLab CI/CD来做持续集成,持续部署。它会帮助你的团队提高DevOps能力,降本增效。
如果你正在寻找一个自动部署工具,可以试试GitLab CI/CD,诸多特性会让你爱不释手。
这里大胆预测一下,不出两年,
第二本GitLab CI/CD的书籍就会出版
书的出版不是终点,也不是起点,我一直在路上,和无数技术者同行。
推荐阅读
GitLab CI/CD 教程
GitLab CI/CD .gitlab-ci.yml关键词
GitLab CI/CD:开发和运维管理的效率神器
.gitlab-ci.yml keyword reference