这里就跳过jenkins的安装部署过程了,网上很多教程可以自行查看;

docker的使用也不多说了,熟悉一下docker常用命令,和dockerfile就差不多了

测试环境如下:

centos7      虚拟机 1    ip:192.168.0.102

centos7      虚拟机 2    ip:192.168.0.103

 安装了JDK、Tomcat、docker、git、maven

 虚拟机1安装配置了jenkins(我使用的是jenkins.war的形式部署到Tomcat下启动的)

测试项目一个很简单的controller方法:

3556732107b5c6fefeb76858cff4436e.png

操作过程:

  1. jenkins默认是英文的,可以装中文插件;

  2. jenkins中的插件很多;有些环境插件必须安装;

  3. jenkins构建一个新的maven项目文件;

  4. 配置项目的源码仓库git或者SVN/gitlab等其他的;

  5. 配置maven打包命令;

  6. 配置打包完成之后执行的shell命令也可以是shell脚本;

  7. 如果是想部署到多台服务器上则可以配置不同的服务器信息;

2d0e3f532eacbe8f2eb9f49bc1787f85.png

jenkins安装部署好了之后有个web可视化管理页面;

其中主要注意环境配置:
  1. maven的环境配置maven的settings.xml文件指定;

    52b0e92d75b1e222b6e7f03f79123bc8.png

  2. JDK的环境配置:

    a9443e33600c6bec2af3abc14214ccb7.png

  3. git(这里我用的是git,也用SVN或者gitlab等其他的代码仓库): 

创建一个项目任务进去就是配置源码

e3a2bbee35bb405d8853ce40a0abf9b9.png

指定maven打包命令;

以及指定打包完成之后执行的shell命令

948087d929c942464c5adbb0883a0022.png

Docker File脚本:

FROM java:8
MAINTAINER lifuping 1259452237@qq.com

#创建容器操作目录
RUN mkdir -p /opt/jenkins/

#复制宿主机文件到docker容器里
COPY startup.sh  /opt/jenkins/
COPY Test-Jenkins-s-1.0-SNAPSHOT.jar  /opt/jenkins/

# 指定当前操作目录
WORKDIR /opt/jenkins/

#赋予启动脚本执行权限
RUN  chmod a+x  /opt/jenkins/startup.sh

# 运行脚本
CMD /opt/jenkins/startup.sh

startup.sh 启动脚本:

#!/bin/bash
exec java -jar /opt/jenkins/Test-Jenkins-s-1.0-SNAPSHOT.jar

createDocker.sh核心脚本:

#打包成Docker镜像的脚本
#!/bin/bash
#操作项目路径(Dockerfile存放的路径)
BASE_PATH=/root/Test-Jenkins

# jenkins生成源jar路径  
SOURCE_PATH=/root/.jenkins/workspace  

#docker 镜像/容器名字(只能全小写不能包含大写或者特殊字符)
SERVER_NAME=testjenkins

#指定映射端口
port=8093 

#dockerfile的名称
DOCKER_FILENAME=Dockerfile

#jar包的名称
JAR_NAME=Test-Jenkins-s-1.0-SNAPSHOT

#项目名称
PROJECT_NAME=Test-Jenkins

#docker容器内的映射目录(这里映射主机的目录挂载到容器)
CONTAINER_FILE=/opt/jenkins/

#当前时间
DATE=`date +%Y%m%d%H%M`


# 将jenkins最新的构建jar包 移动到项目目录下
function transfer(){
    echo "最新构建代码 $SOURCE_PATH/$PROJECT_NAME/target/$JAR_NAME.jar 迁移至 $BASE_PATH ...."
        cp -f $SOURCE_PATH/$PROJECT_NAME/target/$JAR_NAME.jar $BASE_PATH 
        #复制jar过去可能会没有权限。因此最好赋予足够权限
        chmod -R 777 $BASE_PATH/$JAR_NAME.jar
    echo "迁移完成"
}

