0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

适合小公司的自动化部署脚本

马哥Linux运维 来源:稀土掘金技术社区 2023-12-19 09:52 次阅读

背景(偷懒)

在小小的公司里面,挖呀挖呀挖。快挖不动了,一件事重复个5次,还在人肉手工,身体和心理就开始不舒服了,并且违背了个人的座右铭:“偷懒”是人类进步的第一推动力。

每次想要去测试环境验证个新功能,又或者被测试无情的催促着部署新版本后;都需要本地打那个200多M的jar包;以龟速般的每秒几十KB网络,通过ftp上传到服务器;用烂熟透的jps命令查找到进程,kill后,重启服务。

是的,我想偷懒,想从已陷入到手工部署的沼泽地里走出来。如何救赎?

自我救赎之路

我的诉求很简单,想要一款“一键CI/CD的工具”,然后可以继续偷懒。为了省事,我做了以下工作

找了一款停止服务的脚本,并做了小小的优化

首推 陈皮大哥的停服脚本(我在里面加了个sleep 5);脚本见下文。只需要修改 APP_MAINCLASS的变量“XXX-1.0.0.jar”替换为自己jar的名字即可,其它不用动

该脚本主要是通过jps + jar的名字获得进程号,进行kill。( 脚本很简单,注释也很详细,就不展开了,感兴趣可以阅读下,不到5分钟,写过代码的你能看懂的)

把以下脚本保存为stop.sh


#!/bin/bash
# 主类
APP_MAINCLASS="XXX-1.0.0.jar"
# 进程ID
psid=0
# 记录尝试次数
num=0
# 获取进程ID,如果进程不存在则返回0,
# 当然你也可以在启动进程的时候将进程ID写到一个文件中,
# 然后使用的使用读取这个文件即可获取到进程ID
getpid() {
   javaps=`jps -l | grep $APP_MAINCLASS`
   if [ -n "$javaps" ]; then
      psid=`echo $javaps | awk '{print $1}'`
   else
      psid=0
   fi
}
stop() {
   getpid
   num=`expr $num + 1`  
   if [ $psid -ne 0 ]; then
    # 重试次数小于3次则继续尝试停止服务
    if [ "$num" -le 3 ];then
    echo "attempt to kill... num:$num"
      kill $psid
      sleep 5
    else
    # 重试次数大于3次,则强制停止
      echo "force kill..."
      kill -9 $psid      
    fi
  # 检查上述命令执行是否成功
    if [ $? -eq 0 ]; then
       echo "Shutdown success..."
    else
       echo "Shutdown failed..."
    fi
    # 重新获取进程ID,如果还存在则重试停止
    getpid
    if [ $psid -ne 0 ]; then
       echo "getpid... num:$psid"
       stop
    fi
   else
      echo "App is not running"
   fi
}
stop

编写2行的shell 启动脚本

修改脚本中的XXX-1.0.0.jar为你自己的jar名称即可。保存脚本内容为start.sh。jvm参数可自行修改


basepath=$(cd `dirname $0`; pwd)
nohup java -server -Xmx2g -Xms2g -Xmn1024m  -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:-UseAdaptiveSizePolicy -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -Xloggc:logs/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:HeapDumpPath=logs/dump.hprof -XX:ParallelGCThreads=4 -jar $basepath/XXX-1.0.0.jar &>nohup.log &

复用之前jenkins,自己写部署脚本

脚本一定要放到 Post Steps里

3304852c-9d9d-11ee-8b88-92fbcf53809c.jpg

9行脚本,主要干了几件事:

备份正在运行的jar包;(万一有啥情况,还可以快速回滚)

把jenkins上打好的包,复制到目标服务上

执行停服脚本

执行启动服务脚本

脚本见下文:


ssh -Tq $IP << EOF 
source /etc/profile
#进入应用部署目录
cd /data/app/test
#
DATE=`date +%Y-%m-%d_%H-%M-%S`
#删除备份jar包
rm -rf /data/app/test/xxx-1.0.0.jar.bak*
#备份历史jar包
mv /data/app/test/xxx-1.0.0.jar /data/app/test/xxx-1.0.0.jar.bak$DATE
#从jenkins上拉取最新jar包
scp root@$jenkisIP:/data/jenkins/workspace/test/target/XXX-1.0.0.jar /data/app/test
# 执行停止应用脚本
sh /data/app/test/stop.sh
#执行重启脚本
sh /data/app/test/start.sh
exit
EOF

注:

$IP是部署服务器ip,$jenkisIP是jenkins所在的服务器ip。在部署前请设置jenkins服务器和部署服务器之间ssh免密登录

/data/app/test 是部署jar包存放路径

stop.sh 是上文的停止脚本

start.sh 是上文的启动脚本

总结

如果不想把时间浪费在本地打包,忍受不了上传jar包的龟速网络,人肉停服和启动服务。请尝试下这款自动部署化脚本。小小的投入,带来大大的回报。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8946

    浏览量

    85061
  • 代码
    +关注

    关注

    30

    文章

    4719

    浏览量

    68208
  • 脚本
    +关注

    关注

    1

    文章

    385

    浏览量

    14810

