前言

当下,在软件开发过程中,软件开发团队面临复杂度高、研发效率低下、交付成本高昂等难题,因此,CI/CD应运而生。在研发过程中,CI/CD工具可以起到提高自动化集成与部署的效率、快速扫描、发现问题、提升开发体验等作用。随着技术的快速发展,此类工具如雨后春笋般出现,其中GitLab CI/CD以体验良好、跨平台支持等优势快速占领市场。值得一提的是,2021年10月,GitLab以估值149亿美元的市值上市,也侧面反映了其技术价值。

2020年 6 月,作为一名前端开发工程师,我进入滴普科技的容器平台部门工作。正是在那段时间,我开始接触到很多新的东西,如Docker、Kubernetes、Istio和Rancher,而GitLab CI/CD也是那段时间接触到的。彼时接触GitLab CI/CD,我只是想找一个能快速把项目部署起来的工具。在不断的学习过程中,我逐渐为GitLab CI/CD的丰富特性所吸引,然后将大量业余时间花在了对它的学习上。

后来,我在公司的项目中进行了很多GitLab CI/CD的相关实践,在公司内部交流会和GitLab CI/CD社区分享了一些经验。我还在CSDN和哔哩哔哩上开设了GitLab CI/CD的专栏并提供相关教程,其中,CSDN的专栏收获“10万+”的阅读量,哔哩哔哩的视频教程收获“6万+”的播放量。作为一名前端开发工程师,我之所以愿意花大量时间去学GitLab CI/CD,是因为它真的能够帮团队提升研发效率,快速将项目自动部署到对应的环境。不管是使用Docker部署,还是远程部署,只需要编写几行核心的部署代码,分支和触发条件都可以通过简单的关键词配置来实现。你也可以为每一个分支编写独特的业务流水线,甚至可以将公共的业务流程提取到公共模块中供其他人引用。

决定编写本书之前,我有两个顾虑:一是,虽然坚持写作6年多了,但写书还是第一次,对这种需要严谨构思,并需要具备相当好的文字功底的事情有点儿不自信;二是,研究CI/CD开发流水线并不是我的专职工作,对于所涉及的一些概念、技术发展史及Shell脚本,我深知自己缺乏深入的研究。但经过深思熟虑,我确定自己还是想把所掌握和实践过的内容付诸笔端,跟广大读者分享。原因有二:其一,我认可GitLab CI/CD的优点,并且认为它会在DevOps领域大放异彩;其二,目前图书市场上缺乏系统讲解GitLab CI/CD的图书,也缺少成体系的学习资料。基于上述原因,我便踏上了编写本书之路。

写书期间,每逢周末,我要么查资料,要么反复修改书稿,希望能尽我所能,把自己的所学和经验清晰、准确地分享给读者。

本书从初学者的角度出发,帮助读者了解GitLab CI/CD,进而学以致用,快速搭建规范、安全、可靠的流水线。本书主要基于Docker讲解如何搭建GitLab CI/CD,详细讲解其中的配置项以及30多个流水线关键词的使用方法,并在最后展示3个具有代表性的实践项目,讲解如何以多种方式部署前端项目。

为了保证内容的连贯性和结构的完整性,本书将理论和项目实践加以拆分,但读者不需要严格按照该顺序学习。根据笔者的经验,最佳的学习路线是“熟悉GitLab CI/CD的基本概念→搭建并配置基础的GitLab CI/CD环境→熟悉初阶关键词→编写简单的流水线→熟悉高级GitLab Runner配置→熟悉中阶和高阶关键词→实践更为复杂的CI/CD场景”。

成书之际,感触颇多。感谢我的母亲!她勤劳善良,抚育我成长,一直为我们操持家务,还帮我们照顾年幼的女儿,让我能心无旁骛地专注于写作。

感谢一直给予我陪伴和理解的妻子!她给了我一个可爱的女儿和一个温馨的家,是我的坚强后盾!

感谢我的女儿绾一,每当我感到疲惫、沮丧时,看到她可爱的小脸,我就能燃起直面困难的勇气,你永远是爸爸的光。

感谢那个坚持成长、执着一如往昔的自己!

感谢人民邮电出版社的吴晋瑜编辑,感谢她的辛勤付出!

最后,请允许我向所有努力让生活变得更美好的技术同行致敬!我辈努力前行,用技术让世界变得更美好!

因笔者水平有限,书中难免会有不足之处,敬请广大读者指正。

庞孟臣(网名:拿我格子衫来)

于深圳