本文講的是<b>持續傳遞系列(二):使用Docker、Mesos實作持續傳遞</b>,【編者的話】本文主要介紹Mesos和Marathon的搭建以及如何完成整個持續傳遞過程,以及後續還可以做哪些改進和加強。整個系統搭建完成後,應用代碼的改變會自動觸發Jenkins建構流程,幾秒鐘後,改變就會通過Jenkins、Docker Hub和Marathon傳遞到Mesos中部署上線,是不是很酷?
本文是第二部分,将繼續介紹Mesos和Marathon的搭建以及如何完成整個持續傳遞過程。

現在,我們有了功能性開發和持續內建的環境,可以開始搭建Mesos叢集了。
如下是包含系統所有部分的<code>fig.yml</code>檔案。在之前配置好的Jenkins和Docker Registry基礎之上,我們還有Mesos master、Mesos slave、Mesosphere Marathon和負責内部Mesos通信的Zookeeper。
<code>fig.yml</code>不多做解釋。所有環境參數都是參考Docker Hub上對應鏡像的使用介紹。
Mesos slave容器還使用了挂載socket的技巧,不過不需要做别的,因為slave是用root使用者運作的,有通路socket的權限。
要注意Jenkins容器連接配接到了Marathon。這就要求能夠從Jenkins容器發送請求到Marathon容器裡。我們在下一章介紹部署的時候會詳細說明。
現在重新開機系統,可以看到系統開始運作:
容器啟動非常快,但是要等所有服務都上線大概花了30秒(在MacBook Air上的Ubuntu虛拟機裡)。
Mesos在<code>http://localhost:5050</code>。如下截圖裡可以看到一個活動的slave。該slave在本次配置下沒有暴露任何端口。
從<code>http://localhost:8080</code>可以通路Marathon。
最後一步是将我們用Marathon在Mesos上新建構的Docker鏡像部署好。
首先需要建立配置檔案将應用安排到Marathon上,如下<code>app_marathon.json</code>:
這裡也有一些需要注意的地方。比如,沒有提到健康檢查,需要告訴Marathon應用運作和不運作的時間。
一旦我們釋出了這個JSON檔案,就可以在<code>deploy.sh</code>裡添加最新的腳本,移除最近運作的應用,并且用新的鏡像重新部署它。當然有更好的更新政策,不過不在這裡讨論。
最後一步是将<code>deploy.sh</code>添加到Jenkins的配置中并運作建構。
成功建構之後,可以看到應用運作在Marathon上:
從<code>http://localhost:31000</code>可以通路我們自己的應用:
現在可以試着改變應用并且觸發Jenkins去建構build。幾秒鐘後,這個改變就會通過Jenkins、Docker Hub和Marathon傳遞到Mesos裡!
要想改進這個系統有兩個大方向:添加更多的功能以及提升搭建品質(deepening the quality of the setup)。可能的擴充有很多,我們隻列了幾個例子:
将HelloWorld示例擴充為一個标準Web應用
多語言支援
多層次的自動化測試(單元測試、系統測試、性能測試等等。)
用Git hook自動觸發Jenkins build
部署到公有雲裡,比如GCE、AWS等
在多主機上運作
HAProxy搭建
用Jmeter實作負載模拟下的自動擴充
部署一個基于微服務的系統
使用Flocker做持久化存儲
使用Weave作為網絡容器
使用Consul實作自動服務發現
添加系統監控
添加集中式日志
我的下一步想使系統可以面向外部使用者,添加HAProxy和自動擴充的能力,如下圖所示:
一開始搭建這個系統主要是想幫助開發和運維人員學習如何在持續傳遞領域使用Docker和Mesos。在幾個月的過程中我發現完整的系統很複雜,很難解釋,更難搭建和使用。
===========================
譯者介紹
崔婧雯,現就職于VMware,進階軟體工程師,負責桌面虛拟化産品的品質保證工作。曾在IBM WebSphere業務流程管理軟體擔任多年系統測試工作。對虛拟化,中間件技術有濃厚的興趣。
原文釋出時間為:2015-03-11
本文作者:崔婧雯
本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。
原文标題:持續傳遞系列(二):使用Docker、Mesos實作持續傳遞