做爲一個技術團隊的Leader,你是如何保證成員的開發環境達到公司的標準,或者是你定製的最低要求的?
若是你的回答是:差很少就好了,有問題再說
,那麼,你已經在給本身挖坑了。php
同事A的開發環境中用的是PHP 7.1
,因此他在代碼裏寫了這麼一個函數:node
function getName(?int $id): string { return 'name'; }
好的,?int 的意思是你的參數必須是數字,可是能夠填一個數字之外的特殊類型,那就是null。mysql
同事B用的是PHP 7.0
,那麼抱歉,他得這麼改:linux
function getName(int $id = null): string { return 'name'; }
?int
須要被改爲int
,由於那是7.1的Nullable語法nginx
同事C用的是 PHP 5.6
,好的,繼續改吧:git
function getName($id = null) { return 'name'; }
全部的類型定義都得移除,沮喪嗎?sql
好的,你做爲Leader?怎麼選擇用哪一個同事的代碼做爲最終輸出?可想而知,選擇哪一個都不合適。docker
同事C 在抱怨,要那麼高的版本真的好嗎?我沒用過新特性,也不感興趣。bash
同事A 在抱怨了,新語法多簡潔啊,一個 ?int 就搞定了。服務器
同事A/B 在抱怨,爲何不用強類型,寫代碼太沒樂趣了。
問題出在Leader,給了成員太多的選擇。會有什麼後果?
優勢 | 缺點 |
---|---|
無 | 部分紅員的利益受損 |
內部意見不統一,產生隔閡 | |
可能出現被動學習新知識,生產力降低 | |
維護多個不一樣時期的項目時,本地環境的版本切換十分不方便 | |
你的領導能力受到質疑 |
在誘惑面前,人們每每會選擇最有利於本身的方式。不要試圖去挑戰人性,做爲Leader的你,必須比任何一個成員都先作出選擇。
我不想講docker是什麼,由於其餘人的博客裏已經寫爛了。
你須要知道的是,你能夠把開發環境扔進docker,而後讓每一個成員忘記本身電腦裏的開發環境。至於用了什麼版本的php、mysql、linux、nginx、nodeJs,已經固定在docker裏了。
你不再用擔憂你的成員會用其餘版本的環境去寫代碼了,由於你已經制定了你的規矩。
優勢 | 缺點 |
---|---|
成員沒得選,只能用同一個版本的環境 | Leader須要寫Docker配置 |
成員只須要知道docker怎麼啓動,零學習成本 | |
技術方面的交流障礙減小 | |
代碼符合項目的基本需求,生產力提高 | |
即便再多項目也不要緊,由於每一個項目都是docker啓動,不須要考慮版本 | |
Leader能夠花更多精力在其它事情了 |
也許你已經寫完了全部的Dockerfile配置,並把這些文件放進了項目的根目錄dockers/
,同時爲你的成員寫好了一個構建腳本build.sh
,接着加入版本控制(git,svn),最後推到git服務器等待成員拉取最新的開發環境。好的,成員們開始構建你定製的開發環境了。
# 構建鏡像 sh build.sh # 查看構建的鏡像 docker images # 根據鏡像生成容器,僅供參考。本文不講述docker具體用法 docker run -it -d php:7.1 /bin/bash docker run -it -d nginx:1.14.0 /bin/bash docker run -it -d mysql:5.7 /bin/bash
犀利的你可能把生成容器的操做寫成一個腳本quick-start.sh
,並且用的風聲水起。筆者拍拍你的肩膀,同窗,爲何不用docker-dompose呢?
能夠這麼說吧,這個東西就像是同時啓動了多個你想要啓動的鏡像,並且你還能夠同時結束生成的容器。
# 同時啓動 docker-compose up # 同時結束 docker-compose down
是的,很任性,你只須要配置一下你須要啓動哪些鏡像,而後把配置放到根目錄docker-dompose.yml
中便可。
固然了,還有更多特性,好比 哪些容器之間須要互相關聯,被關聯的容器要用什麼別名,需不須要等待關聯容器啓動完成以後再啓動本身,等等。。。
若是您的項目比較多,那麼推薦您利用git的子模塊(點擊訪問)去維護你的docker配置。這樣您改配置只要改一個地方,全部項目裏面都會同步過去的,極大的提升了您的效率和維護成本。
# 假設已經建好docker的git倉庫 git@git_repository_a # 那麼在您的開發項目中,初始化只需這樣作: git submodule add git@git_repository_a # 您會發現項目根目錄多了一個文件 .gitmodules 以及多了一個docker倉庫的文件夾
可能不算是一篇技術文章,只是拋磚引玉,引導新的Leader怎麼帶領團隊走向正規化的道路。如果真要寫那麼細,可能10篇都不夠寫了。有什麼技術方面的問題能夠在下方留言。