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

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