持續集成-Docker 與 DaoCloud 的實踐(一)

一. 前言

二. DaoCloud 持續集成 的 實現

三. 總結


一. 前言

什麼是持續集成:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html

持續集成目前作者接觸到的有兩套方案。

  • 一套是工作中正在使用 Docker + Jenkins 。Jenkins 也是持續集成的主流(Ps:看到一個報道在美帝 抽樣100個公司 持續集成的方案都是使用了 Jenkins。100% 使用率。)
  • 另外一套 則是 使用 DaoCloud。 以下介紹的就是這個。
比較:
  1. 從複雜程度上看,第一套方案配置會比第二套配置複雜,因爲需要額外配置 Jenkins ;
  2. 從可控性上看,第一套方案要比第二套好很多,因爲作者在使用 DaoCloud 實踐中,遇到了一些困難,需要諮詢 DaoCloud 的客服,自己無法解決,這些等待的時間 對於 真正的項目中來說可能是無法接受的,如果採用 第一套,就像在工作中的時候,出了問題,自己可以馬上加班加點排查解決。
  3. 從使用方便性上看:二者都可以實現 github 上項目的更新,自動部署最新的應用。
        總的來說,項目的開始 DaoCloud 整體會優於 Jenkins,因爲方便,能夠減少項目的複雜性。 但是在項目的後期,如果需要強調一個自主和可控或者優化,那麼個人會偏向於Jenkins。


二. DaoCloud 持續集成 的 實現
        需要先掌握一定的 Docker 知識:http://dockerpool.com/static/books/docker_practice/index.html 。

        測試一套持續集成的Demo需要到的相關東西:1. github 的一個項目。 2. DaoCloud。 3. 自己的測試主機。 希望達到的目的:github 上項目發生更新,DaoCloud 會構建新的 image,並且部署好最新的應用到主機上。


2.1 github 項目

        項目位於:https://github.com/pzxwhc/BlogManage,這是一個博客的後臺管理系統,目前 爲止 到寫這篇文章爲止 只有一個 登錄功能,但是可以用來測試 這個持續集成了。

        Ps:這個項目後臺使用的 是 spring boot,ORM 層使用的是 Hibernate 的 JPA。DB用的是 Mysql。暫時沒有前端,主要是後期想做一個微服務的架構,Kong(nginx)作爲一個 api gateway;nodejs +一個Js框架作爲前端(還未選擇哪個框架)。但是 nodejs 和 js 還不太會,所以說就暫時不弄前端了,也不太想玩 JSP 了。扯遠了.......


2.2 DaoCloud 配置

DaoCloud 官網:https://www.daocloud.io/。註冊,登錄,界面如下圖1:


圖1

        有 4 個東西是作者在測試的時候比較關心的 ,第一行的 1(代碼構建),2(鏡像倉庫),4 (我的集羣),5(應用管理)。代碼構建 用來 DaoCloud 關聯你的 項目 ,鏡像倉庫 用來管理鏡像,我的集羣即管理自己的主機,應用管理即可以管理應用,並且開啓自動發佈(自動部署最新應用)的功能。


代碼構建:

        填寫名稱,設置代碼源,這裏有一個 構建位置,意思就是 DaoCloud 會根據你的 Dockerfile 重新構建一個鏡像,相對於你的項目,Dockerfile 在哪裏這裏就填寫哪裏。

        第一個坑:在 我的項目 中,可以看到,Dockerfile 是和 blogManage 項目平級的。當時實踐的時候,作者是把 Dockerfile 放入到 blogManage 項目中,但是出現了問題,因爲在Dockerfile 中,我們需要 ADD project /dir/in/container/ ,然後再 mvn spring-boot:run 啓動該項目,此時,如果 Dockerfile 在 項目裏面,這裏則無法 在Dockerfile 中 ADD 整個項目到 容器中了(Dockerfile 中的 ADD 只能 ADD當前目錄下的東西),所以這裏放平級了。最後,作者實踐中 構建位置 就什麼也不填。最後,點擊立即構建 即可。如下圖2:


圖2

當然,github 項目上得先有 這個Dockerfile 。

在上圖中,點擊設置,可以設置 當代碼提交到 master 分支的時候,進行持續集成,如下圖3:


圖3


我的集羣

即 添加自己的主機到 DaoCloud 中,這樣 DaoCloud 才能在下一步 的部署中 把鏡像部署到主機中。


鏡像倉庫:

點擊版本,即可看見 鏡像了,可以拉取,部署。例如點擊部署:

        首先需要 填寫應用名稱,選擇運行環境(即選自己的主機即可)-》 基礎設置中 再添加端口。-》高級設置中 填寫自定義的啓動命令。例如本項目的啓動命令:

/bin/sh -c 'cd /opt/;mvn spring-boot:run'

        注意:本人之前在主機中預先安裝了一個 Mysql數據庫,開放了容器的 3306 端口,目的是給項目使用。在配置的過程中始終沒有使用 --link ,因爲DaoCloud 會幫我們全部連接配置好,(可以在容器中的 vi /etc/hosts 查看)。數據庫的配置:https://hub.docker.com/_/mysql/ 。

Ps(爲了這幾十個字符搞了個通宵,語法不熟悉傷不起...)

最後,點擊 立即部署,即可部署成功,項目也已經啓動,網頁訪問即可訪問得到。


2.3 如何持續集成

開啓自動發佈功能:

在上述步驟 後,會去到容器的詳情頁面,點擊應用詳情,再在 發佈中 開啓自動發佈即可,如下圖4:


圖4

當然,也有另外的入口,在 上圖1 的應用管理,點擊應用,然後會發現一個發佈,則可以開啓它。

這樣,當提交代碼 到 master 分支的時候,DaoCloud 會馬上幫忙構建 鏡像,可以在上圖2 中看得見。如下圖4是作者在測試過程中 DaoCloud 幫忙構建的:


圖4

然後,會自動部署最新的應用(因爲剛纔開啓了自動發佈功能)


至此,持續集成完成。


三. 總結

        自此,可以實現 當 github 上有 代碼更新的時候,DaoCloud會自動部署最新的應用,還是比較方便的,贊一個。

        之前對 DaoCloud 有一些吐槽,比如沒有 jdk8,沒有tomcat8,沒有maven,希望可以快速更新,畢竟從Docker Hub 上下載不是很快。但是從目前來看,已經能滿足持續集成的需求。


Ps:

1. 利益相關:一不小心收了 100塊的代金卷。哈哈哈哈。(感覺工作人員還是蠻可愛的。附帶 DaoCloud是一傢什麼樣的公司


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章