關(guān)于我們
書單推薦
新書推薦
|
Python 3自動(dòng)化軟件發(fā)布系統(tǒng) -Django 2實(shí)戰(zhàn) 本書以*的Python 3.6以上版本為編程語(yǔ)言,以Django 2.1以上版本為Web框架,通過(guò)一步一步詳細(xì)講解,實(shí)現(xiàn)一個(gè)自動(dòng)化軟件部署系統(tǒng),并將所有代碼開源托管在Github網(wǎng)站上。 書中不但講解了Python的基礎(chǔ)知識(shí)、Django的模型、視圖、模板之間的關(guān)系,而且還通過(guò)實(shí)戰(zhàn)項(xiàng)目,介紹了Django Rest Framework(DRF)的開發(fā)步驟、Django Channels實(shí)現(xiàn)Websocket的編程技巧,以及Django TestCase、Mock等測(cè)試用例的編寫。 除此之外,對(duì)于IT公司在DevOps轉(zhuǎn)型過(guò)程中涉及的GitLab、Jenkins、SaltStack等CI/CD工具的安裝配置,以及自動(dòng)化軟件部署系統(tǒng)與之進(jìn)行交互的API,都有較深入的講解。 本書適合運(yùn)維研發(fā)領(lǐng)域的人員,或是有一定Python基礎(chǔ)但又想深入學(xué)習(xí)Python Web開發(fā)的廣大IT人員閱讀參考。 作者提供大量圖表便于讀者理解,書中的實(shí)戰(zhàn)項(xiàng)目能夠快速了解開發(fā),適合基礎(chǔ)和想深入學(xué)習(xí)的讀者。 Django第三方模板使用:這方面的知識(shí),主要涉及的是Django REST Framework和Django Channels。一個(gè)講REST API開發(fā),一個(gè)講WebSocket實(shí)時(shí)應(yīng)用,都是現(xiàn)代Web開發(fā)不得不會(huì)的技能。在講解這些知識(shí)時(shí),以筆者個(gè)人的學(xué)習(xí)經(jīng)歷來(lái)看,單純地講解,或是簡(jiǎn)單地介紹示例代碼,都不會(huì)讓讀者能有多深的理解。所以,我們將結(jié)合具體的自動(dòng)化部署系統(tǒng)代碼,把這兩者的應(yīng)用講明白。 自動(dòng)化軟件部署系統(tǒng):作為本書的主線,這部分內(nèi)容是絕對(duì)要作為重點(diǎn)講解的,不但會(huì)在每章說(shuō)明設(shè)計(jì)的思路,還會(huì)有代碼段詳細(xì)講解主要代碼的作用,以及每個(gè)功能設(shè)計(jì)完成之后都有對(duì)應(yīng)的網(wǎng)頁(yè)截圖。書中貼的代碼段都有Github上對(duì)應(yīng)的文件名稱,并且附有行號(hào)。應(yīng)特別注意的是,因?yàn)闀杏械拇a段是選取Github上文件中的代碼片段,所以行號(hào)主要是作為代碼解釋之用,并不對(duì)應(yīng)于真正的文件行號(hào)。一定要特別注意這個(gè)規(guī)則!另外,自動(dòng)化軟件部署系統(tǒng)的前端UI,我們選用的是網(wǎng)上免費(fèi)開源的Hui的管理框架,這部分內(nèi)容放在附錄里單獨(dú)講解。 CI/CD的工具:這是我們自動(dòng)化部署系統(tǒng)的周邊配套工具,主要包括GitLab、Jenkins、SaltStack三個(gè)工具。沒有這些工具,我們的系統(tǒng)就跑不起來(lái)。而沒有自動(dòng)化系統(tǒng),這些工具卻可以通過(guò)手工操作實(shí)現(xiàn)。所以,這部分內(nèi)容,也是作為一個(gè)運(yùn)維研發(fā)人員必須要熟悉的(但運(yùn)維研發(fā)不需要對(duì)這些工具做日常運(yùn)維和功能管理,這原則上是同部門其他同事的職責(zé))。我們對(duì)這部分內(nèi)容,會(huì)講解其安裝、配置、日常管理。同時(shí),由于我們的自動(dòng)化部署系統(tǒng)需要對(duì)接這些工具的API接口,所以,對(duì)于這三個(gè)工具的API也會(huì)做系統(tǒng)調(diào)用范圍內(nèi)的講解。 本書內(nèi)容 第1章:首先以簡(jiǎn)短完整的示例代碼,從Python基本數(shù)據(jù)類型開始,系統(tǒng)地講解了Python這種編程語(yǔ)言中的數(shù)據(jù)類型、順序、分支選擇語(yǔ)句、循環(huán)語(yǔ)句。然后,對(duì)函數(shù)的類的知識(shí)也做了梳理。因?yàn)樽詣?dòng)化軟件部署系統(tǒng)中使用了線程池,所以在本章,進(jìn)程池和線程池的并發(fā)編程也會(huì)涉及到。本章接下來(lái)講解的內(nèi)容,就是Python的模板化及測(cè)試方面的內(nèi)容。這也是我們寫代碼時(shí)必須要了解的。需要說(shuō)明的是,本書除了在第1章講解Python的測(cè)試內(nèi)容外,還比較全面地講解了Django的測(cè)試。Django部分的測(cè)試內(nèi)容,沒有單獨(dú)成章節(jié),而是作為一些章節(jié)的補(bǔ)充,放置于最后面。Model測(cè)試、View測(cè)試、Form測(cè)試、Mock測(cè)試、API測(cè)試、Channels連接測(cè)試,這些測(cè)試用例,都會(huì)講解到。 第2章:從本章開始,重點(diǎn)講Django這個(gè)Web開發(fā)框架的內(nèi)容,包括后面的自動(dòng)化軟件部署系統(tǒng),也是在Django框架基礎(chǔ)之上實(shí)現(xiàn)的。在本章中,先講解了關(guān)于Web和HTTP協(xié)議的常識(shí),HTML、CSS、JS代碼的作用;之后,在Web開發(fā)中引入Django介紹。在介紹Django框架時(shí),以循序漸進(jìn)的方式,逐步引入Django的視圖、URL路由、模板和模型數(shù)據(jù)庫(kù)的學(xué)習(xí)。這個(gè)學(xué)習(xí)過(guò)程,不是一下就全部推向讀者,而是進(jìn)行了知識(shí)點(diǎn)隔離,在進(jìn)行前面知識(shí)講解的同時(shí),不會(huì)涉及后面知識(shí)點(diǎn)的內(nèi)容。這種講解方法,我們認(rèn)為是一種更有效的學(xué)習(xí)方式。在了解了Django的主要知識(shí)之后,本章還會(huì)介紹Django的表單及開箱即用的后臺(tái)管理界面,這些知識(shí),可以讓讀者更快速、更規(guī)范地進(jìn)行Django的Web開發(fā)。 第3章:本章主要介紹自動(dòng)化軟件部署系統(tǒng)的工作流,它也是一種Devops的運(yùn)作流程。有了這個(gè)流程模型,在進(jìn)行后面的代碼編寫時(shí),才能既見樹木,又見森林。在本章開始,寫了幾個(gè)簡(jiǎn)單的開發(fā)示例代碼(主要是Java),并進(jìn)行了經(jīng)典的編譯打包和部署操作。這個(gè)手工操作的過(guò)程,會(huì)在后面用自動(dòng)化的方法來(lái)實(shí)現(xiàn)。在有了示例代碼之后,本章接著講解如何將示例代碼使用GitLab來(lái)管理源代碼,使用Jenkins來(lái)自動(dòng)編譯源代碼生成軟件包,使用SaltStack來(lái)遠(yuǎn)程拉取軟件包并進(jìn)行啟停部署。本章最后,還講解了GitLab及Jenkins的主要API接口,這些接口,我們會(huì)在后面的開發(fā)時(shí),使用第三方功能模塊進(jìn)行配置和調(diào)用。 第4章:從本章開始,正式進(jìn)入軟件自動(dòng)化部署系統(tǒng)的實(shí)戰(zhàn)開發(fā)。在本章中,我們規(guī)劃好此項(xiàng)目的目錄結(jié)構(gòu),使用Django命令建好相關(guān)的App應(yīng)用,實(shí)現(xiàn)全面數(shù)據(jù)庫(kù)的設(shè)計(jì)。在設(shè)計(jì)每個(gè)數(shù)據(jù)表時(shí),都會(huì)講解這個(gè)數(shù)據(jù)表的作用、每個(gè)字段的意義。更重要的是,再結(jié)合第2章的知識(shí)點(diǎn),使用Django orm為每個(gè)數(shù)據(jù)表生成一批模擬數(shù)據(jù)。有了這些數(shù)據(jù),就可以更深入地理解orm技巧,更深入地理解部署系統(tǒng)數(shù)據(jù)庫(kù),并且后面開發(fā)的每一個(gè)UI網(wǎng)頁(yè),都有充足的演示數(shù)據(jù)。 第5章:本章講解從代碼上實(shí)現(xiàn)自動(dòng)化用戶管理功能。其主要功能是用戶的注冊(cè)、登錄、退出、修改密碼和郵箱、忘記密碼時(shí)的找回、登錄時(shí)的驗(yàn)證碼實(shí)現(xiàn)等。由于這些內(nèi)容涉及了前端和后端開發(fā)的知識(shí)融合,所以在本章開始,會(huì)先講解Web開發(fā)中Cookie及Session的知識(shí)。然后,再系統(tǒng)地講解Django內(nèi)置的用戶管理功能。Manabe項(xiàng)目的用戶管理功能,就是在結(jié)合Django內(nèi)置功能及自定義功能之上實(shí)現(xiàn)的。在實(shí)現(xiàn)用戶管理功能的相關(guān)代碼時(shí),我們會(huì)按照表單代碼、視圖代碼、模板代碼及路由注冊(cè)代碼這四大步驟(有的功能塊可能沒有表單內(nèi)容),細(xì)致地講解代碼的主要內(nèi)容。 第6章:在本章中,主要講解自動(dòng)化軟件部署系統(tǒng)中應(yīng)用和服務(wù)器的錄入。有了這兩個(gè)功能,再加上合適的權(quán)限管理,就能讓不同的用戶參與到系統(tǒng)的建設(shè)中來(lái),讓運(yùn)維研發(fā)人員專注于系統(tǒng)的開發(fā)和功能的完善,而系統(tǒng)數(shù)據(jù)的準(zhǔn)備性和擴(kuò)展性就留給不同的部門分別負(fù)責(zé)。在技術(shù)上,本章系統(tǒng)地講解了Django開發(fā)技術(shù)中的類視圖(class based view)、自定義的四級(jí)用戶權(quán)限設(shè)計(jì)、zTree的前端庫(kù)用于實(shí)現(xiàn)權(quán)限樹形展示、Select 2前端庫(kù)用于多用戶的方便選擇;在最后,還示范了Django中的Model測(cè)試、View測(cè)試及Form測(cè)試用例的編寫。 第7章:在本章,實(shí)現(xiàn)了發(fā)布單的新建、軟件編譯功能。其中,在編譯軟件時(shí),調(diào)用了Python的第三方庫(kù)操作Jenkins的API接口,有了這個(gè)功能之后,發(fā)布系統(tǒng)就可以將Jenkins隱藏于幕后,減輕一般研發(fā)人員親自操作Jenkins的負(fù)擔(dān)。 第8章:環(huán)境流轉(zhuǎn),是我們?cè)趯?shí)際工作中遇到的一個(gè)功能?赡苡械墓静恍枰廊绾螌(shí)現(xiàn)這一功能,相信對(duì)讀者會(huì)有一定的啟發(fā)。一個(gè)發(fā)布系統(tǒng)有了環(huán)境流轉(zhuǎn)功能,并對(duì)它進(jìn)行權(quán)限管理,就可以將開發(fā)、測(cè)試、運(yùn)維三種角色串連起來(lái),形成自動(dòng)化部署的流水線操作。 第9章:在本章,實(shí)現(xiàn)了自動(dòng)化部署的核心功能軟件部署。同樣,我們會(huì)以視圖、網(wǎng)頁(yè)模板、URL路由的方式進(jìn)行層層推進(jìn)實(shí)現(xiàn)。對(duì)三個(gè)最重要的函數(shù),deploy_cmd()、deploy()、cmd_run()的代碼,也進(jìn)行了細(xì)致的講解。其中,涉及到調(diào)用saltstack api的內(nèi)容,也進(jìn)行了相應(yīng)的封裝。在發(fā)布過(guò)程中,涉及的服務(wù)器和應(yīng)用的數(shù)據(jù)表字段變化,都有細(xì)致入微的實(shí)現(xiàn)。在實(shí)現(xiàn)發(fā)布的同時(shí),服務(wù)啟停作為一個(gè)附加而常用的功能,也可以進(jìn)行功能上的實(shí)現(xiàn)。當(dāng)然,這些都是基于第6章的權(quán)限管理機(jī)制來(lái)進(jìn)行控制的。本章末尾,發(fā)布的歷史記錄功能,也都一一實(shí)現(xiàn)。 第10章:在本章,我們使用了Django Channels這樣一個(gè)較新的WebSocket技術(shù),解決了軟件發(fā)布過(guò)程中的實(shí)時(shí)日志讀取的問(wèn)題。為了示范分模板的調(diào)用,在本章中,我們啟動(dòng)了一個(gè)名為mablog的新的Django項(xiàng)目。這個(gè)項(xiàng)目的主要目的有兩個(gè):一是實(shí)現(xiàn)寫入日志的API,供第9章的軟件發(fā)布時(shí)調(diào)用;二是使用WebSocket的實(shí)時(shí)雙向連接推送技術(shù),把日志作為消費(fèi)者,在一個(gè)連接中實(shí)時(shí)地從服務(wù)器推向?yàn)g覽器。相對(duì)于間隔循環(huán)的Ajax,它的優(yōu)勢(shì)可以說(shuō)是相當(dāng)明顯的。但由于這是一個(gè)新的異步技術(shù)實(shí)現(xiàn),需要讀者在熟悉了Django的常規(guī)同步編程之后,才能繼續(xù)本章的學(xué)習(xí)。在本章接下來(lái)的部分,講解如何使用Daphne在生產(chǎn)中部署mablog項(xiàng)目,以及如何編寫Channels連接的測(cè)試用例。 第11章:本章主要講解如何使用Django REST Framework(DRF)進(jìn)行RESTful API接口的開發(fā)。在本章中,首先講述了DRF的安裝配置,以及為了安全而設(shè)計(jì)的Token認(rèn)證實(shí)現(xiàn)。然后,基于DRF的Viewset集成快速開發(fā)功能,實(shí)現(xiàn)了用戶App應(yīng)用,以及服務(wù)器的API接口開發(fā)。其間,涉及到的序列化技術(shù)、外鍵引用技術(shù)、Token生成及獲取、URL注冊(cè)規(guī)則都有實(shí)戰(zhàn)級(jí)的演示。最后,還使用了Requests庫(kù)進(jìn)行Post、Get請(qǐng)求測(cè)試,介紹了如何進(jìn)行DRF的測(cè)試用例的編寫。 第12章:作為本書的最后一章,首先實(shí)現(xiàn)了Django中的Logging日志記錄功能,接著使用百度echarts技術(shù),實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的發(fā)布單數(shù)據(jù)編譯曲線圖和柱狀圖。用戶可以在此基礎(chǔ)上,實(shí)現(xiàn)更多的系統(tǒng)統(tǒng)計(jì)和圖表功能。Django的生產(chǎn)環(huán)境部署,也是一個(gè)必不可少的學(xué)習(xí)內(nèi)容。在本章,我們示例了在生產(chǎn)環(huán)境中推薦的uwsgi、gunicorn的安裝及運(yùn)行,以及前端Nginx代碼的配置。同時(shí),為了對(duì)接新興的Docker容器技術(shù),在本章還實(shí)現(xiàn)了Nginx鏡像,以及支持Uwsgi、Gunicorn、Channels模板的鏡像。最后,介紹了如何使用Coverage這個(gè)工具,實(shí)現(xiàn)Django開發(fā)中的代碼覆蓋率測(cè)試報(bào)告。 附錄1:詳細(xì)講解了Python 3.6在Windows系統(tǒng)下的安裝、Django 2.1的安裝配置、Pycharm開發(fā)IDE的基本配置使用。對(duì)于日常開發(fā)中的Python虛擬環(huán)境管理當(dāng)前流行的基于內(nèi)置Venv模板及Pipenv都有所涉及。 附錄2:現(xiàn)在,很多公司的代碼管理平臺(tái)都從Svn切換到GitLab。這個(gè)附錄,就講解了GitLab的安裝、服務(wù)啟停和常用功能的使用,如新增項(xiàng)目及項(xiàng)目組、新增用戶及授權(quán)。 附錄3:Jenkins在中小企業(yè)幾乎已成為CI工具的代名詞,我們的自動(dòng)化部署系統(tǒng)也是調(diào)用Jenkins的API來(lái)生成軟件包的。在本附錄中,首先演示了如何使用Docker容器來(lái)快速安裝一個(gè)Jenkins示例服務(wù)器。然后,進(jìn)行初步的管理配置。接著,介紹了Jenkins新版中的Pipeline的語(yǔ)法入門。有了這些基礎(chǔ)知識(shí),就能理解自動(dòng)化部署系統(tǒng)中的Jenkins方面的內(nèi)容了。 附錄4:在自動(dòng)化部署系統(tǒng)中,我們使用了一個(gè)名為Hui的開源前端管理框架,用于快速生成所有網(wǎng)頁(yè)的模板。在本附錄中,重點(diǎn)講解了這個(gè)Hui前端框架的主要組件。然后,將自動(dòng)化部署系統(tǒng)的前端網(wǎng)頁(yè),按子模板形式進(jìn)行了劃分。有了這些基礎(chǔ)知識(shí),在看正文時(shí),前端代碼部分就很好地對(duì)接起來(lái)了。除此之外,對(duì)于實(shí)踐開發(fā)過(guò)程中使用的三個(gè)主要前端庫(kù)jQuery、zTree、Select 2,也進(jìn)行了簡(jiǎn)單的講解。 附錄5:這是本書最后一個(gè)附錄,講解了目前最流行的企業(yè)Docker倉(cāng)庫(kù)管理工具Harbor。其安裝、配置、用戶管理、項(xiàng)目管理過(guò)程,都以實(shí)踐的形式一一呈現(xiàn)。最后,還進(jìn)行了Docker上傳及下載的測(cè)試。讀者可以結(jié)合第12章的幾個(gè)鏡像,學(xué)習(xí)如何將企業(yè)內(nèi)容實(shí)現(xiàn)Docker鏡像的管理。這對(duì)于現(xiàn)在的運(yùn)維及運(yùn)維研發(fā)人員,都可以說(shuō)是一個(gè)基本技能了,故在最后,涉及到了塊的內(nèi)容。 代碼規(guī)范 本書涉及的代碼有三種,下面一一說(shuō)明其顯示規(guī)范。
書中的命令行,以BKB小五號(hào)字體,加粗強(qiáng)調(diào)顯示。如下示例:python manage.py runserver2. 命令輸出 命令的輸出,以BKB小五號(hào)字體,加粗強(qiáng)調(diào)顯示。如下示例:Performing system checks... System check identified no issues (0 silenced). September 15, 2018 - 22:07:46 Django version 2.1, using settings manabe.settings Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.3. 程序代碼 程序代碼的顯示,首先會(huì)分行,然后給出此代碼所有Github的URL鏈接地址。此地址以BKB小五號(hào)字體、加粗、斜體強(qiáng)調(diào)顯示。緊接著給出代碼內(nèi)容,每一行代碼左邊都會(huì)有連續(xù)的行號(hào),整個(gè)代碼塊以淺灰色為底。代碼內(nèi)容如果強(qiáng)調(diào)不為完整文件或內(nèi)容,會(huì)有…省略號(hào)出現(xiàn)。如果代碼內(nèi)容強(qiáng)調(diào)為一個(gè)完整的類或函數(shù)或文件,則不會(huì)涉及…省略號(hào)?傊磺凶罱K代碼,以Github上的為準(zhǔn)。 這里需要再次強(qiáng)調(diào)的是,代碼塊中的行號(hào),是為了在接續(xù)的代碼解釋中方便解釋之用,并不代表此代碼塊在Github文件中真正的行號(hào)。這樣做的原因是,我們常常需要將Github中的一個(gè)代碼文件,在不同的頁(yè)面拆成不同的代碼塊來(lái)解釋。如果特別強(qiáng)調(diào)行號(hào)的對(duì)應(yīng)關(guān)系,反而會(huì)讓讀者在閱讀書中的每一個(gè)代碼塊時(shí),有不連貫的感覺;而且在代碼解釋中,也會(huì)有支離破碎的數(shù)字,因而,我們會(huì)采用每個(gè)代碼塊自我連續(xù)的行號(hào)處理方案。這是讀者在看本書代碼和Github上代碼時(shí),需要特別注意的地方。 讀者對(duì)象 本書不是一本細(xì)致講解Python的入門書,所以希望讀者具有一定的Python基礎(chǔ),有過(guò)使用Python開發(fā)腳本或是其他應(yīng)用的經(jīng)驗(yàn),至少,也應(yīng)該看過(guò)網(wǎng)上幾篇入門版的教程。A Byte of Python(《簡(jiǎn)明Python教程》)這本入門級(jí)教程,值得推薦。 另外,也希望讀者能有一點(diǎn)運(yùn)維經(jīng)驗(yàn),對(duì)Linux系統(tǒng)的操作較熟悉。 能滿足以上兩點(diǎn)要求的IT從業(yè)人員,都可以是本書的讀者對(duì)象。 致謝 首先,感謝北京航空航天大學(xué)出版社的劇艷婕編輯,是她讓我們有機(jī)會(huì)系統(tǒng)地總結(jié)自己的技能,并能高效地把本書推送到讀者面前。 ========================================================= 本書寫作過(guò)程,適逢家中新增二寶。妻子潘永日夜操心,孝云大姐不辭辛勞;我則陪伴甚少,無(wú)以為報(bào)。遙想家母魏恩樞,艱難時(shí)代,自學(xué)縫紉起家,養(yǎng)大我兄弟姐妹四人,個(gè)中強(qiáng)韌,不言而喻。本書如果有小小成就,要?dú)w功于這天下無(wú)私而偉大的母愛! 陳剛 ========================================================= 感謝親人,感謝朋友! 王洪軍 ========================================================= 感謝公司領(lǐng)導(dǎo)和同事對(duì)我們平時(shí)工作的支持和理解。 在寫作本書時(shí),兩位作者參考了網(wǎng)上的大量文檔,由于這些文檔相互引用的情況比較多,所以本書并未能逐個(gè)列舉出所有參考資料。在此一一感謝這些朋友,是他們,讓這個(gè)IT世界更美好。 糾錯(cuò) 限于作者能力有限,書中錯(cuò)誤在所難免。如果讀者發(fā)現(xiàn)其中錯(cuò)誤,歡迎發(fā)送到作者郵箱aguncn@163.com。請(qǐng)以xxx章節(jié)xx頁(yè)的內(nèi)容或代碼有錯(cuò)誤為標(biāo)題。 陳剛,有關(guān)于大數(shù)據(jù)、軟件開發(fā)、電商網(wǎng)絡(luò)平臺(tái)、云計(jì)算和互聯(lián)網(wǎng)金融平臺(tái)等工作經(jīng)驗(yàn),現(xiàn)主要從事服務(wù)器網(wǎng)絡(luò)運(yùn)維及運(yùn)維開發(fā)相關(guān)的工作,主攻Docker容器技術(shù)及Kubernetes的自動(dòng)化運(yùn)維,開發(fā)語(yǔ)言以Python為主,且涉及php、java和go語(yǔ)言等。 王洪軍,有關(guān)于電商平臺(tái)開發(fā)經(jīng)驗(yàn),主攻運(yùn)維開發(fā)領(lǐng)域,在Docker容器技術(shù)及Kubernetes編排技術(shù)上有自己獨(dú)到的見解。 第1章Python基礎(chǔ)1
你還可能感興趣
我要評(píng)論
|