项目部署(四、docker安装的Jenkins部署springboot和tomcat项目)

基础环境准备

docker安装jenkins(自行百度)

安装jdk,git,maven

插件管理

 

 安装相关SSH的插件,因为jenkins是安装在docker容器里面的,需要通过SSH连接到宿主上

添加凭据

 

 

 

 添加宿主服务器连接的登录账户和密码

 

 

这里类似配置git的凭证,通过凭证可以在宿主服务器中进行操作

 

 

 

 配置宿主服务器的连接IP和端口(SSH默认端口是22)

打包步骤

1.前面的拉去git,maven打包等步骤不变

2.在maven构建完成后通过ssh编写脚本

 

 

 3.TOMCAT脚本

docker安装tomcat(本地使用的是tomcat8 jdk8)

docker pull tomcat:8.5.54-jdk8-openjdk

xhell脚本

#=====================================================================================
#=================================定义初始化变量======================================
#=====================================================================================

#操作/项目路径(文件挂载存放的路径)
BASE_PATH=/usr/local/kemuch/his-8081

# jenkins构建好的源jar路径  
SOURCE_PATH=/var/jenkins_home/workspace

#【docker 镜像】【docker容器】【jenkins的workspace下的项目名称】
SERVER_NAME=his-8081

# 原始war包名称
SOURCE_WAR_NAME=chss-server.war

# 发布war包名称
WAR_NAME=his

# 发布端口号
PORT=8081

# docker安装的tomcat版本
TOMCAT=tomcat:8.5.54-jdk8-openjdk

#容器id  [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID]  [无论容器启动与否,都获取到]
CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')
#jenkins容器id
JID=$(docker ps -a | grep -w "jenkins" | awk '{print $1}')

DATE=`date +%Y%m%d%H%M%S`

#=====================================================================================
#============================  创建BASE_PATH  ================================
#=====================================================================================

function makedir(){

    if [ ! -d "$BASE_PATH" ]; then
         echo "=========================>>>>>>>>>>>$BASE_PATH 不存在,创建……"
             mkdir -p $BASE_PATH
         echo "=========================>>>>>>>>>>>$BASE_PATH 创建成功"
    else
         echo "=========================>>>>>>>>>>>$BASE_PATH 已存在,跳过创建"
    fi

    if [ ! -d "$BASE_PATH/backup" ]; then
         echo "=========================>>>>>>>>>>>$BASE_PATH/backup 不存在,创建……"
             mkdir -p $BASE_PATH/backup
         echo "=========================>>>>>>>>>>>$BASE_PATH/backup 创建成功"
    else
         echo "=========================>>>>>>>>>>>$BASE_PATH/backup 已存在,跳过创建"
    fi

    if [ ! -d "$BASE_PATH/webapps" ]; then
         echo "=========================>>>>>>>>>>>$BASE_PATH/webapps 不存在,创建……"
             mkdir -p $BASE_PATH/webapps
         echo "=========================>>>>>>>>>>>$BASE_PATH/webapps 创建成功"
    else
         echo "=========================>>>>>>>>>>>$BASE_PATH/webapps 已存在,跳过创建"
    fi

    if [ ! -d "$BASE_PATH/logs" ]; then
         echo "=========================>>>>>>>>>>>$BASE_PATH/logs 不存在,创建……"
             mkdir -p $BASE_PATH/logs
         echo "=========================>>>>>>>>>>>$BASE_PATH/logs 创建成功"
    else
         echo "=========================>>>>>>>>>>>$BASE_PATH/logs 已存在,跳过创建"
    fi
}

#=====================================================================================
#============================对原本已存在的war进行备份================================
#=====================================================================================



# 备份
function backup(){
    if [ -f "$BASE_PATH/webapps/$WAR_NAME.war" ]; then
        echo "=========================>>>>>>>$WAR_NAME.war 备份..."
            mv $BASE_PATH/webapps/$WAR_NAME.war $BASE_PATH/backup/$WAR_NAME-$DATE.war
        echo "=========================>>>>>>>备份老的 $WAR_NAME.war 完成"

    else
        echo "=========================>>>>>>>老的$BASE_PATH/webapps/$WAR_NAME.war不存在,跳过备份"
    fi
}

#=====================================================================================
#=========================移动最新源war包到docker挂载目录所在目录=========================
#=====================================================================================


 
# 查找源jar文件名,进行重命名,最后将源文件移动到项目环境
function transfer(){
       
    echo "=========================>>>>>>>源文件完整地址为 $SOURCE_PATH/$SERVER_NAME/target/$SOURCE_WAR_NAME"

    echo "=========================>>>>>>>最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SOURCE_WAR_NAME 迁移至 $BASE_PATH"
        docker cp $JID:$SOURCE_PATH/$SERVER_NAME/target/$SOURCE_WAR_NAME $BASE_PATH/webapps/$WAR_NAME.war 

    echo "=========================>>>>>>>迁移完成Success"

    echo "=========================>>>>>>>开始删除挂载目录webapps下的程序"
       rm -rf $BASE_PATH/webapps/$WAR_NAME

}

# 构建容器
function build(){
    
    #无论容器存在与否,都停止原容器服务,并移除原容器服务
    echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"
    docker stop $CID

    echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
    docker rm $CID

    echo "=========================>>>>>>>开始构建容器"
    docker run -d --name=$SERVER_NAME -p $PORT:8080 -v $BASE_PATH/webapps/:/usr/local/tomcat/webapps/ -v $BASE_PATH/logs/:/usr/local/tomcat/logs/ $TOMCAT
}
 
