DevOps 講座
前言
最近忙裡偷閒的上了不少中心課程、講座,但是昨天請到趨勢科技的來分享軟體開發的心得,事我覺得近期收穫滿多的一個講座。 雖然在演講一開始的時候,就提出了一些滿誇張的數據,來比較傳統軟體開發流程與DevOps的成效差異,但我更關心的是如何將DevOps的開發精神運用到公司或自己的專案。 想到最近小荒廢了一段時間的科幻小說鍊成計畫,果然怠惰才是萬惡的根源呀。 相較於法人機構的軟體開發,趨勢科技應該更能夠提供一些產業界的經驗,並且更有效地將人力資源分配。
DevOps即是文化
講者開宗明義的地說到,DevOps不是工具也不是方法,而是一個軟體開發的文化。 DevOps的文化主要包含四大項:CAMS(Culture 文化、Automation 自動化、Measurement 評估、Sharing 共享)。 在人員的技能方面,希望培育的是RD(開發)、QA(測試)、OP(營運)三位一體的人才(完美工具人),能夠及時支援並且在開發階段就完成一定程度的檢測,來確保程式碼的穩定性。
文化方面,從最一開始的Waterfall開發理論,由Plan、Code、Test到Deploy一條龍,一直到近年來推廣的Agile,縮短開發週期來及時對客戶的反應進行修正。 在DevOps的文化上又有什麼獨到之處呢? DevOps認定在每個階段的Plan、Code、Test和Deploy都是可以同步進行的,這個觀念我實在有點難以想像,畢竟在軟體開發初期就在構思Deployment感覺有點空泛。 不過我認為重要的部分是在後面三點,若能完全落實將能夠大幅縮短時程,應該就能達到上述的同步開發。
自動化能減少繁複的程式碼驗證時間,但是自動化並不是取代QA部門,而是將QA的人力能夠更精確的用在尋找尚未發現的Bug、客戶會遭遇到的問題排解。 會後Q&A時候也談論到所謂自動化的必須性,當程式只會執行不到6次,是不會撰寫成自動化的程式,因為不符合成本。 在談論自動化的過程中提到一個很有趣的概念,就是”infrastructure as code”,這不禁令我想到之前在Github上面隨便逛都會遇到要用Docker。 這年頭用Docker來快速部屬環境儼然是一個顯學,正好鄰座的隔壁部門同仁也有在使用Docker,就相約好會後討論一些Docker的基本觀念。
評估不外乎四三種主要的資料類型,數值、事件、文檔紀錄,開發者針對不同的紀錄來評估程式碼可能存在的問題,及時對症下藥。 共享這聽起來是再簡單不過的事,但是人與人之間的溝通往往才是最複雜的,這應該跟公司的文化有很密切的關係。 記得在台GG的朋友說過,連跟隔壁部門要的資料都要層層攔阻了,工程師也只能認分的將尋求data的email CC給主管了。 會後的Q&A還有提到很重要的一點,就是對於法人單位而言,程式開發通常不會走到最後要營運及維護的部分,人力的安排上是否會有所不同? 雖然趨勢科技的人員無法給一個很確切的答案,但是培育一個良好的軟體開發文化,基本觀念上是不會有所差異的。
Docker內功修練
會後我就直接衝向同仁的隔間,直接詢問一些關於Docker的基本概念,發現這是即視感嗎?跟Git的感覺好像呀! Docker是架設在OS之上,還可以虛擬不同的環境,這個虛擬化的技術在Linux系統底下是利用LXC,使用者不用進行額外的設定就能輕鬆使用。 但是在Windows的環境下要使用Docker,同仁是用Virtual Box + book2docker.iso這個方式來架設Docker,但其他的虛擬方法像是我之前常用的VMware則沒有嘗試過。 接著就介紹起了DockerFile,其實就是一連串的script來架設你的虛擬環境,這些command及相關基本知識都可以在網路上好心人的Gitbook裡查到。 而且還可以接續著前人設定好的DockerFile進行修改,還有一個專門的網站叫做Docker Hub在分享撰寫好的DockerFile,簡直就跟Git有87%像。 接著同仁就演練了一次部屬的情況,由於每行DockerFile的command都會cache住狀態,並給予一組hash code,所以在下次部屬的時候能夠快速的完成。
在演練過程中,發現run
、restart
兩個指令是不太一樣的概念,run
是從新開啟一個環境、restart
則是接續上一次工作的狀態繼續進行。
還可以從虛擬環境中取出,或是匯入檔案,而最終的虛擬系統還能壓成映像檔發布,簡直就是環境架設的一大福音。
同仁之後還提到什麼Mesos可以虛擬多個異質的環境,方便控管不同使用者在不同環境下的操作,但是這個架構大到有點殺雞用牛刀,這位同仁也沒更深入的研究。
最後我問了一個有趣的問題,為什麼在Python底下有虛擬環境了,為什麼還要用Docker呢?
Pyhton的虛擬環境固然比較穩定,但是專案使用的程式碼可能不只有用到Python,還可能用到其他語言的套件,如此一來就需要一個完整的系統環境。
小結
與其自己從頭摸索,還不如請教有經驗的人,這一直是我的學習準則。 希望自己在學習新知的路上,也能夠持之以恆地完成自己的小專案,才不會顧此失彼兩頭空。
留言