整理下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}