#=====================================================================================
#==============================运行docker容器,启动服务===============================
#=====================================================================================


# 运行docker容器
function run(){
    makedir
    backup
    transfer
    build
}
 
#入口
run

4.springboot脚本

#=====================================================================================
#=================================定义初始化变量======================================
#=====================================================================================

#操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/usr/local/kemuch/transmit

# jenkins构建好的源jar路径  
SOURCE_PATH=/var/jenkins_home/workspace

#【docker 镜像】【docker容器】【Dockerfile同目录下的jar名字[用它build生成image的jar]】【jenkins的workspace下的项目名称】
#这里都以这个命名[微服务的话,每个服务都以ms-springboot这种格式命名]
#注意统一名称!!!!!
SERVER_NAME=transmit

#容器id  [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID]  [无论容器启动与否,都获取到]
CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')

#镜像id  [grep -w 全量匹配镜像名] [awk 获取信息行的第三列,即镜像ID]
IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')

#jenkins容器id
JID=$(docker ps -a | grep -w "gracious_hamilton" | awk '{print $1}')

#源jar完整地址  [jenkins构建成功后,会在自己的workspace/项目/target 下生成maven构建成功的jar包,获取jar包名的完整路径]
#例如:/apps/Devops/jenkins/workspace/springboot/target/springboot-0.0.1-SNAPSHOT.jar
SOURCE_JAR_PATH=$SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar

DATE=`date +%Y%m%d%H%M%S`


#=====================================================================================
#============================对原本已存在的jar进行备份================================
#=====================================================================================

function makedir(){

    if [ ! -d "$BASE_PATH" ]; then
         echo "=========================>>>>>>>>>>>$BASE_PATH 不存在,创建……"
             mkdir -p $BASE_PATH
         echo "=========================>>>>>>>>>>>$BASE_PATH 创建成功"
    else
         echo "=========================>>>>>>>>>>>$BASE_PATH 已存在,跳过创建"
    fi

    if [ ! -d "$BASE_PATH/backup" ]; then
         echo "=========================>>>>>>>>>>>$BASE_PATH/backup 不存在,创建……"
             mkdir -p $BASE_PATH/backup
         echo "=========================>>>>>>>>>>>$BASE_PATH/backup 创建成功"
    else
         echo "=========================>>>>>>>>>>>$BASE_PATH/backup 已存在,跳过创建"
    fi
}


# 备份
function backup(){
    if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
        echo "=========================>>>>>>>$SERVER_NAME.jar 备份..."
            mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
        echo "=========================>>>>>>>备份老的 $SERVER_NAME.jar 完成"

    else
        echo "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
    fi
}


#=====================================================================================
#============================  创建BASE_PATH  ================================
#=====================================================================================



#=====================================================================================
#============================  创建Dockerfile文件 ================================
#=====================================================================================

function createfile(){
      if [ ! -f "$BASE_PATH/Dockerfile" ]; then
             echo "======================>>>>>>>>>>>>>>>>>$BASE_PATH/Dockerfile 不存在,创建……"
                   cd $BASE_PATH
                   echo "FROM java:8" > Dockerfile
                   echo "MAINTAINER wangkang" >> Dockerfile
                   echo "VOLUME /workspace" >> Dockerfile
                   echo "ADD $SERVER_NAME.jar /$SERVER_NAME.jar" >> Dockerfile
                   echo "ENTRYPOINT [\"java\",\"-Djava.security.egd=file:/dev/./urandom\",\"-jar\",\"/$SERVER_NAME.jar\"]" >>Dockerfile
             echo "========================>>>>>>>>>>>>>>>>$BASE_PATH/Dockerfile 创建成功"
       else
             echo "=======================>>>>>>>>>>>>>>$BASE_PATH/Dockerfile 已存在,跳过创建"
       fi
}

#=====================================================================================
#=========================移动最新源jar包到Dockerfile所在目录=========================
#=====================================================================================


 
# 查找源jar文件名,进行重命名,最后将源文件移动到项目环境
function transfer(){
       
         
    echo "=========================>>>>>>>源文件完整地址为 $SOURCE_JAR_PATH"

    echo "=========================>>>>>>>最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 迁移至 $BASE_PATH"
        docker cp $JID:$SOURCE_JAR_PATH $BASE_PATH 

    echo "=========================>>>>>>>迁移完成Success"

}
 


#=====================================================================================
#==================================构建最新镜像=======================================
#=====================================================================================


 
# 构建docker镜像
function build(){
    
    #无论镜像存在与否,都停止原容器服务,并移除原容器服务
    echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"
    docker stop $CID

    echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
    docker rm $CID

    #无论如何,都去构建新的镜像
    if [ -n "$IID" ]; then
        echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID"


        echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID"
        docker rmi $IID

        echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->"
        cd $BASE_PATH
        docker build -t $SERVER_NAME .
        echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->"

    else
        echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->"


        cd $BASE_PATH
        docker build -t $SERVER_NAME .
        echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->"
    fi
}
 

#=====================================================================================
#==============================运行docker容器,启动服务===============================
#=====================================================================================


# 运行docker容器
function run(){
    makedir
    backup
    createfile
    transfer
    build

    docker run --name $SERVER_NAME -itd -p 8700:8700  $SERVER_NAME 

}
 
#入口
run

根据启动项目,填入实现的脚本代码,注意定义初始化变量

posted @ 2021-05-21 17:48  学霸王先森  阅读(276)  评论(0编辑  收藏  举报