服务器自动部署脚本
服务器自动部署脚本
自搭服务器需要自动打包部署流程,写了个脚本,备忘。
没有特殊需求直接放在工程根目录下就可以。
SHELL脚本
#!/usr/bin/env bash
# 刷新环境变量
source /etc/profile
# [$1]会作为git的分支信息处理
# 工程路径, 绝对路径
dirPath='DIR_PATH'
# 项目名称
appName='PROJECT_NAME'
# 端口号, 会根据端口号关闭进程
port=8080
############# 工具方法 ###############################
# 自动stash,如果存在更改的内容
function autoStash() {
if [ "$(git status --porcelain | wc -l)" -gt 0 ]
then
git stash push -m "auto stash at: $(date)"
fi
}
## 非阻塞延迟2-3秒
function delay() {
echo "loading..."
ti1=$(date +%s) #获取时间戳
ti2=$ti1
while [[ "$((ti2 - ti1 ))" -le 2 ]]
do
ti2=$(date +%s)
done
}
##################################################
# start to run application #
##################################################
# 拉取新代码并打包
if $dirPath
then cd $dirPath
fi
# 自动stash
autoStash
# 支持外部传递分支名称,没有则按当前默认分支处理
if [ -n "$1" ] && [ "$1" != "$(git branch --show-current)" ]
then
branch=$1
git checkout "$branch"
git pull origin "$branch"
else
git pull
fi
mvn clean package -U -DskipTests=true
# 根据端口号查询对应的pid,并删除服务进程
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
echo "$pid"
if [ -n "$pid" ]; then
kill -9 "$pid";
fi
# 删除老文件,复制新文件
rm $dirPath/app/$appName.jar -f
rm $dirPath/logs/$appName.log -f
mv ./target/app.jar ./target/$appName.jar
# 启动项目
cd $dirPath/ || mkdir logs || exit
nohup java -jar -Xms512m -Xmx1024m \
./target/$appName.jar > ./logs/$appName.log 2>&1 &
# 添加一点延迟,等待日志文件创建,避免tail失败
delay
tail -f ./logs/$appName.log -n 200maven打包配置
<build>
<finalName>app</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src</directory>
<includes>
<include>**/*.sh</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>ttc</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<skip>${maven.javadoc.skip}</skip>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<additionalOptions>
<additionalOption>
-Xdoclint:none
</additionalOption>
</additionalOptions>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>${maven.springboot.skip}</skip>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Test.java</include>
<include>**/*Spec.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>服务器自动部署脚本
https://note.0moe.cn/运维/2019/09/10/服务器自动部署脚本/