Docker結合Jenkins的持續構建實踐

jopen 9年前發布 | 12K 次閱讀 Docker

docker和Jenkins不是什么新東西了,兩者結合也不是什么稀奇的事情,也已經有很多Jenkins和docker相結合的文章,此文僅為自己的一點心得實踐,如有不對的地方,歡迎大家糾正。

先貼上大致的流程圖,逐步說明:
圖片描述

代碼-Git:

并沒有什么好說明的,就是簡單的使用了Git作為版本控制工具而已,通用使用規范不在細說。
此步的產出:
Git分支特定版本號

Git-自動構建、自動構建-代碼包:

做法也很通用了,將project的Git鉤子同Jenkins結合,達到特定分支有push時機觸發自動構建,將代碼包從Git拉取并打包為代碼包。
圖片描述

此步產出:
打包好的代碼包:project.tar.gz

代碼包-Docker鏡像

在此步中,我們為每個project提供特定的測試環境,并且在此環境中執行項目代碼鏡像打包操作。在此步中,需要提前準備幾樣東西:

  1. 測試環境:我們這里為一臺干凈的服務器(不要再問好奢侈,有錢就是任性),部署docker環境;

  2. project的base鏡像:對于一個成熟的項目,所依賴的環境是固定可知的,因此提前準備好其所依賴的base image是必要的。
    如,我們一個項目的base image的Dockerfile:

FROM centos:liuyanglong
MAINTAINER liuyanglong "liuyanglong@xxxx.com"
MAINTAINER version "online"

USER root
ADD php.ini /home/work/local/php/etc/
ADD php-fpm.conf /home/work/local/php/etc/

ONBUILD ADD project-code.tar.gz  /home/work/
ONBUILD ENTRYPOINT ["supervisord", "-c", "/etc/supervisord.conf", "-n"]

注意最下面的兩行ONBUILD
而在每一次Jenkins的構建時,要做的僅僅是將代碼包傳入,并且執行docker build即可,此時build所使用的Dockerfile的內容只有一行:

From this_project_image:base

而執行build時只會根據base image中的兩行ONBUILD執行兩個命令:

ADD project-code.tar.gz /home/work/ ENTRYPOINT ["supervisord", "-c", "/etc/supervisord.conf", "-n"]

注意:此步僅僅在測試服務器做了docker build操作,并沒有執行docker pull!!

鏡像打包完畢后,此步并沒有結束!!

調用腳本,根據此構件號的版本docker image創建對應的容器,腳本的輸出為其對應的訪問方式,供QA同學測試使用。
這樣,每個構建好的版本都有對應的測試環境,且互不沖突!
鄙人的腳本地址為:https://github.com/Liuyanglong/docker-tools/blob/master/create_docker

此步的產出:

  1. docker build成功的project image,如以構建號為image版本號,叫做: project_dev:530

  2. 此版本代碼的測試環境地址,如:172.30.40.2

生成線上鏡像

到上一步為止,測試構建環境已經結束,當QA同學確定要上線時,執行Jenkins的Promotion操作,這時觸發 此步,將對應build版本對應的docker鏡像推送到 私有docker registry
所執行的操作自然為 :

docker tag project_dev:530 docker-registry.xxxxx.com/xxxxxxx/project_name:version
docker push docker-registry.xxxxx.com/xxxxxxx/project_name:version

此步產出:
push好的線上鏡像

AB上線

此為最后一步,同樣是執行promotion操作后最后所執行的步驟,調用我們的內部接口,對線上應用執行AB上線,具體可參見文章:http://segmentfault.com/a/1190000002978115#articleHeader6

總結

上述就是我們在生產環境中的使用Jenkins和docker所構建的持續集成&自動部署的邏輯架構。也歡迎各位大大拍磚指教。

來自:http://segmentfault.com/a/1190000003732967

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!