# 将历史版本jar包进行备份
function backup(){
    #如果备份目录不存在则创建
    if [ ! -d "$BASE_PATH/backup" ]; then
            mkdir $BASE_PATH/backup
            echo "创建备份目录:$BASE_PATH/backup"
    fi

    if [ -f "$BASE_PATH/$JAR_NAME.jar" ]; then
        echo "$JAR_NAME.jar 备份..."
            cp $BASE_PATH/$JAR_NAME.jar  $BASE_PATH/backup/$JAR_NAME-$DATE.jar
        echo "备份 $BASE_PATH/backup/$JAR_NAME-$DATE.jar 完成"
    else
        echo "$BASE_PATH/$JAR_NAME.jar不存在,跳过备份"
    fi
}

# 构建docker镜像;
# 如果已经存在则重启即可(
# 因为进行宿主机和容器目录映射所以只需要把最新的jar移动到映射目录下重启容器就可以了)
# (不需要每次多删除容器,删除镜像在重新再构建)
function build(){
    #容器id
    CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
    #镜像id
    IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
    #如果镜像已存在则不用重新构建;不存在则构建
    if [ -n "$IID" ]; then
        echo "存在SERVER_NAME镜像,IID=$IID"
    else
        echo "不存在SERVER_NAME镜像,开始构建镜像"
            cd $BASE_PATH
        #开始构建docker镜像 -t 指定镜像名字; 看需要可以加上-f 指定Dockerfile的路径;如果不加默认用当前目录下的Dockerfile
           docker build -f $BASE_PATH/$DOCKER_FILENAME  -t $SERVER_NAME .
    fi

    #如果容器已启动则重启;未启动则启动
    if [ -n "$CID" ]; then
        echo "存在$ERVER_NAME容器,CID=$CID,重启docker容器 ..."
            docker restart $SERVER_NAME 
        echo "$ERVER_NAME容器重启完成"
    else
        echo "不存在$SERVER_NAME容器,docker run创建容器..."
            #启动docker容器 --name指定容器名称 -idt容器后台运行并;-v 将主机的目录挂载到容器上的目录
            #这里映射主机的目录挂载到容器上,之后换包就不用重新构建docker镜像,重启容器就行了
            docker run --name  $SERVER_NAME -v $BASE_PATH:$CONTAINER_FILE -p $port:$port -idt $SERVER_NAME 
        echo "$ERVER_NAME容器创建完成"
    fi

}
# 主方法入口
function run(){
    backup
    transfer
    build
}
#调用入口方法
run 

注释:DockerFile脚本是用于构建docker镜像

           startup.sh脚本是用于启动jar程序

          createDocker.sh脚本先是进行历史jar备份;在移动项目jar包到指定的工作目录下(jenkins打包的jar会生成到jenkins的安装目录下);构建docker镜像;如果docker镜像已经存在则重启具体可看脚本注释很详细

进行构建项目:

0cc5ead61e7efe0fe2a2a4b61ab3a7cf.png

查看构建日志:

989c23ab17b54f8f28dd3da2848e963e.png

fea02c4e592e481b9fec42b17f5d8083.png

从日志中可以看出;先是进行了maven打包成jar然后执行了

createDocker.sh脚本;开始移动jar,在备份,在构建docker镜像,最后启动docker容器;

测试访问浏览器:输入接口地址

fa1c45896c482e4b2f3308dd7750c91f.png

之后有代码改动只需要提交代码到仓库

比如提交到GIT上:

先add到本地,在commit提交到本地仓库,最后push提交到远程仓库上

在到jenkins中重新构建项目就会自动打包部署上;方便的一匹

jenkins中还有其他强大功能:job定时任务,以及邮件通知;和自动构建部署(意思就是代码仓库检查到有代码提交,代码仓库就会通知jenkins自动进行构建部署多不需要人工去点击构建)

项目地址:

https://gitee.com/lifuping/Test-Jenkins.git

fd0befbd264e4a35cce4fe43f4698720.png

Logo

一站式 AI 云服务平台

更多推荐