開發将源碼上傳到github倉庫,通過jenkins持續內建引擎結合git工具,将源碼拉取到jenkins伺服器,通過工具maven在本地講源碼編譯打包成war包,在ssh到Docker主控端,通過執行腳本生成制作自定義的Dockerfile,最終執行生成images,并啟動container,即啟動了包含war包的tomcat,即可實作對外提供web服務。
主機名
IP位址
作用
Docker-server
172.20.6.20
Docker主控端
Jenkins-server
172.20.6.22
Jenkins伺服器
建立ssh釋出使用者及目錄
上傳腳本
将腳本上傳到 /data/dockerfiles/scripts,命名為devops,此名稱可自定義,但是之後在配置jenkins執行ssh指令時候的腳本名稱需要一緻。由于腳本内部的分發路徑是寫的絕對路徑,是以需要講目錄為固定,也可以根據實際修改。此腳本author:junsansi,可以參考其進行修改。
Docker主控端擷取tomcat鏡像
<code>docker pull docker.io/tomcat</code>
使用<code>docker images</code>檢視tomcat鏡像

此時Docker主控端就已經配置完畢。
登入Jenkins的WEB界面
系統管理---系統設定---Publish over SSH---增加SSH Server
添加SSH Server可以使用密鑰形式添加,也可以直接使用使用者名密碼, 此處使用使用者名密碼,選擇
Use password authentication, or use a different key,即docker使用者的密碼,進行登入釋出,之前已經講<code>/data/dockerfiles</code>目錄的屬主屬組更改為docker,确認Jenkins伺服器使用docker使用者可以正常在此目錄下進行後續操作。
為保證Jenkins伺服器的磁盤有充足的空間,在選中丢棄舊的建構->保持建構的最大個數為10個
在真實開發環境中,成員直接互相協助,GIT是多分支的,考慮到分支管理,需在此選中參數化建構->選擇Git Parameter->定義名稱為release_branch,是以選擇參數類型為Branch:如果自己發現devops腳本可以看到裡面是調用了此參數進行選擇建構的分支。
同時建立考慮到建立Docker的名稱,此時需要給後續建立的docker images以項目的名稱命名。
源碼管理選擇git,填入倉庫url:[email protected]:redhatxl/zrlog.git
此時發現會出現報錯資訊,因為此倉庫為我的私有倉庫,需要配置Credentials,點開add, Add Credentials的 Kind選擇SSH Username with private key,Username選擇之前在github上傳的公鑰使用者的使用者名,此次為root,Private Key為jenkins伺服器登入github的本地私鑰,檢視私鑰<code>cat /root/.ssh/id_rsa</code> 複制粘貼到Key區域,完成添加。此時可以發現報錯已經消失。
在Branches to build子產品需要填寫之前我們參數話的變量,在此引用<code>$release_branch</code>
在build的Goals and options添加maven建構參考及指令:<code>clean install -D maven.test.skip=true</code>
增加建構後步驟---選擇Send build artifacts over SSH
SSH-Server name選擇Docker主控端
Transfers中填寫Source files:target/*.war
Remove prefix:target/
Remote directory:/war/$project_name,即在遠端/data/dockerfiles下的war目錄(/data/dockerfiles/war/docker01-tomcat-zrlog)
Exec command:/data/dockerfiles/scripts/devop.sh $project_name zrlog $release_branch 8888 8080
即jenkins伺服器ssh到docker主控端之後執行的腳本指令,執行/data/dockerfiles/scripts/devop.sh腳本,此腳本需要傳入5個參考,
project_name:項目名稱,即docker生成images的名稱
zrlog:即項目名稱
release_branch:在git上送出的分支,此處我們隻有master分支
兩個端口,前一個端口及主控端的監聽端口,後一個端口及映射到docker容器内部的端口,在此處使用的為tomcat,預設的為8080端口。
注意:再次可以添加多個server,即實作叢集,可以講web伺服器為無狀态,将日志檔案挂載到本地實體磁盤以實作日志監控即資料持久化存儲。
添加增加建構後操作,選擇Editable Email Notification,利用插件郵件來發送通知。
可以根據需求自定義郵件主題與内容,此處添加資訊接受人,由于全局配置了always,在進階設定内,填寫接受人郵箱。
建立完畢後點選應用并儲存。
選擇Build with Parameters,然後在右邊release_branch内選擇需要執行的github上的分支,此處為master,同理選擇 project_name,為docker images的name可以選擇自己添加自定義的名字,點選開始建構
檢視Console Output
檢視郵件通知
登入docker主控端檢視images與container
網頁測試
至此利用jenkins簡單的實作了講github上的源碼拉去到jenkins伺服器本地,利用maven編譯生成war包并分發到docker主控端,執行腳本生成dockerfile,并啟動容器,最終郵件通知。
在配置jenkins的ssh後的指令我們可以添加多個server進而實作分布式,同時我們也可以對在一台主機上通過區分端口号來生成多個images并啟動多個不通端口的container
在General的參數化建構過程中增加第三個參數<code>proxy_port</code>可以設定為docker主控端的本地監聽端口進而實作多端口多執行個體
在ssh指令中調用
在建構開始時可以定義不同的images對應不通的端口
檢視啟動後的容器
注意:如果有特殊需求,例如釋出php代碼或其他可以自行對腳本進行修改,可以根據需求定義多個參數靈活使用。
本文轉自 KaliArch 51CTO部落格,原文連結:http://blog.51cto.com/kaliarch/2051998,如需轉載請自行聯系原作者