服务器自动部署脚本

服务器自动部署脚本

自搭服务器需要自动打包部署流程,写了个脚本,备忘。

没有特殊需求直接放在工程根目录下就可以。

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 200

maven打包配置

<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/服务器自动部署脚本/
作者
Dawn_南风
发布于
2019年9月10日
许可协议