zoukankan      html  css  js  c++  java
  • 项目部署(四、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

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

  • 相关阅读:
    C#编程:依赖倒置原则DIP
    java项目与javaweb项目导入jar包的区别
    《C#从入门到精通(第3版)》目录
    Sublime Text 格式化代码
    ThinkPHP 入门
    CentOS 7.2配置LAMP环境——yum版
    打包名命令:tar
    不规则数组的构建
    Linux文件权限概念
    tomcat启动成功但是没有监听8080端口
  • 原文地址:https://www.cnblogs.com/Unlimited-Blade-Works/p/14794847.html
Copyright © 2011-2022 走看看