八面通網(wǎng)站建設(shè)nba排名最新賽程
前言
大家好,我是CSDN的拿我格子衫來(lái)
, 昨天我的第一本書《GitLab CI/CD 從入門到實(shí)戰(zhàn)》上架啦,這是業(yè)內(nèi)第一本詳細(xì)講解GitLab CI/CD的書籍。
歷經(jīng)無(wú)數(shù)個(gè)日夜,最終開(kāi)花結(jié)果。感觸良多,今天就借這篇文章來(lái)談一談這本書的創(chuàng)作。
寫書前
在正式寫書前,我已經(jīng)寫了很多有關(guān)GitLab CI/CD的文章,有的只是簡(jiǎn)單的記錄,有些是自己的思考,當(dāng)時(shí)也沒(méi)想著以后會(huì)寫書,但無(wú)疑,這些前期積累的資料都給了我很大的支撐,是我最初始的素材。我寫的最早的GitLab CI/CD文章可以追溯到2020年7月份,那是我剛進(jìn)入滴普科技的第二個(gè)月,新的工作總是充滿了挑戰(zhàn)性,在兩個(gè)月內(nèi)我也熟練使用了Docker,接觸了一些開(kāi)源的K8s相關(guān)的項(xiàng)目,這些知識(shí)都讓我以后使用某個(gè)平臺(tái)變得輕而易舉。一行docker命令就將項(xiàng)目部署起來(lái)。
在2021年的某一天,在CSDN的博客專家群里,熱心分享的博主們開(kāi)始討論了寫書這件事。有些博主已經(jīng)寫了三本書,而且還在寫書,有些新作者也開(kāi)始嘗試。這給我的心里埋下了一顆種子。這顆種子在上班路上發(fā)芽,在下班路上發(fā)芽,在我寫博文時(shí)成長(zhǎng),最終我不得不深刻思考寫書這件事。
就像我寫了幾年的博客,得到了社區(qū)的博客專家稱號(hào),前端領(lǐng)域優(yōu)秀作者稱號(hào),積累到一定的程度就會(huì)有一個(gè)里程碑,不是開(kāi)始,也不是結(jié)束,只是一個(gè)里程碑。而成書也是對(duì)某一個(gè)細(xì)分領(lǐng)域的深刻,系統(tǒng)學(xué)習(xí),總結(jié)的一個(gè)里程碑。技術(shù)人偶爾要站起來(lái)跳一跳,看看自己到底能達(dá)什么樣的高度。別人的認(rèn)可是一部分因素,更重要的自己想寫書,寫書的價(jià)值是毋庸置疑的。
衡量一個(gè)人的價(jià)值,不是他擁有什么,而是看他給后來(lái)者留下了什么。
書,我一定要寫。
當(dāng)我在博主群里詢問(wèn)是否有編輯推薦時(shí),鄒老師向我推薦了人郵的編輯。這里再次感謝。
當(dāng)時(shí)可供我選擇的選題有三個(gè)Node-RED
,ThingsBoard
,GitLab CI/CD
這三個(gè)選題在2021年我都有一定的研究和專欄(感興趣的同學(xué)可以看看我的相關(guān)專欄),最重要的很認(rèn)同他們都是非常好的優(yōu)秀項(xiàng)目,相信在不久的將來(lái)會(huì)有更多人的需要學(xué)習(xí),了解,研究它們。其實(shí)現(xiàn)在這三個(gè)開(kāi)源項(xiàng)目也有很多的社區(qū)和社群。
在Node-RED被否定后,我硬著頭皮申請(qǐng)了GitLab CI/CD這個(gè)選題。
為什么說(shuō)是硬著頭皮?因?yàn)閲?yán)格來(lái)說(shuō)GitLab CI/CD 屬于DevOps領(lǐng)域,在寫書的時(shí)候必然需要一些相關(guān)概念,理論基礎(chǔ)。除了這些,最大的攔路虎是 作為一個(gè)前端,我的shell腳本技能只局限于 ls -l
, mkdir
,touch
,vim
,這幾個(gè)簡(jiǎn)單命令🙃。為了解決這個(gè)短板,我向編輯申(bai)請(qǐng)(piao)了四本書,其中就有《鳥(niǎo)哥的Linux 私房菜 第四版》,《持續(xù)交付 2.0》。剛開(kāi)始會(huì)怕這些未知的問(wèn)題。但后來(lái)想通了,兵來(lái)將擋,遇水搭橋,而且當(dāng)時(shí)坐我旁邊的就是一個(gè)運(yùn)維大拿。我怕誰(shuí),誰(shuí)阻擋我,我就解決誰(shuí)。帶著豪氣干云的決心,開(kāi)始了我的寫作之旅。在真正寫的時(shí)候,針對(duì)shell腳本這一塊,是我當(dāng)初夸大了問(wèn)題的復(fù)雜度,一本書里三行的shell腳本都不超過(guò)五處。所以如果你想在書里學(xué)習(xí)shell腳本,那很大程度會(huì)失望😂。剛?cè)腴T的小白也不要擔(dān)心,書里沒(méi)什么很深?yuàn)W的代碼片段。
有關(guān)之前的教程可以查看這篇文章我是如何把一套GitLab CI/CD課程做到全網(wǎng)第一的?
寫書中
寫書是很枯燥的,而且不像我寫博客那樣隨心所意。
很多個(gè)周末我都是待在村口的肯德基,邊聽(tīng)音樂(lè)邊寫作。這篇文章就是坐在這個(gè)肯德基里寫的,還有免費(fèi)空調(diào)。有時(shí)為了心無(wú)旁騖地寫作,也會(huì)去公司寫,坐一個(gè)小時(shí)的公交。
寫作的時(shí)候,女兒都是母親帶著,那段時(shí)間很辛苦,自己還要備考。
寫作的過(guò)程中我也收到了很多幫助,讓我印象最深的是,我因?yàn)槭诸^沒(méi)有集群去實(shí)踐k8s部署應(yīng)用,一個(gè)網(wǎng)友知道后,就直接把他的集群配置文件交給我啦。我也在他的幫助下搞通了整個(gè)流程,寫下了這篇文章《使用GitLab CI/CD部署應(yīng)用到Kubernetes集群的方案》
在學(xué)習(xí)的過(guò)程中,受助于人,是非常幸運(yùn)的。我們應(yīng)該感恩。再次感謝那位朋友。
寫書的時(shí)候,在啃官方文檔上我是下了苦功夫的,GitLab CI/CD有一頁(yè)文檔,是.gitlab-ci.yml 關(guān)鍵詞解析。點(diǎn)擊此處可以查看
這個(gè)頁(yè)面用A4紙的打印有69
頁(yè),69頁(yè),69頁(yè)。 我就在上班路上啃,下班路上咀嚼。
休息的片刻翻譯。
官方文檔我看了不止3篇,有的地方看了5篇不止。發(fā)現(xiàn)有不對(duì)的地方,也給官方提了3個(gè)PR。
有很多人在學(xué)習(xí)技能,看文檔時(shí),不止如何下手。
我告訴你,從第一頁(yè)開(kāi)始,每一篇文檔都要看,完整地看,不留死角地看。
不僅要看,還要看3遍,5遍,10遍。構(gòu)建一個(gè)完整的知識(shí)體系。
我的其他幾個(gè)專欄也都是這樣成型的。如果你要練書法,就要先從點(diǎn),橫,豎這些最最基本的做起。
書的內(nèi)容
在寫書前我花了很長(zhǎng)時(shí)間,把那些東西放進(jìn)去,那些東西不放進(jìn)去。知識(shí)整理,組織規(guī)劃一直是我的強(qiáng)項(xiàng),所以我對(duì)書的目錄安排還算比較滿意。
本書的內(nèi)容主要分為兩大部分,
一部分是GitLab CI/CD的基礎(chǔ)知識(shí),包括CI/CD的含義,什么是流水線,GitLab CI/CD的組成部分,GitLab Runner,.gitalb.yml文件。最重要的是34個(gè)關(guān)鍵詞的使用。
第二部分是項(xiàng)目實(shí)戰(zhàn),如果上面的基礎(chǔ)知識(shí)是點(diǎn)的,實(shí)戰(zhàn)篇就是將點(diǎn)連成線,聚焦具體的應(yīng)用項(xiàng)目,解決連續(xù),復(fù)雜的業(yè)務(wù)場(chǎng)景,能夠落地實(shí)施,提高研發(fā)效能。
一共有三個(gè)項(xiàng)目實(shí)戰(zhàn),作為一名前端,我把前端項(xiàng)目的CI/CD放在第一位,應(yīng)該不會(huì)有人有意見(jiàn)吧。在書中詳細(xì)描寫了三種前端Vue項(xiàng)目的部署方式,分別是使用Docker部署應(yīng)用,使用阿里云OSS部署,在遠(yuǎn)程機(jī)器上部署。
第二項(xiàng)目是 前后端分離的項(xiàng)目,后端為Java語(yǔ)言,前端是React框架,講解了在前后的分離的應(yīng)用架構(gòu)下,如何使用父子流水線,跨項(xiàng)目流水線來(lái)合理設(shè)計(jì)CI/CD流程。并延伸了一些微服務(wù)架構(gòu)的應(yīng)用部署。
第三項(xiàng)目是 Python應(yīng)用,Flask Web 應(yīng)用框架,部署到Kubernetes集群中。
每一個(gè)實(shí)戰(zhàn)項(xiàng)目都是不同的架構(gòu),不同的編程語(yǔ)言,不同的部署方式。這樣能夠覆蓋更多的業(yè)務(wù)場(chǎng)景,這也是運(yùn)維人員經(jīng)常遇到的場(chǎng)景。
除了覆蓋到各種業(yè)務(wù)場(chǎng)景,書中也對(duì)探討了另一個(gè)話題——速度,流水線的運(yùn)行速度,部署速度一直都是軟件團(tuán)隊(duì)關(guān)注的重要指標(biāo),也非常影響開(kāi)發(fā)體驗(yàn)。所以在書里也加大力度探討了如何加快流水線運(yùn)行速度。每一個(gè)實(shí)戰(zhàn)項(xiàng)目后,都有針對(duì)該項(xiàng)目的優(yōu)化措施,最佳實(shí)踐。
雖然我盡力覆蓋更多的業(yè)務(wù)場(chǎng)景,但無(wú)奈場(chǎng)景是無(wú)窮無(wú)盡的。使用GitLab CI/CD 解決復(fù)雜的業(yè)務(wù)場(chǎng)景我們只能從基礎(chǔ)知識(shí)下手,它的能力都是有基礎(chǔ)知識(shí)支撐起來(lái)的。正所謂 萬(wàn)變不離其宗,只有打好基礎(chǔ),我們才能戰(zhàn)勝更加復(fù)雜的困難(這好像是我初中老師經(jīng)常說(shuō)的)。
GitLab CI/CD的流水線都寫在一個(gè)yml文件中,使它能夠保持優(yōu)美的格式。除了30多個(gè)關(guān)鍵詞用來(lái)覆蓋多數(shù)業(yè)務(wù)場(chǎng)景,最讓人嘆服的是很多時(shí)候你可以使用預(yù)設(shè)變量非常簡(jiǎn)單地實(shí)現(xiàn)不可思議的復(fù)雜功能。
你可以在流水線中實(shí)現(xiàn),如果a開(kāi)發(fā)人員的提交信息里包含[pass]
, 就不運(yùn)行某個(gè)檢查作業(yè),也可實(shí)現(xiàn)b開(kāi)發(fā)人員的提交必須經(jīng)過(guò)Approval
才能合并,這些判斷都只是一行表達(dá)式,并不需要你寫shell腳本去實(shí)現(xiàn),而且會(huì)有版本控制,各個(gè)分支互不影響。
在書中我根據(jù)自己的學(xué)習(xí)經(jīng)歷給出了合適學(xué)習(xí)路線,先了解概念,搭建環(huán)境,學(xué)習(xí)7,8個(gè)常用的關(guān)鍵詞,然后實(shí)踐。學(xué)習(xí)更多關(guān)鍵詞,優(yōu)化流水線。
書的內(nèi)容介紹,目錄都可以在商品詳情頁(yè)可以看到,這里就不做太多的介紹啦。
后記
在我分享GitLab CI/CD時(shí),有很多專業(yè)的運(yùn)維朋友向我請(qǐng)教問(wèn)題,和他們的交流中,讓我始終保持著強(qiáng)烈的求知欲和探索欲。一個(gè)前端,不去卷前端,便要來(lái)混運(yùn)維,我只想告訴大家,沒(méi)有人可以給自己打標(biāo)簽,不要把自己圈養(yǎng),打破固有的知識(shí)牢籠。之前有個(gè)人告訴我前端不該學(xué)GitLab CI/CD,當(dāng)我用它把公司的前端開(kāi)發(fā)環(huán)境部署流程搞成模范時(shí),他又想讓我學(xué)習(xí)Jenkins😅。學(xué)習(xí)GitLab CI/CD就像程序員業(yè)余時(shí)間炒股票,彈鋼琴,健身,刷短視頻,玩塞爾達(dá)一樣,不要當(dāng)作養(yǎng)家戶口的工具,當(dāng)作自己的興趣,而興趣產(chǎn)生價(jià)值就是開(kāi)花結(jié)果。
因?yàn)橄嘈潘詧?jiān)持。
如果你們公司正在使用GitLab 管理代碼,請(qǐng)務(wù)必使用GitLab CI/CD來(lái)做持續(xù)集成,持續(xù)部署。它會(huì)幫助你的團(tuán)隊(duì)提高DevOps能力,降本增效。
如果你正在尋找一個(gè)自動(dòng)部署工具,可以試試GitLab CI/CD,諸多特性會(huì)讓你愛(ài)不釋手。
這里大膽預(yù)測(cè)一下,不出兩年,
第二本GitLab CI/CD的書籍就會(huì)出版
書的出版不是終點(diǎn),也不是起點(diǎn),我一直在路上,和無(wú)數(shù)技術(shù)者同行。
推薦閱讀
GitLab CI/CD 教程
GitLab CI/CD .gitlab-ci.yml關(guān)鍵詞
GitLab CI/CD:開(kāi)發(fā)和運(yùn)維管理的效率神器
.gitlab-ci.yml keyword reference