原文标题:适合小公司的自动化部署脚本

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    有经验电子IT男说说大公司小公司有的特点,该如何抉择

    可能由于你之前工作的公司是个小公司,会稍微麻烦点,跳槽的薪水可能会差点。上面就是我对大,小公司的一些了解,希望大家指正和指教,把你们的经验分享给迷茫的我们,让我们能够比较好的规划未来,先谢谢大家了{:3:}
    发表于 05-22 12:46

    有经验电子IT男说说大公司小公司有的特点,该如何抉择

    可能由于你之前工作的公司是个小公司,会稍微麻烦点,跳槽的薪水可能会差点。上面就是我对大,小公司的一些了解,希望大家指正和指教,把你们的经验分享给迷茫的我们,让我们能够比较好的规划未来,先谢谢大家了{:3:}
    发表于 05-22 14:00

    求指教:刚毕业大学生进小公司好,还是去大公司好?

    刚毕业大学生进小公司好,还是去大公司好?
    发表于 02-22 17:04

    今日话题:初入江湖,选择小公司or大公司

    `大公司的制度、流程、体系、规范;小公司的灵活、重任、自由,都是各有优点;小编也曾经一度苦恼!有个朋友说他毕业后去了一家外企做dev,平时工作偏业务,很少接触到深层次技术性的东西,没办法,只有自己学
    发表于 03-04 09:46

    中大公司的经理和小公司的总监,你们怎么选择的?为啥

    选择在大公司熬几年还是小公司里熬几年?还是从大公司小公司
    发表于 02-27 14:56

    赛思互动:小公司需要上CRM吗?

    对于小公司是否需要CRM这个问题,我们主要从小公司的生存方面来谈。 对于小公司来讲,第一目标是生存,先要在激烈的市场竞争中存活下来。客户是公司的衣食父母,如何提高对客户的服务质量,关系
    发表于 07-01 09:01

    赛思互动:小公司需要上CRM吗?

    对于小公司是否需要CRM这个问题,我们主要从小公司的生存方面来谈。 对于小公司来讲,第一目标是生存,先要在激烈的市场竞争中存活下来。客户是公司的衣食父母,如何提高对客户的服务质量,关系
    发表于 07-02 10:58

    硅谷小公司推100核CPU 性能是英特尔四倍

    硅谷小公司推100核CPU 性能是英特尔四倍  一个处理器(CPU)最多能有几个核,双核、四核还是八核?一家硅谷小公司给出的最新答案是:100个。     这家名为T
    发表于 11-30 11:10 703次阅读

    自动化测试脚本开发技巧

    开发自动化测试脚本的技巧和心得软件测试 增量式调试脚本 录制测试脚本,和其他的软件开发成果一样,会变得非常大。为了可以成功的回放,需要调试几百行的代码,为了参数
    发表于 03-26 16:24 53次下载

    毕业生,进大公司好还是进潜力小公司好?

    当然,小公司普遍工资不会太高,这也是毕业生不太会去考虑的一个问题。可是这问题又可以反过来这样想,去大公司拿的工资,能拿多久?大公司里升职难,个人价值很难展示,竞争压力大导致应届毕业生即便去了大
    发表于 05-18 17:40
    毕业生,进大<b class='flag-5'>公司</b>好还是进潜力<b class='flag-5'>小公司</b>好?

    jenkins自动化部署

    本文详细介绍Jenkins的简单使用—jenkins自动化部署
    的头像 发表于 02-06 11:27 4659次阅读
    jenkins<b class='flag-5'>自动化</b><b class='flag-5'>部署</b>

    程序员是选择大公司还是小公司

    我记得前一段时间,我在北京的一个朋友,刚毕业一年,他问我一个问题,我能不能去大公司面试呢?你说我该去大公司,还是小公司呢?
    的头像 发表于 02-12 16:25 2373次阅读

    随着小公司经营规模的扩大 利用AI打造五星级客户体验才能取胜

    快速的技术进步为小公司提供了服务世界各地客户的机会,并有效地与大公司争夺新客户。这些规模较小的公司正在迅速走向全球,部署各种技术支持的解决方案,如
    发表于 02-27 16:51 819次阅读

    如何自动化测试你的接口?

    不知道大家的项目是否都有对接口API进行自动化测试,反正像我们这种小公司是没有的。由于最近一直被吐槽项目质量糟糕,只能研发自己看看有什么接口测试方案。那么在本文中,我将探索如何使用 `Rest
    的头像 发表于 04-07 15:29 1206次阅读
    如何<b class='flag-5'>自动化</b>测试你的接口?

    keil自动化编译脚本

    这是一个 keil 的自动化编译脚本,可被其他脚本或程序调用,接收参数并按参数编译 keil 工程,而不必打开 keil 软件,实现程序上的自动化
    的头像 发表于 10-16 17:04 1638次阅读
    keil<b class='flag-5'>自动化</b>编译<b class='flag-5'>脚本</b>