linux发布程序常用脚本
0,前言
在github上添加ssh-key,路径:https://github.com/settings/keys , 点击【New SSH key】复制进去即可。
在github上添加好以后,在本地电脑上执行: ssh -T git@github.com 即可看到是否添加成功。这一步一定要执行,不然不能正常拉取代码。
1,从git拉取JAVA代码,并打包后移到对应的位置
#!/bin/bash
# 文件名: install.sh
codePath=/home/myproject_code
jarPath=myproject-biz/myproject-biz-provider/target
targetPath=/home/rundir/jar
targetFile=myproject-biz-provider.jar
branchName=master
cd $codePath
git checkout $branchName
git pull# 如果目标文件夹不存在,则创建
mkdir -p $targetPath
mvn clean install -DskipTests# 如果旧文件存在,先删除旧文件
if [ -e $targetPath/$targetFile ]; then
rm -rf $targetPath/$targetFile
fi
cp $codePath/$jarPath/$targetFile $targetPath/
2,在目标机器上发布新jar并运行
#!/bin/bash
# 文件名: restart.sh
# 说明: myproject-java的启动脚本,备份旧jar包,重命名目标文件并重启。JVM_OPTS="-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xms128m -Xmx128m -Xmn32m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC"
# 打包后的jar包的原文件名字
originJar=myproject-java-biz-provider.jar
# 重命名jar文件,以区分原文件与正式使用的文件
targetJar=myproject-java-prod.jar
activeEnv=prod
# 用于备份旧文件时,重命名时添加文件名后缀
ct=$(date '+%m%d%H%M')
currDir=$(pwd)
# jvm启动参数
JVM_OPTS="-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xms128m -Xmx128m -Xmn32m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC"# 杀死进程
ps -ef | grep -i $targetJar | grep -v grep | awk '{print $2}'|xargs -i kill -9 {}
sleep 2
printf "Finish kill, sleep, start run\n"
# 重命名jar文件,并移到备份文件夹中
mkdir -p bakjar
if [ -e $originJar ]; then
if [ -e $targetJar ]; then
mv $targetJar bakjar/$targetJar$ct
fi
mv $originJar $targetJar
sleep 1
fi
nohup java -server -jar $currDir/$targetJar --spring.profiles.active=$activeEnv -Dspring.config.location=application-$activeEnv.yaml 1> /data/logs/myproject-java/out.log 2> stderr.log &printf "\n\n\n"
jps |grep -v Jps
printf "\n\n\n"
BUILD_ID=dontKillMe
3,从github拉取golang代码并打包成linux可执行文件,并拷到目标文件夹(拷之前,删除旧的文件夹)
#!/bin/bash
# 文件名: pack-code.sh
# 说明: my-go-project 的编译打包脚本。打包后,拷到目标目录。codePath=/home/datum/code/my-go-project
targetPath=/home/rundir/jar
targetFile=my-go-project.linux
branchName=master
cd $codePath
git checkout $branchName
git pull
go build -o $targetFileif [ -e $targetPath/$targetFile ]; then
rm -rf $targetPath/$targetFile
fi
cp $codePath/$jarPath/$targetFile $targetPath/
pwd
printf "\nfinish pack $targetFile \n\ntarget dir files:\n"
ls -l $targetPath
4,拉取go编译好的程序,重命名并启动
#!/bin/bash
# 文件名: deploy.sh
# 说明: mygoproject 的程序拉取,步骤:备份旧文件,重命名新文件,杀掉旧进程,启动新程序。
currDir=$(pwd)
orginalProgram=mygoproject.linux
targetFile=mygoproject-prod.linux
configFile=./application.yaml
programUrl=https://download.mydomain.com/file/mygoproject.linux
bakPath=bakfile
# 用于备份旧文件时,重命名时添加文件名后缀
ct=$(date '+%m%d%H%M%S')# 重命名jar文件,并移到备份文件夹中
mkdir -p $bakPathfileFullPath=$bakPath/$targetFile$ct
printf "\nfileFullPath is $fileFullPath\n\n"
# 如果旧程序存在,移到备份文件夹并重命名
if [ -e $currDir/$targetFile ]; then
printf "exist file: $targetFile\n\n"
mv $targetFile $bakPath/$targetFile$ct
fi
printf "param is : mv $targetFile $bakPath/$targetFile$ct \n\n"wget $programUrl
sleep 1
mv $orginalProgram $targetFile
chmod +x $targetFile
ps -ef | grep $targetFile | grep -v grep | awk '{print $2}' | xargs -r kill -9nohup ./$targetFile --config-file="$configFile" 1> out.log 2>err.log &
pwd
printf "\nfinish restart $targetFile \n\ntarget dir files:\n"
ls -l $targetPath