GitLab CI/CD 新书发布,助企业降本增效
前言
大家好,我是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
相关文章:

GitLab CI/CD 新书发布,助企业降本增效
前言 大家好,我是CSDN的拿我格子衫来, 昨天我的第一本书《GitLab CI/CD 从入门到实战》上架啦,这是业内第一本详细讲解GitLab CI/CD的书籍。 历经无数个日夜,最终开花结果。感触良多,今天就借这篇文章来谈一谈这本书的…...

【分享】如何写出整洁的代码?
文章目录前言1.为什么要保持代码整洁?1.1 所以从一开始就要保持整洁1.2 如何写出整洁的代码?2.命名3.类3.1单一职责3.2 开闭原则3.3 内聚4.函数4.1 只做一件事4.2 函数命名4.3 参数4.4 返回值4.5 怎样写出这样的函数?4.6 代码质量扫描工具5.测试5.1 TDD5.2 FIRST原则5.3 测试…...

视频剪辑:教你如何调整视频画面的大小。
大家应该都会调整图片的大小吧,那你们会调整视频画面的大小吗?我想,应该会有人不还不知道要调整的吧,今天就让小编来教大家一个方法怎样去调整视频画面的大小尺寸。 首先,我们要有以下材料: 一台电脑 【…...

操作系统概述
Overview Q1(Why):为什么要学操作系统?Q2(What):到底什么是操作系统?Q3(How):怎么学操作系统? 一.为什么要学操作系统? 学习操作系统…...

记录重启csdn
有太多收藏的链接落灰了,在此重启~ 1、社会 https://mp.weixin.qq.com/s/Uq0koAbMUk8OFZg2nCg_fg https://mp.weixin.qq.com/s/yCtLdEWSKVVAKhvLHxjeig https://zhuanlan.zhihu.com/p/569162335?utm_mediumsocial&utm_oi938179755602853888&ut…...

蓝牙耳机哪个品牌质量最好最耐用?蓝牙耳机排行榜10强推荐
现今,外出佩戴蓝牙耳机的人越来越多,各大品牌厂商对于蓝牙耳机各种性能的设计也愈发用心。那么,无线耳机哪个品牌音质好?下面,我来给大家推荐几款质量好的无线蓝牙耳机,可以当个参考。 一.南卡…...
mysql 双主架构详解
文章目录 一、背景二、MySQL双主(主主)架构方案三、MySQL双主架构图四、MySQL双主架构的优缺点五、MySQL双主架构,会存在什么问题?总结一、背景 MySQL 主从模式优缺点 容灾:主数据库宕机后,启动从数据库,用于故障切换 备份:防止数据丢失 读写分离:主数据库可以只负责…...

计算机指令系统基础 - 寻址方式详解
文章目录1 概述2 常见寻址方式2.1 立即寻址2.2 直接寻址2.3 间接寻址2.4 寄存器寻址2.5 寄存器间接寻址2.6 相对寻址2.7 变址寻址3 扩展3.1 操作码3.2 常见寄存器1 概述 计算机指令:指挥计算机工作的 指示 和 命令内容:通常一条 指令 包括两方面的内容 …...

React Three Fiber动画入门
使用静态对象和形状构建 3D 场景非常酷,但是当你可以使用动画使场景栩栩如生时,它会更酷。 在 3D 世界中,有一个称为角色装配的过程,它允许你创建称为骨架的特殊对象,其作用类似于骨骼和关节系统。 这些骨架连接到一块…...
为什么我推荐你使用 systemd timer 替代 cronjob?
概述 前几天在使用 Terraform cloud-init 批量初始化我的实验室 Linux 机器。正好发现有一些定时场景需要使用到 cronjob, 进一步了解到 systemd timer 完全可以替换 cronjob, 并且 systemd timer 有一些非常有趣的功能。 回归话题:为什么我推荐你使用 systemd t…...

elasticsearch基础6——head插件安装和web页面查询操作使用、ik分词器
文章目录一、基本了解1.1 插件分类1.2 插件管理命令二、分析插件2.1 es中的分析插件2.1.1 官方核心分析插件2.1.2 社区提供分析插件2.2 API扩展插件三、Head 插件3.1 安装3.2 web页面使用3.2.1 概览页3.2.1.1 unassigned问题解决3.2.2 索引页3.2.3 数据浏览页3.2.4 基本查询页3…...

【Linux】七、进程间通信(二)
目录 三、system V(IPC) 3.1 system V共享内存 3.1.1 共享内存的概念 3.1.2 共享内存的原理 3.1.3 创建共享内存(shmget ) 3.1.4 ftok函数 3.1.5 查看共享内存资源 3.1.6 创建共享内存测试代码 3.1.7 再次理解共享内存 3.1.8 释放共享内存(shm…...
Synchronized学习大总结
目录 1.synchronized特性 2.synchronized如何使用 3.synchronized的锁机制 1.synchronized特性 synchronized 是乐观锁,也是悲观锁,是轻量级锁(j基于自旋锁实现),也是重量级锁(基于挂起等待锁实现),它不是读写锁,是互斥锁,当一个线程抢到锁之后,其它线程阻塞等待,进入synchr…...

VN5620以太网测试——环境搭建篇
文章目录 前言一、新建以太网工程二、Port Configuration三、Link up四 Trace界面五、添加Ethernet Packet Builder六、添加ARP Packet七、添加Ethernet IG总结前言 CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。 …...

redis哨兵和集群部署手册
一、哨兵模式原理及作用 1.原理 哨兵(sentinel): 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现 故障时,通过投票机制选择新的master并将所有slave连接到新的master。所以整个运行哨兵的集…...

ctfshow web入门 java 295 298-300
其他没啥好讲的,都是工具就通杀了 web295 漏洞地址 http://ip/S2-048/integration/saveGangster.action 这里我们可以看到他是解析了 尝试使用网上的payload %{(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#cont…...

SWIG包装器使用指南——(四)C#使用SWIG简介与实践
SWIG系列:http://t.csdn.cn/cIAcr 文章目录一、简介二、全局函数、变量、常量三、继承四、传递指针、引用、数组与值五、基本类型的指针与引用六、基本类型的数组七、基本类型的默认map规则八、常用的typemap方法九、代码插入十、实践10.1 如何映射Foo*&到ref F…...
HashTable, HashMap 和 ConcurrentHashMap
HashTable, HashMap 和 ConcurrentHashMap 都是 Java 集合框架中的类,用于存储和操作键值对。它们之间存在一些关键区别,如下所示: 1.同步性: HashTable:线程安全,所有的方法都是同步的(synchr…...

ToBeWritten之IoT 技战法
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…...

基于ASP.NET开发的医院手术麻醉信息管理系统源码 项目源码
系统主要功能介绍: 门诊科室管理系统:手术快速申请、手术申请、手术审核 麻醉科管理系统:手术安排、术后处方、术后小结、PCS实施及管理记录、手术流程 手术护理系统:手术安排、安排临时手术、添加急诊手术、局麻手术护理、整体护…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...