Jenkins+Git+Docker的持續集成

轉載至:http://blog.itpub.net/7607759/viewspace-2134637/    侵刪

配置docker宿主機

root@docker01:~# vi /data/dockerfiles/scripts/deploy.sh

#!/bin/bash
############################################
# this script function is :               
# deploy new docker container            
#                                         
# USER        YYYY-MM-DD - ACTION         
# kaka    2020-07-01 - CREATED       
#                                         
############################################ 
parasnum=5
# function
help_msg()
{
cat << help
+----------------------------------------------------+
+ Error Cause:
+ you enter $# parameters
+ the total paramenter number must be $parasnum
+ 1st :DOCKER_NAME
+ 2nd :PROJECT_NAME
+ 3rd :PROJECT_VERSION
+ 4th :SOURCE_PORT
+ 5th :DESTINATION_PORT
+----------------------------------------------------+
help
} 
# ----------------------------------------------------
# Check parameter number
# ----------------------------------------------------
if [ $# -ne ${parasnum} ]
then
        help_msg
        exit
fi 
# ----------------------------------------------------
# Initialize the parameter.
# ----------------------------------------------------
DOCKER_NAME=$1
PROJECT_NAME=$2
PROJ_VERSION=$3
SPORT=$4
DPORT=$5 
PROJ_VERSION=${PROJ_VERSION/"origin/"/""} 
DOCKER_FILE="/data/dockerfiles/${DOCKER_NAME}/Dockerfile"
DOCKER_FILE_DIR=/data/dockerfiles/${DOCKER_NAME}
if [ ! -d ${DOCKER_FILE_DIR} ]; then
        mkdir -p ${DOCKER_FILE_DIR}
fi 
# ----------------------------------------------------
# check docker images
# ----------------------------------------------------
DOCKER_IMAGE=`/usr/bin/docker images | grep ${DOCKER_NAME} | awk -F ' ' '{print $3}'`
if [ -n "${DOCKER_IMAGE}" ]; then
        # check docker container
        for dc in `/usr/bin/docker ps -a | grep ${DOCKER_NAME} | awk -F " " '{print $1}'`
        do
                echo "Stop container: ${dc}"
                /usr/bin/docker stop ${dc}
                # delete while docker container was exists
                echo "##Delete exists Container_Id: "${dc}
                /usr/bin/docker rm ${dc}
        done 
        # delete while docker image was exists
        echo "##Delete exists Image: "${DOCKER_IMAGE}
        /usr/bin/docker rmi ${DOCKER_IMAGE}
fi
echo ""
# ----------------------------------------------------
# Init dockerfile
# ----------------------------------------------------
echo "**Init dockerfile start: "${DOCKER_FILE}
echo "FROM tomcat" > ${DOCKER_FILE}
echo 'MAINTAINER junsansi "[email protected]"' >> ${DOCKER_FILE}
echo "ADD *.war /usr/local/tomcat/webapps/${PROJECT_NAME}.war" >> ${DOCKER_FILE}
echo "EXPOSE 8080" >> ${DOCKER_FILE}
echo "CMD /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out" >> ${DOCKER_FILE}
cat ${DOCKER_FILE}
echo "**Init dockerfile end." 
# ----------------------------------------------------
# Build dockerfile
# ----------------------------------------------------
cd ${DOCKER_FILE_DIR}
rm *.war -rf
mv /data/dockerfiles/war/${DOCKER_NAME}/*.war ./
echo ""
echo "##Build dockerfile for "${DOCKER_NAME}
/usr/bin/docker build -t ${DOCKER_NAME}:${PROJ_VERSION} . 
# ----------------------------------------------------
# Run docker container
# ----------------------------------------------------
echo ""
echo "##Running docker container: "${DOCKER_NAME}
/usr/bin/docker run --name ${DOCKER_NAME}_d1 -d -p ${SPORT}:${DPORT} ${DOCKER_NAME}:${PROJ_VERSION} 
#/usr/bin/docker run ${cmd} 
echo ""

爲該腳本增加運行權限:

root@docker01:~# chmod +x /data/dockerfiles/scripts/deploy.sh


     修改屬主爲docker用戶:

root@docker01:~# chown docker:docker /data/dockerfiles -R

 

    四、配置Jenkins應用環境

    首先進行全局配置:系統管理->Global Tool Configuration。

    這裏請大家根據實際情況配置:

 

    Maven Configuration
JDK
Git
Maven

具體的配置過程,界面已經非常直觀,這裏就不演示了。


    接下來要配置SSH Servers。在本例中,我們要部署和運行docker容器的服務器是172.19.10.157,因此我們需要在系統設置中,配置通過SSH連接該服務器的訪問用戶名和密碼,如下所示:


      系統管理->系統設置->Publish over SSH

 

 

如果有多個服務器可用於發佈,那麼可以一次性都添加進去。 

    五、Jenkins中創建和配置發佈任務

    
在Jenkins主界面右側,點擊“創建一個新任務”,在頁面上輸出項目名稱(名稱完全由操作者自定義),這裏我們選擇構建的是MAVEN項目:

 

在《通用設置》中操作如下:

選中丟棄舊的構建->保持構建的最大個數爲10個;

選中參數化構建->選擇Git Parameter->定義名稱爲release_branch,因爲我們內部應用的發佈管理都是基於分支的,因此選擇參數類型爲Branch:

在《源碼管理》中選擇Git,根據實際情況指定倉庫地址和鑑權證書,Branches那裏修改爲前面定義的$release_branch參數名稱,具體設置如下圖所示:

在《Build》設置中設置Goals and options選項值爲:clean package -DskipTests=true,當然,這裏您也可以根據您的項目實際情況進行設置:

在《構建後操作》中選擇“Send build artifacts over SSH”,通過SSH發送文件到遠端,並執行遠端服務器命令,配置如下:

 
      配置操作完成之後點擊左下角“保存”按鈕。

點擊左側“Build with Parameters”,在隨後出現的頁面中選擇要構建項目的版本,這裏目前僅只有一個版本,不管,先選中它,而後點擊開始構建:


     執行部署,我們可以通過當前正在構建任務的“Console Output”來獲取任務的執行情況,例如,本次構建過程中的輸出日誌摘要如下:


     通過日誌可以看到,容器創建和啓動均已成功,接下來就可以通過瀏覽器訪問該docker中運行的工程了:

竣工!

    六Jenkins中將同一個服務發佈到多個容器

 

如果你有多個工程,需要部署到不同的服務器,那麼參照前面2-6小節中的步驟,對目標服務器和項目進行適當配置即可。

如果你有一個工程,需要以集羣方式部署到多個服務器,那麼參照前面4-5小節中的步驟,新增SSH服務器,而後在“構建後操作”中加入對該服務器的部署步驟即可。

如果你有一個工程,需要以集羣方式部署多個容器,那麼我來演示一下嘛,儘管我們當前沒有多餘的服務器,不過通過docker宿主機演示這樣的過程還是沒什麼問題。

我們仍然進入到“first_docker_project”這個項目的配置頁面,在“構建後操作”設置中,點擊“Add Server”新增一臺服務器,配置如下 :

如果是部署到不同的服務器,那麼此處只需要選擇適當的SSH Server即可,不過當前的演示環境只有一臺服務器,那麼SSH Server還是172.19.10.157,只是要對Remote Directory和Exec command兩項配置中的參數做適當調整,以避免路徑衝突。

修改完成後點擊保存,然後再次嘗試構建,注意觀察日誌,等看到SUCCESS提示之後,同一個項目就被成功發佈到兩個容器中了。

登錄到docker宿主機查看一下容器的狀態:

docker@docker01:~$ docker ps -a

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                     NAMES

ed763842395e        first_docker_proj02:master   "/bin/sh -c '/usr/..."   18 seconds ago      Up 17 seconds       0.0.0.0:12000->8080/tcp   first_docker_proj02_d1

6a907dfae707        first_docker_proj01:master   "/bin/sh -c '/usr/..."   19 seconds ago      Up 18 seconds       0.0.0.0:11000->8080/tcp   first_docker_proj01_d1

docker@docker01:~$ docker images

REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE

first_docker_proj01   master              4adbac00f9ed        21 seconds ago      355 MB

first_docker_proj02   master              4adbac00f9ed        21 seconds ago      355 MB

tomcat                latest              99765a0d7f44        2 days ago          355 MB

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