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实施及管理记录、手术流程 手术护理系统:手术安排、安排临时手术、添加急诊手术、局麻手术护理、整体护…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
