微服務架構圖(圖片來源網絡,如有侵權聯系我)
好久沒有更新了,總想著寫點東西。
最近工作遇到了這樣的問題:測試環境的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
但是我想說的依然是那句話,我們是測試人員,我們要做的事不是“點點點點點......”。當你開始重復的做一件事的時候,你可以開始寫代碼了。
與君共勉。