Docker結合Jenkins的持續構建實踐

docker和Jenkins不是什麼新東西了,二者結合也不是什麼稀奇的事情,也已經有不少Jenkins和docker相結合的文章,此文僅爲本身的一點心得實踐,若有不對的地方,歡迎你們糾正。php

先貼上大體的流程圖,逐步說明:git

代碼-Git:
並無什麼好說明的,就是簡單的使用了Git做爲版本控制工具而已,通用使用規範不在細說。
此步的產出:
Git分支特定版本號
Git-自動構建、自動構建-代碼包:
作法也很通用了,將project的Git鉤子同Jenkins結合,達到特定分支有push時機觸發自動構建,將代碼包從Git拉取並打包爲代碼包。
github

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

代碼包-Docker鏡像

在此步中,咱們爲每一個project提供特定的測試環境,而且在此環境中執行項目代碼鏡像打包操做。在此步中,須要提早準備幾樣東西:segmentfault

測試環境:咱們這裏爲一臺乾淨的服務器(不要再問好奢侈,有錢就是任性),部署docker環境; project的base鏡像:對於一個成熟的項目,所依賴的環境是固定可知的,所以提早準備好其所依賴的base image是必要的。
如,咱們一個項目的base image的Dockerfile:
***************************************************************************
FROM centos:liuyanglong
MAINTAINER liuyanglong "liuyanglong@xxxx.com"
MAINTAINER version "online"
centos

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"]>
php-fpm

注意:此步僅僅在測試服務器作了docker build操做,並無執行docker pull!!
工具

鏡像打包完畢後,此步並無結束!!
測試

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

此步的產出:

docker build成功的project image,如以構建號爲image版本號,叫作:
project_dev:530
此版本代碼的測試環境地址,如: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

相關文章
相關標籤/搜索