美文网首页
部署-shell脚本实现远程部署

部署-shell脚本实现远程部署

作者: coderchenhao | 来源:发表于2020-08-15 10:38 被阅读0次

    什么是shell脚本?

    首先我们要了解一下shell的概念。shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。而shell脚本则是shell程序可以解释和运行的指令。

    实现远程发布

    前景介绍

    博主所在公司的项目开发流程当中,前后端项目都是交于后端同学来打包部署。由于没有使运维,也没使用jenkins来实现项目的自动发布。导致在前后端联调发布新版本的时候,每次都需要后端同学手动来实现项目的部署,非常费时费力。出于折衷的目的,博主先推动了shell脚本来实现自动发布,每个项目配置一个自动发布的shell脚本。

    rsa公钥登录配置

    rsa公钥的配置,博主在之前的博客已经讲解过了。看过的小伙伴可以接着往下阅读。

    脚本实现要素

    这里我们先思考一下,实现shell脚本的远程发布需要实现哪些步骤?

    1.拷贝压缩文件到远程服务器临时目录。
    2.在临时目录将压缩文件进行解压。
    3.关闭项目对应的进程。
    4.将项目原文件进行剪切到备份目录。
    5.将临时目录的项目文件拷贝到工作目录。
    6.重启开启进程。

    脚本编写

    测试环境下,对于java后端的springboot项目,博主的实际使用脚本如下。

    #引用字符超过俩次,需要抽取成变量。
    #服务器用户和ip地址
    server=root@192.168.0.1
    
    #项目名称
    projectname=OurwayLgVopak
    
    #app名称
    appname=userweb-0.0.1-SNAPSHOT.jar
    
    #上传jar包到服务器路径
    scp ./userweb/target/bin/${appname} ${server}:/project/${projectname}/
    
    #ssh远程连接之后需要执行的多条脚本,采用了分隔符的方式,这里以单引号分割
    ssh ${server} '
    cd /project
    projectname=OurwayLgVopak
    appname=userweb-0.0.1-SNAPSHOT.jar
    
    #先获取到运行项目的进程编号
    pid=$(ps -ef|grep ${projectname}/src/${appname}|grep -v grep|awk "{print \$2}")
    if [ ! "${pid}" ];then
    echo "没有找到${appname}的进程,无需kill"
    else
    echo "找到${appname}的进程${pid}"
    echo "kill ${pid}"
    kill ${pid}
    fi
    
    #覆盖移动jar包
    mv -f ${projectname}/${appname} ${projectname}/src/${appname}
    
    #nohup方式启动java应用
    nohup java -jar ${projectname}/src/${appname} >> ${projectname}/src/nohup.out &
    
    #获取到项目运行的pid,排除执行命令的进程,排除被杀死的原型进程
    #awk命令,默认使用空格分隔,并得到第二个参数的值
    newpid=$(ps -ef|grep ${projectname}/src/${appname}|grep -v grep|grep -v ${pid}|awk "{print \$2}")
    echo "${appname}启动完毕,进程${newpid}"
    #退出远程连接
    exit
    '
    echo '脚本执行完成'
    

    运行脚本

    博主这里的开发环境是windows,因此我们将脚本语句保存为.sh类型的文件。然后先打开.git bash窗口,在上面输入 ./{scriptName} 就可以查看脚本的运行结果了。这里需要注意的是你的脚本 跟 你需要发布的jar包之前的层级关闭。j运行结果如下图所示:

    脚本运行结果

    博主微信公众号

    <img src="https://gitee.com/chenhaogit/blogimages/raw/master/xsj/wzgzh-8cm.jpg" style="float:right"/>

    相关文章

      网友评论

          本文标题:部署-shell脚本实现远程部署

          本文链接:https://www.haomeiwen.com/subject/gmaodktx.html