整理下Jenkins本地部署程序的过程。
- 在开发阶段,许多编译工具会将我们的源码编译可使用的文件。例如 - vue-cli的项目会被- webpack打包编译为浏览器的文件,- Java项目会被编译为- .class/jar文件以供服务器使用。- 开发人员将源代码,经过编译、压缩等一系列流程打包 
- 上传到服务器。 
- 在服务器将编译后的文件,手动可用的容器服务内(例如 - Nginx,Tomcat,Apache等服务)
 
单机部署
在jenkins所在的机器上部署程序
- 部署jenkins并配置环境
- 设置jenkins-credentials (后续用于从git仓库中获取代码)
- 创建任务 - 设置仓库地址
- 设置程序部署shell脚本
 
- jenkins shell
mvn clean install -Dmaven.test.skip=true
cp x x x/target/xxx-1.0.0-SNAPSHOT.jar /opt/xxx/upgrade
cd /opt/xxx
BUILD_ID=dontKillMe sh xxx.sh
- 编写程序运行shell脚本。
- 部署java
#!/bin/bash
app=xxx
appName=${app}-1.0.0-SNAPSHOT
projPath=/opt/xxx
upgradePath=${projPath}/upgrade
backPath=${projPath}/backup
logFile=${projPath}/data/logs/${app}.log
# 检查升级文件是否存在
echo "checking upgrade file..."
if [ ! -f ${upgradePath}/${appName}.jar ]; then
    echo "cann't found file ${upgradePath}/${appName}.jar!"
    exit
fi
# 结束进程
pid=`ps aux | grep ${projPath}/${appName}.jar | grep -v grep | grep -v kill | awk '{print $2}'`
if [ ${pid} ]; then
    echo "kill ${appName}!"
    kill -9 $pid
fi
# 备份原升级文件,如果存在的话
if [ -f ${projPath}/${appName}.jar ]; then
    timeStr=`date +%Y%m%d%H%M%S`
    mv ${projPath}/${appName}.jar ${backPath}/${appName}.jar.bak_${timeStr}
    echo "load ${appName} success!"
    echo "backup ${appName} success!"
fi
# 拷贝升级文件
echo "copy ${appName}.jar..."
cp ${upgradePath}/${appName}.jar ${projPath}/${appName}.jar
# 启动进程
echo "start ${appName}..."
nohup java -Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -jar ${projPath}/${appName}.jar --spring.profiles.active=test >/dev/null 2>&1 &
# 查看日志
# 判断当天日志文件是否存在
if [ ! -f ${logFile} ]; then
    # 文件不存在则创建文件,再执行tail命令
    touch ${logFile}
fi
echo "tail -f ${logFile}"
- 部署vue
#!/bin/bash
# git revert
# git restore .
applicationPath=/opt/view/xxxx
echo 'delete old files...'
rm -rf ${applicationPath}/*
echo 'copy files after npm build!'
cp -rf dist/* ${applicationPath}