shell脚本完成服务部署部分工作

微服务架构图(图片来源网络,如有侵权联系我)

好久没有更新了,总想着写点东西。

最近工作遇到了这样的问题:测试环境的jenkins接二连三的被入侵,多次的环境搭建让我身心俱疲。最近的一次环境受到影响,是因为我的环境使用了别个项目的jenkins,结果那台机器被入侵后,导致我的环境无故受到牵连(不过这也是我的一个过失,在别的机器上加了自己的配置,没有使用时,没有删除我的测试环境的相关配置)。

受影响的服务器进行了重装。一是真的真的没有时间配置jenkins,二是对网上下载的jenkins包的安全性表示怀疑,于是考虑自己手动完成服务的发布

在我发布项目的时候发现有些工作是重复的,于是果断写了简单的shell脚本,完成部分服务部署工作

一、服务部署目录结构

服务的目录结构大概就是,以服务名为一个文件夹,文件夹下有start.sh脚本和stop.sh脚本,使用stop.sh杀死服务进程,使用start.sh启动服务。功能比较简单

服务目录结构

二、编写脚本思路

1、有一个文件叫dirFile,里面记录着这台服务器需要部署的服务名称。start.sh和stop.sh文件,分别是开启服务和杀死服务的命令,服务对应的名字默认为package_name 。注意:这两个.sh文件的权限是可读可写可执行

2、读取dirFile里的服务名,创建文件夹

3、将start.sh和stop.sh拷贝到创建好的文件夹中,替换.sh文件中的package_name 值,为所在文件夹的名字

三、原代码

dirFile文件保存服务的名称

thor-bigdata
thor-bus
thor-content
thor-multilingual
thor-quest
thor-task
thor-user
thor-version
thor-wallet

start.sh脚本

#启动服务
nohup /usr/local/jdk/jdk-11.0.1/bin/java -Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m -XX:MaxNewSize=256m  -jar /opt/local/bao/package_name/package_name.jar --spring.profiles.active=qa >>/tmp/package_name.log &  

#输出日志
tail -f /tmp/package_name.log

stop.sh

#关闭进程
kill -9 `ps axu | grep "package_name.jar" | grep -v grep | awk '{print $2}'`  

#进入服务包所在文件夹
cd /opt/local/bao/package_name  

#删除文件
rm -rf package_name.jar 

build.sh主要程序逻辑代码

#!/bin/bash


while read line
do
  
  if [ ! -d "$line" ];then
    echo "创建文件夹" $line
    mkdir /opt/local/bao/$line
    cp stop.sh /opt/local/bao/$line/
    sed -i "s/package_name/$line/g"  /opt/local/bao/$line/stop.sh

    cp start.sh /opt/local/bao/$line/
    sed -i "s/package_name/$line/g"  /opt/local/bao/$line/start.sh

  fi
done < '/opt/local/build/dirFile'

代码文件结构

四、写在最后

jenkins环境重新部署还有其他方法,比如jenkins api

但是我想说的依然是那句话,我们是测试人员,我们要做的事不是“点点点点点......”。当你开始重复的做一件事的时候,你可以开始写代码了。

与君共勉。

你可能感兴趣的:(shell脚本完成服务部署部分工作)