paas持續集成
A. Docker崛起,如何對待這個「壞孩子」
不久前,Docker官方公布的數據顯示,全球已有46萬個應用Docker 化,並且實現兩年增長3000%。以Docker為代表的容器技術在發展速度上,業已超過了曾經的虛擬化技術和雲計算技術。
或許也正因如此,2015年被稱為Docker野蠻擴張的一年,先後通過了OCI和CNCF 兩大標准組織的確立,更是在中國引發了如火如荼的Docker 創業之風,出現了阿里百川、網易蜂巢等大批基於Docker的容器雲。誕生於2013年的Docker技術,讓那些成熟的雲計算服務突然顯得老邁、遲緩且落伍,而國內外的雲計算巨頭們又是如何對待這個壞孩子呢?
Docker崛起,或受益於羸弱的傳統PaaS服務
有關「PaaS已死」的說法由來已久,既不如IaaS那樣靈活自由,又不如SaaS那樣可以直接推向消費者。一個似乎可以用來佐證的事實是,DotCloud作為Docker技術的締造者,在今年年初宣布倒閉,Docker的繁榮間接地導致dotCloud在PaaS平台上的衰敗。
PaaS服務的羸弱在一定程度上受限於不成熟的框架和工具,導致有些PaaS解決方案讓原來在IaaS上很容易實現的事變得更加復雜。一方面,企業應用環境多樣化,單一PaaS平台很難滿足企業客戶的多樣化需求。另一方面,PaaS沒有像Openstack類似的標准,市場上的很多PaaS廠商都提供自己的私有API開發介面,並且互不兼容,導致企業在某個PaaS平台上開發的應用,很難移植到另一平台上。對很多工程師和程序員來說,他們更願意作為PaaS的構建者,而非PaaS的使用者。企業則寄希望於PaaS來消除技術「周邊環境」的不利因素,讓開發者有更多的精力專注於開發。這種需求和初衷的不相符,盡管讓傳統 PaaS廠商在2015年依舊取得了不菲的成績,但容器技術的熱火朝天,或多或少反襯出了傳統 PaaS提供商的些許落寞。
而被翻譯成「碼頭集裝箱」的Docker服務,允許開發者在Docker環境下,按一定的打包標准生產程序,生產出來的標准化程序被裝進標准化的容器(Container)里。這便保證了開發環境、測試環境、生產環境的一致性。此外Docker還具有資源隔離的特點,不同來源、不同種類的容器內放著運行應用所需的完整用戶環境空間,比如程序、組件、運行環境等,對某一容器的改動不會影響其他容器。而且,相比於傳統的虛擬機,Docker的啟動和部署非常快,具有輕量化的優勢。
於是乎,Docker作為開源屆的絕對「網紅」,很多 PaaS 和 IaaS 廠商在2015年甚至更早開始宣布支持 Docker,包括Deis、Flynn、Tsuru、Dawn和Octohost等行業新貴,以及Cloud Foundry和OpenShift等第二代PaaS主力。
主角還是配角,愈演愈烈的雲容器之爭
Synergy Research最近發布的一項報告顯示,2016年第一季度全球雲服務市場收入達到70億美元,但AWS、微軟、IBM和谷歌依舊是市場的壟斷者,AWS虜獲了31%的雲服務市場,微軟、IBM和谷歌則分食了22%的市場份額。此外在市場增長率上,四大巨頭也遠超其他雲服務玩家,特別是微軟和谷歌的市場增幅均超過了100%。
相比於四大巨頭在IaaS和PaaS服務上的跑馬圈地,Docker作為新興的服務模式,被雲服務領域的追趕著和創業者視為「顛覆」雲計算格局的機遇,至少在造勢營銷上是這樣。各雲計算巨頭和明星玩家對容器似乎都展示出了歡迎的態度,可Docker是主角還是配角,中美的互聯網玩家們卻給出了不同的答案。
從美國的雲計算圈來看,不少雲計算創業者成了Docker的忠實擁躉,這在前面已經有所舉例,但雲計算巨頭們卻有著各自的衡量。
2015年,Google 和 RedHat 聯盟以 Kubernetes 1.0 為陣地宣告了大規模容器編排與管理領域的領主地位。不久後,微軟、IBM、VMware、Docker、CoreOS以及SaltStack等多家公司紛紛加入了Kubernetes社區,業已成為當下最受歡迎的容器集群管理系統。
自從2014年6月份起,微軟已經允許用戶在Azure的Linux上運行Docker應用程序。不久前Docker官方對外宣布面向微軟Azure、AWS、Windows 10和 Mac全面推出新的Docker測試版。近日更是傳出了微軟試圖40億美金收購Docker的消息。
事實上,亞馬遜、思科、Vmware等也都宣布支持Docker。不過在這些雲計算巨頭的眼中,Docker不過是一個容器引擎,當CoreOS如谷歌分道揚鑣推出名為Rocket的容器引擎後,谷歌照舊向其拋出了橄欖枝。未來或許還會出現其他Docker的競爭對手或取代者,而Docker們不過是雲計算巨頭們維持市場地位的行業工具,遠未成為影響雲計算現有格局的關鍵力量,至少在市場份額上,容器在未來很長一段時間內還不能和IaaS服務相提並論。
相比之下,以 Docker 為主的容器技術在國內的發展勢頭要更為兇猛,不僅吸引了阿里、騰訊、網易、新浪等互聯網巨頭,一些在亞馬遜、谷歌、Vmware有過工作經驗的工程師也紛紛投入的容器雲創業的大潮中來。綜合來看,國內雲計算廠商在容器雲上的布局可以細分為三種形態:
其一,阿里、華為等IaaS領域的行業先驅。以Docker為代表的容器服務在2015年勢如野火,被它吸引了不只是創業者,還有在IaaS領域的諸多雲計算廠商,阿里和華為就是兩個典型的例子。先是阿里百川在TAE的基礎上使用了Docker技術,隨後阿里雲也推出了基於Docker的容器服務。華為則在去年12月推出了基於Kubernetes和Docker技術打造的CCE容器雲。不過,這類廠商的主要業務仍集中在IaaS領域,也多把容器雲歸為新型PaaS服務。對於瞬息萬變的雲服務市場,即便是行業巨頭也不願錯過任何一個機會。
其二,網易、新浪等踏入雲服務市場的第二梯隊。對於網易、新浪等具有十多年研發運營經驗的老牌互聯網企業,在雲計算的萌芽期便成為雲服務的使用者和推動者,但在近兩年才完成了私有雲到公有雲的過渡,而容器雲就是其所青睞的雲服務之一。以網易蜂巢為例,這一基於Kubernetes容器集群管理技術打造的容器雲,在2015年上線後便成受到市場追捧。原因似乎不難理解,這些企業本身就是容器雲的重度使用者,並擁有自研IaaS等優勢資源做支撐。而從另一方面來看,相比於競爭已經十分激烈的IaaS,容器雲被這類企業進軍雲計算基礎設施服務的一條綠色通道。
其三、時速雲、靈雀雲等Docker紅利下的創業者。用「Docker紅利下的創業者」來形容這些廠商似乎並不為過,正如前面所說不少有國外雲計算公司從業背景的工程師們看到Docker的崛起後紛紛回國創業,並一度成為國內容器雲行業的主流。盡管容器服務的用戶規模和客單價遠不及IaaS,但在針對當前IT系統的資源管理復雜、運維成本高、產品迭代效率差、微服務架構實施困難等問題上似乎是不錯的解決方案。或許也正因如此,資本依舊對這些容器雲領域的創業者紛紛報以厚愛。
此外,不少廠商以CaaS(容器即服務而非通訊即服務)來形容容器雲,並被譽為下一代雲計算。可就目前來看,Docker的處境似乎並不十分樂觀,至少在國內面臨著如何落地的考驗。
下一代雲計算?Docker該如何落地
前兩年火爆的是Openstack,近兩年受寵的當屬Docker,融資、並購、發布會、行業峰會,從雲服務廠商到媒體無不對Docker表現出了近似膨脹的熱情。然而,在高歌Docker和容器雲一系列優點的同時,卻鮮有人談及落地的問題。
一般來說,很多企業尤其是中小企業,所需要的不是如何將Docker或其他容器技術移植到公有雲或私有雲上,而是看到了容器雲的微服務化、運維流程的標准化、持續集成部署的自動化等特點,希望通過容器雲服務來降低產品研發成本,並最大程度的降低系統風險等。事實上,這類企業也正是網易蜂巢、時速雲等容器雲產品的目標用戶。沒有人知道這個市場到底有多大,圍繞Docker開展創新服務的公司卻開始「你方唱罷我登場」。這便註定容器雲市場在未來將迎來一場惡戰,目前似乎已經有所端倪。
就目前而言,不管是阿里、騰訊等雲計算巨頭還是諸多的創業者,在容器雲的技術方面並沒有拉開太大的距離,無非是穩定性和易用性方面的些許差別。由此便導致,當前容器雲市場呈現出拼價格、拼渠道以及拼運營的姿態。可以預見,在不遠的將來,容器雲市場勢必會迎來一場淘汰賽,而能夠解決Docker落地的雲服務廠商才會是最後的贏家。
不管怎樣,Docker 已經成為雲服務市場一枚極具意義的戰略性棋子,無論是在服務層面還是系統層面,雲計算的未來似乎已經被Docker這個壞孩子占據了一席之地。
B. 「Docker容器技術」與「虛擬化技術」的區別是什麼
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架包括系統。
在docker的網站上提到了docker的典型場景:
Automating the packaging and deployment of applications
Creation of lightweight, private PAAS environments
Automated testing and continuous integration/deployment
Deploying and scaling web apps, databases and backend services
由於其基於LXC的輕量級虛擬化的特點,docker相比KVM之類最明顯的特點就是啟動快,資源佔用小。因此對於構建隔離的標准化的運行環境,輕量級的PaaS(如dokku), 構建自動化測試和持續集成環境,以及一切可以橫向擴展的應用(尤其是需要快速啟停來應對峰谷的web應用)。
構建標准化的運行環境,現有的方案大多是在一個baseOS上運行一套puppet/chef,或者一個image文件,其缺點是前者需要base OS許多前提條件,後者幾乎不可以修改(因為 on write 的文件格式在運行時rootfs是read only的)。並且後者文件體積大,環境管理和版本控制本身也是一個問題。
PaaS環境是不言而喻的,其設計之初和dotcloud的案例都是將其作為PaaS產品的環境基礎
因為其標准化構建方法(buildfile)和良好的REST API,自動測試和持續集成/部署能夠很好的集成進來
因為LXC輕量級的特點,其啟動快,而且docker能夠只載入每個container變化的部分,這樣資源佔用小,能夠在單機環境下與KVM之類的虛擬化方案相比能夠更加快速和佔用更少資源
虛擬化是一個廣義的術語,在計算機方面通常是指計算元件在虛擬的基礎上而不是真實的基礎上運行。
虛擬化,原本是指資源的抽象化,也就是單一物理資源的多個邏輯表示,或者多個物理資源的單一邏輯表示。具體到伺服器虛擬化,就是多個物理資源的單一邏輯表示。
虛擬化技術可以擴大硬體的容量,簡化軟體的重新配置過程。CPU的虛擬化技術可以單CPU模擬多CPU並行,允許一個平台同時運行多個操作系統,並且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
在實際的生產環境中,虛擬化技術主要用來解決高性能的物理硬體產能過剩和老的舊的硬體產能過低的重組重用,透明化底層物理硬體,從而最大化的利用物理硬體。
C. docker的優秀性能有哪些
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發布到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面
由於其基於LXC的輕量級虛擬化的特點,docker相比KVM之類最明顯的特點就是啟動快,資源佔用小。因此對於構建隔離的標准化的運行環境,輕量級的PaaS(如dokku), 構建自動化測試和持續集成環境,以及一切可以橫向擴展的應用(尤其是需要快速啟停來應對峰谷的web應用)。
構建標准化的運行環境,現有的方案大多是在一個baseOS上運行一套puppet/chef,或者一個image文件,其缺點是前者需要base OS許多前提條件,後者幾乎不可以修改(因為 on write 的文件格式在運行時rootfs是read only的)。並且後者文件體積大,環境管理和版本控制本身也是一個問題。
PaaS環境是不言而喻的,其設計之初和dotcloud的案例都是將其作為PaaS產品的環境基礎
因為其標准化構建方法(buildfile)和良好的REST API,自動化測試和持續集成/部署能夠很好的集成進來
因為LXC輕量級的特點,其啟動快,而且docker能夠只載入每個container變化的部分,這樣資源佔用小,能夠在單機環境下與KVM之類的虛擬化方案相比能夠更加快速和佔用更少資源
局限
D. 國內paas產品都什麼可以推薦的
華勝天成-天成雲paas平台就不錯
在雲計算大環境的影響下,華勝天成已經專在北京成立了PaaS平台研發屬中心,現在在為中國移動研發專業的paas平台。不僅可以在內萬眾搭建頁面出題伺服器,還結合現有的手機接入平台的技術優勢,結合雲計算相關技術,建設一套依託現有手機接入平台的核心技術,其特點是:
1、通過業務運維管理平台(BOP),快速定製企業用戶的端到端業務流程,更加貼近各個企業用戶自身的業務特色;
2、將原先獨立維護、各自為政的應用作為應用構件,整合為一個完整的企業信息架構,並在真實的業務流程中加以調用,大大簡化維護負擔、提升企業用戶的使用體驗;
3、利用BOP業務運營平台的SOA架構,根據各個企業用戶自身的要求,靈活取用豐富的基礎信息系統(如CRM、ERP、財務管理,OA等專項業務系統)中的功能,為企業構建符合其自身需求的IT架構。
E. 為什麼Docker沒有在生產環境取得廣泛成功
Docker已經可以復用於生產環境,PaaS建設制、定義數據中心、容器即服務、持續集成和發布這些都是使用場景。Docker技術需要和IaaS管理、開發工具、網路和存儲進行集成,國內傳統對它的認知在不斷加深,越來越多的開始內部自研嘗試容器技術。
F. docker和virtualenv有什麼區別
本質是一樣的,virtualenv虛擬python運行環境,保證系統python環境的整潔,docker也是一樣,只是它虛擬的是回系統運行環境。docker的用答途更廣,因為它虛擬的是操作系統。你可以在docker虛擬的操作系統裡面使用virtualenv,但通常沒這個必要。
docker通常和KVM, Xen等虛擬化技術比較。
望採納
G. 容器雲構建環境如何解決持續集成,安全
市面上已有很多開源持續集成工具,例如我們熟悉的Jenkins,還有TeamCity、Travis CI、GO CD、Bamboo、Gitlab CI、CircleCI……等等內等等。
開源PaaS Rainbond也支持持容續集成,提供可擴展的CI/CD,支持Java、PHP、Python、Ruby、Node.js、Golang、Scala等源代碼構建,支持代碼滾動上線、一鍵回滾、灰度發布、AB測試,可對接Jenkins等第三方CI/CD。
H. paas是什麼
PaaS[1],全稱:(Platform as a service) ,中文:平台即服務。
實例:CloudCC
PaaS的優勢(1張)
所謂PaaS實際上是指將軟體研發的平台(計世資訊定義為業務基礎平台)作為一種服務,以SaaS的模式提交給用戶。因此,PaaS也是SaaS模式的一種應用。但是,PaaS的出現可以加快SaaS的發展,尤其是加快SaaS應用的開發速度。在2007年國內外SaaS廠商先後推出自己的PAAS平台。
PaaS之所以能夠推進SaaS的發展,主要在於它能夠提供企業進行定製化研發的中間件平台,同時涵蓋資料庫和應用伺服器等。PaaS可以提高在Web平台上利用的資源數量。例如,可通過遠程Web服務使用數據即服務(Data-as-a-Service:數據即服務),還可以使用可視化的API,甚至像800app的PaaS平台還允許你混合並匹配適合你應用的其他平台。用戶或者廠商基於PaaS平台可以快速開發自己所需要的應用和產品。同時,PaaS平台開發的應用能更好地搭建基於SOA架構的企業應用。
此外,PaaS對於SaaS運營商來說,可以幫助他進行產品多元化和產品定製化。例如Salesforce的PaaS平台讓更多的ISV成為其平台的客戶,從而開發出基於他們平台的多種SaaS應用,使其成為多元化軟體服務供貨商(Multi Application Vendor),而不再只是一家CRM隨選服務提供商。而國內的SaaS廠商800app通過PaaS平台,改變了僅是CRM供應商的市場定位,實現了 BTO(Built to order:按訂單生產),和在線交付流程。使用800app的PAAS開發平台,用戶不再需要任何編程即可開發包括CRM、OA、HR、SCM、進銷存管理等任何企業管理軟體,而且不需要使用其他軟體開發工具並立即在線運行。
面向個人的EC站點(electronic commerce site)的巨頭公司Amazon,把最初為了自己公司的運營用的構築起來的系統平台,進行出租,用戶可以自由選擇操作系統和中間軟體,以這樣的方式提供硬體以及軟體平台作為服務,最初被海外以一些冒險事業的企業所使用。從2006年開始 [Amazon EC] [Amazon S3]開始作為服務推向市場。
還有現代軟體業霸主同時又是次時代計算的先驅的Google,大家都知道在世界上構築以及運行了非常多的數據中心。以搜索引擎以及新的廣告模式而聞名。他們使用便宜的計算機和強有力的中間件,以及自己的技術裝備出了世界上最強大的數據中心,以及超高性能的並行計算群。 2008年4月發表的PaaS服務[Google App Engine]和Amazon 的 EC2,S3,SimpleDB等服務擁有相似的功能。這些穩定的平台上同樣搜索引擎,GMail等服務也在運行。同樣以ASP~SaaS成功的Salesforce,2007年開始用於提供SaaS的系統基盤對外公開,用Force這個名稱開始進入PaaS業務。他所提供的PaaS服務里採用Java類似的語言Apex以及Eclipse開發平台,整合的開發環境也作為服務進行提供(Development as a Service)。Google/Amazon/Salesforce這三個軟體巨頭非常的重視PaaS這種新的商業模式,Amazon的PaaS服務為了用戶可以自由的組合服務提供了更多的自由度,Google的話提供了更多的服務使用戶能夠方便的使用,去掉了一些繁瑣的作業。Google/Salesforce的PaaS不僅是基礎硬體的提供開發環境的同樣被提供屬於真正的平台作為一種服務(PaaS)
I. 如何自動化nginx負載 多個docker
Docker介紹Docker號稱是下一代的虛擬機,它在啟動和創建速度、性能、移植性等方面均優於傳統虛擬機。Docker是PaaS提供商dotCloud開源的一個基於LXC的高級容器引擎。它能夠讓開發者打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的Linux機器上,也可以實現虛擬化。目前,通過Boot2Docker已能使Docker運行在Windows和OSX中。Docker容器完全使用沙箱機制,相互之間沒有任何介面。Docker幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架或系統。Docker在其網站上明確地提到的Docker的典型應用場景如下:對應用進行自動打包和部署創建輕量、私有的PAAS環境自動化測試和持續整合與部署部署和擴展Web應用、資料庫和後端服務在自動化測試領域,Docker大有取代傳統虛擬機技術的趨勢,原因如下:自動化測試依賴的是測試所需要的應用,而並非整個操作系統。因此,傳統的虛擬機技術存在資源浪費。Docker構建於LXC之上。藉助LXC輕量級的特性,相比於目前的虛擬機技術,Docker啟動更快、資源佔用更小。Docker比虛擬機輕量、靈活,便於管理。Docker標准化的構建方法(Dockerfile)和良好的RESTAPI,使得自動測試和持續集成/部署能夠很好的集成進來。回頁首Sahi介紹Sahi是一個開源的WebUI自動化測試框架。盡管它的知名度不及Selenium,用戶群也不及Selenium龐大,但它確有它獨特的魅力,例如:基於上下文的頁面元素識別機制。隱式頁面載入響應等待機制。良好的瀏覽器支持。優秀的跨瀏覽器錄制回放調試工具SahiController。這些特性都大大地加快了自動化測試腳本的開發速度,並降低了維護成本。Sahi通過一個用Java編寫的代理伺服器,將用戶的腳本轉換為JavaScript後注入往返的HTTP請求及響應中,從而驅動瀏覽器事件。編程語言方面,除Sahi腳本(其本質是一個JavaScript庫)以外,還支持Java和Ruby。Sahi有開源和收費兩個版本。雖然收費版本提供了很多開源版本不具備的高級特性,不過開源版本已經能夠滿足大部分的功能要求。點此查看開源版本與收費版本的差異。點此查看Sahi與其他Web自動化測試框架的對比。回頁首Jenkins介紹Jenkins是一種開源的基於Java開發的持續集成工具,前身稱作Hudson。Jenkins提供了用於監控持續重復工作的軟體平台。它支持豐富的插件,用戶可以按照需求進行選擇安裝和配置,以實現生成執行狀態表格,自動部署、更新自動化測試包等高級功能。本文將要介紹Jenkins的Docker插件,它能夠動態地創建Docker容器作為JenkinsSlave節點,並在執行任務後,自動關閉容器。另外,它還支持一些額外功能,比如當構建任務成功完成後自動將容器保存為鏡像、自動將鏡像上傳到資源庫等。回頁首實例演示該實例演示如何製作一個運行Sahi的鏡像以及如何在Jenkins上配置Docker插件以運行Sahi測試腳本。准備Docker鏡像本實例需要准備三個鏡像:一個運行Jenkins,一個運行Subversion,另外一個運行Sahi。首先,製作運行Sahi的鏡像。DockerHub是一個用於分享Docker鏡像的資源庫。目前,該資源庫還沒有運行Sahi的鏡像,所以必須自己創建Dockerfile來構建鏡像。下圖是用來製作Sahi鏡像的目錄。圖1.製作Sahi鏡像的目錄下圖是Dockerfile的文件內容。圖2.Dockerfile文件內容整個過程大體分為八個步驟:指定基礎鏡像我們使用的是evarga/jenkins-slave。該鏡像基於Ubuntu,安裝了SSH服務,並創建了用戶Jenkins。替換系統默認更新源。把系統更新源替換為163的,後面的軟體安裝速度會比較快一些。安裝必要的軟體(不包括OracleJava和Sahi):Firefox,Unzip以及Xvfb。刪除OpenJDK是為了後面安裝OracleJava做准備。Firefox不用多說,因為該鏡像用於WebUI自動化測試,所以安裝了最新版本的Firefox。安裝Unzip是因為後面安裝Sahi需要用到它。Xvfb(Xvirtualframebuffer)是一個X11顯示伺服器的實現。它不是將圖形在屏幕上顯示出來,而是在內存中運行所有的圖形操作。對客戶端來說,除了無法看到真正的圖形顯示,沒有其他分別。一般稱這種運行方式為headless。安裝OracleJava8。理論上Sahi應當也支持OpenJDK,所以安裝OracleJava不是必須的。安裝Sahi。上傳了zip文件後,用Unzip解壓,Sahi是基於Java的,所以解壓後即已安裝好Sahi。之後,替換了幾個文件,它們的作用如下:Userdata.propertiesuserdata.properties中有個屬性叫proxy_alert.disabled,默認值為false。用戶第一次啟動SahiDashboard的時候,會彈出一個如下圖所示的對話框。用戶勾選了「Donoshowthismessageagain」並點擊Continue按鈕之後,Sahi修改該屬性值為true。之後就不會在跳出這個對話框了。由於用headless的方式運行Sahi無法點擊該對話框,所以必須事先用一個已將該屬性設置為true的文件替換Sahi默認的userdata.properties。圖3.Sahi代理問題對話框sahi_example_com這是一個證書文件。用戶第一次在SahiDashboard中打開Firefox時的頁面如下圖所示。用戶需要點擊SSLManager鏈接手動接受SSL證書。此時,文件sahi_example_com被生成到userdata/certs目錄下。之後,就不需要再進行該操作了。所以,復制的sahi_example_com目的也是為了自動完成這步需要在圖形界面下才能完成的操作。圖4.Sahi啟動頁圖5.SSLManager的非信任連接頁面browser_types.xml替換該文件是為了使Sahi以headless的方式工作。在該文件中,事先添加了一個名字為firefox-xvfb的瀏覽器配置信息。之後,測試腳本就可以指向該瀏覽器運行。具體配置Sahi和Xvfb的步驟參考。添加init.sh文件init.sh文件用於啟動Xvfb和Sahi。其內容如下。圖6.init.sh文件內容「sleep5」是因為Sahi啟動需要一點時間,若立即運行測試腳本會導致失敗。修改許可權最終運行的容器是作為JenkinsSlave節點用Jenkins用戶運行,因此將整個/usr/local目錄及子目錄的所有人修改為Jenkins,並給Shell文件添加執行許可權。Jenkins用戶是在基礎鏡像evarga/jenkins-slave中創建的,所以在這個Dockerfile里沒有創建Jenkins用戶的語句。指定默認執行的命令CMD["/usr/sbin/sshd","-D"]–該語句令鏡像默認啟動SSH服務。事實上,這條語句也可以不添加,因為evarga/jenkins-slave的Dockerfile中已包含該語句。一切就緒之後,在該目錄中執行「dockerbuild-tshenrui/sahi–rm=true」。命令成功執行後,通過「dockerimages」應當可以查看到名為「shenrui/sahi」的鏡像。該鏡像已經上傳到DockerHub,有需要的讀者可以自行拉取。Sahi鏡像構建好之後,接下來准備Jenkins容器。DockerHub上已有官方的Jenkins鏡像,直接用命令「dockerpulljenkins」拉取。在Docker主機上,創建一個目錄(例如,/data/jenkins_home),並修改許可權(chmod777)以便Jenkins容器能讀寫該目錄,然後用命令「dockerrun-d-t--namemyjenkins-p8080:8080-v/data/jenkins_home:/var/jenkins_homejenkins」啟動。此時,打開mitmysvn」把上面所做的修改保存下來創建一個新鏡像mysvn。最後,用命令「dockerrun-t-d-p3690:3690--namemysvnmysvnsvnserve-d--foreground-r/var/svn/repos」啟動mysvn容器。啟動時,添加容器到主機的埠映射「-p3690:3690」以便之後直接通過主機IP提交測試腳本。至此,Docker上有兩個正在運行的容器(dockerps),名字分別是myjenkins和mysvn。
J. 如何使用docker+jenkins實現自動化集成
Docker 介紹
Docker
號稱是下一代的虛擬機,它在啟動和創建速度、性能、移植性等方面均優於傳統虛擬機。Docker 是 PaaS 提供商 dotCloud
開源的一個基於 LXC 的高級容器引擎。它能夠讓開發者打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux
機器上,也可以實現虛擬化。目前,通過 Boot2Docker 已能使 Docker 運行在 Windows 和 OS X 中。Docker
容器完全使用沙箱機制,相互之間沒有任何介面。Docker 幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,
他們不依賴於任何語言、框架或系統。
Docker 在其網站上明確地提到的 Docker 的典型應用場景如下:
對應用進行自動打包和部署
創建輕量、私有的 PAAS 環境
自動化測試和持續整合與部署
部署和擴展 Web 應用、資料庫和後端服務
在自動化測試領域,Docker 大有取代傳統虛擬機技術的趨勢,原因如下:
自動化測試依賴的是測試所需要的應用,而並非整個操作系統。因此,傳統的虛擬機技術存在資源浪費。
Docker 構建於 LXC 之上。藉助 LXC 輕量級的特性,相比於目前的虛擬機技術,Docker 啟動更快、資源佔用更小。
Docker 比虛擬機輕量、靈活,便於管理。
Docker 標准化的構建方法 (Dockerfile) 和良好的 REST API,使得自動測試和持續集成/部署能夠很好的集成進來。
回頁首
Sahi 介紹
Sahi 是一個開源的 Web UI 自動化測試框架。盡管它的知名度不及 Selenium,用戶群也不及 Selenium 龐大,但它確有它獨特的魅力,例如:
基於上下文的頁面元素識別機制。
隱式頁面載入響應等待機制。
良好的瀏覽器支持。
優秀的跨瀏覽器錄制回放調試工具 Sahi Controller。
這些特性都大大地加快了自動化測試腳本的開發速度,並降低了維護成本。
Sahi
通過一個用 Java 編寫的代理伺服器,將用戶的腳本轉換為 JavaScript 後注入往返的 HTTP
請求及響應中,從而驅動瀏覽器事件。編程語言方面,除 Sahi 腳本(其本質是一個 JavaScript 庫)以外,還支持 Java 和
Ruby。Sahi 有開源和收費兩個版本。雖然收費版本提供了很多開源版本不具備的高級特性,不過開源版本已經能夠滿足大部分的功能要求。點此查看開源版本與收費版本的差異。點此查看Sahi 與其他 Web 自動化測試框架的對比。
回頁首
Jenkins 介紹
Jenkins
是一種開源的基於 Java 開發的持續集成工具,前身稱作 Hudson。Jenkins
提供了用於監控持續重復工作的軟體平台。它支持豐富的插件,用戶可以按照需求進行選擇安裝和配置,以實現生成執行狀態表格,自動部署、更新自動化測試包等
高級功能。本文將要介紹 Jenkins 的 Docker 插件,它能夠動態地創建 Docker 容器作為 Jenkins Slave
節點,並在執行任務後,自動關閉容器。另外,它還支持一些額外功能,比如當構建任務成功完成後自動將容器保存為鏡像、自動將鏡像上傳到資源庫等。
回頁首
實例演示
該實例演示如何製作一個運行 Sahi 的鏡像以及如何在 Jenkins 上配置 Docker 插件以運行 Sahi 測試腳本。
准備 Docker 鏡像
本實例需要准備三個鏡像:一個運行 Jenkins,一個運行 Subversion,另外一個運行 Sahi。
首先,製作運行 Sahi 的鏡像。Docker Hub 是一個用於分享 Docker 鏡像的資源庫。目前,該資源庫還沒有運行 Sahi 的鏡像,所以必須自己創建 Dockerfile 來構建鏡像。下圖是用來製作 Sahi 鏡像的目錄。
圖 1. 製作 Sahi 鏡像的目錄
下圖是 Dockerfile 的文件內容。
圖 2. Dockerfile文件內容
整個過程大體分為八個步驟:
指定基礎鏡像
我們使用的是 evarga/jenkins-slave。該鏡像基於 Ubuntu,安裝了 SSH 服務,並創建了用戶 Jenkins。
替換系統默認更新源。把系統更新源替換為 163 的,後面的軟體安裝速度會比較快一些。
安裝必要的軟體(不包括 Oracle Java 和
Sahi):Firefox, Unzip 以及 Xvfb。刪除 Open JDK 是為了後面安裝 Oracle Java 做准備。Firefox
不用多說,因為該鏡像用於 Web UI 自動化測試,所以安裝了最新版本的 Firefox。安裝 Unzip 是因為後面安裝 Sahi
需要用到它。Xvfb(X virtual framebuffer)是一個 X11
顯示伺服器的實現。它不是將圖形在屏幕上顯示出來,而是在內存中運行所有的圖形操作。對客戶端來說,除了無法看到真正的圖形顯示,沒有其他分別。一般稱這
種運行方式為 headless。
安裝 Oracle Java 8。理論上 Sahi 應當也支持 Open JDK,所以安裝 Oracle Java 不是必須的。
安裝 Sahi。上傳了 zip 文件後,用 Unzip 解壓,Sahi 是基於 Java 的,所以解壓後即已安裝好 Sahi。之後,替換了幾個文件,它們的作用如下:
Userdata.properties
userdata.properties 中有個屬性叫
proxy_alert.disabled,默認值為 false。用戶第一次啟動 Sahi Dashboard
的時候,會彈出一個如下圖所示的對話框。用戶勾選了「Do no show this message again」並點擊 Continue
按鈕之後,Sahi 修改該屬性值為 true。之後就不會在跳出這個對話框了。由於用 headless 的方式運行 Sahi
無法點擊該對話框,所以必須事先用一個已將該屬性設置為 true 的文件替換 Sahi 默認的 userdata.properties。
圖 3. Sahi 代理問題對話框
sahi_example_com
這是一個證書文件。用戶第一次在 Sahi Dashboard
中打開 Firefox 時的頁面如下圖所示。用戶需要點擊 SSL Manager 鏈接手動接受 SSL 證書。此時,文件
sahi_example_com 被生成到 userdata/certs 目錄下。之後,就不需要再進行該操作了。所以,復制的
sahi_example_com 目的也是為了自動完成這步需要在圖形界面下才能完成的操作。
圖 4. Sahi 啟動頁
圖 5. SSLManager 的非信任連接頁面
browser_types.xml
替換該文件是為了使 Sahi 以 headless
的方式工作。在該文件中,事先添加了一個名字為 firefox-xvfb 的瀏覽器配置信息。之後,測試腳本就可以指向該瀏覽器運行。具體配置 Sahi 和 Xvfb 的步驟參考。
添加 init.sh 文件
init.sh 文件用於啟動 Xvfb 和 Sahi。其內容如下。
圖 6. init.sh 文件內容
「sleep 5」是因為 Sahi 啟動需要一點時間,若立即運行測試腳本會導致失敗。
修改許可權
最終運行的容器是作為 Jenkins Slave 節點用
Jenkins 用戶運行,因此將整個/usr/local 目錄及子目錄的所有人修改為 Jenkins,並給 Shell
文件添加執行許可權。Jenkins 用戶是在基礎鏡像 evarga/jenkins-slave 中創建的,所以在這個 Dockerfile
里沒有創建 Jenkins 用戶的語句。
指定默認執行的命令
CMD ["/usr/sbin/sshd","-D"] – 該語句令鏡像默認啟動 SSH 服務。事實上,這條語句也可以不添加,因為 evarga/jenkins-slave 的 Dockerfile 中已包含該語句。
一
切就緒之後,在該目錄中執行「docker build -t shenrui/sahi –rm=true」。命令成功執行後,通過「docker
images」應當可以查看到名為「shenrui/sahi」的鏡像。該鏡像已經上傳到 Docker Hub,有需要的讀者可以自行拉取。
Sahi
鏡像構建好之後,接下來准備 Jenkins 容器。Docker Hub 上已有官方的 Jenkins 鏡像,直接用命令「docker pull
jenkins」拉取。在 Docker 主機上,創建一個目錄(例如,/data/jenkins_home),並修改許可權(chmod
777)以便 Jenkins 容器能讀寫該目錄,然後用命令「docker run -d -t --name myjenkins -p
8080:8080 -v /data/jenkins_home:/var/jenkins_home jenkins」啟動。此時,打開
http://<Docker Host IP>:8080 應當可以看到 Jenkins 的管理頁面。
同樣地,直接拉取 Docker Hub 的 Subversion
的鏡像(docker pull bsboiko/subversion)。不過,還需要做進一步的配置。步驟如下:
用命令「docker run -i -t bsboiko/subversion /bin/bash」以交互的方式啟動 Subversion 容器。
在容器中創建目錄 /var/svn/repos(mkdir -p
/var/svn/repos),並基於該目錄創建 Subversion 資源庫(svnadmin create
/var/svn/repos)。
在資源庫目錄下的 svnserve.conf
文件中刪除「password-db = passwd」前面的注釋符 #,並在 passwd 文件中添加一行「shenrui =
password」。
用命令「docker commit <container id> mysvn」把上面所做的修改保存下來創建一個新鏡像 mysvn。
最後,用命令「docker run -t -d -p
3690:3690 --name mysvn mysvn svnserve -d --foreground -r
/var/svn/repos」啟動 mysvn 容器。啟動時,添加容器到主機的埠映射「-p 3690:3690」以便之後直接通過主機 IP
提交測試腳本。
至此,Docker 上有兩個正在運行的容器(docker ps),名字分別是 myjenkins 和 mysvn。