Jenkins部署前后端分离项目经验
本经验是建立在 linux 操作系统下的成功部署经验。
Jenkins 启动
下载安装包
wget -c http://mirrors.jenkins.io/war-stable/latest/jenkins.war
启动脚本 start.sh
#!/bin/bash
export JENKINS_HOME=/path/jenkins/.jenkins
cd /path/jenkins
echo "running jenkins server ...."
nohup java -Dhudson.util.ProcessTree.disable=true -Xmx512m -Xms512m -Xmn185m -Xss256k -jar jenkins.war --httpPort=8080 2>&1 | cronolog log.%Y-%m-%d.out >> /dev/null &
echo "running jenkins server finish"
说明:
- JENKINS_HOME 用于更改 工作区 的目录,避免系统盘下占用太多空间
- -Dhudson.util.ProcessTree.disable=true 这个参数用于启动 shell 脚本,如果不加此参数,编译工具后,通过shell启动的进程会被自动释放掉
- –httpPort=8080 代表后端启动的端口,可根据自身情况,选择不同的端口
- nohup linux 工具,用于分割日志,挺好用的,后台运行
停止脚本 stop.sh
#!/bin/sh
process=`ps -fe|grep "jenkins.war" |grep -ivE "grep|cron" |awk '{print $2}'`
if [ !$process ];
then
echo "stop jenkins process $process ....."
kill -9 $process
sleep 1
else
echo "jenkins is already stop!"
fi
后端 Jenkins 编译脚本
cd server/
mvn clean package
PROJECT=project.jar
DEST="/path/project"
sh ${DEST}/stop.sh
OLD=${DEST}/${PROJECT}
BACKUPPATH=${DEST}/`date +%Y%m%d`
BACKUPOLD=${BACKUPPATH}/${PROJECT}
if [ ! -d ${BACKUPPATH} ]; then
mkdir ${BACKUPPATH}
fi
if [ -f ${BACKUPOLD} ]; then
rm -f ${BACKUPOLD}
fi
if [ -f ${OLD} ]; then
mv ${OLD} ${BACKUPPATH}/
fi
cp server/target/${PROJECT} ${OLD}
cd ${DEST}/script/
./start.sh
sleep 10s
说明:
主要流程: 在编译时,将上一个文件进行备份,然后将最新的文件复制到项目目录。并调用 后台启动脚本。
【关键】 ./start.sh 这句话,一定要让 jenkins 按文件开场的方式进行实现,否则,在编译结束后,启动的进程将会被 jenkins 终止。造成后台启动失败。
【前提】 在服务器上,已成功配置好了 maven的环境,这里做个简单的说明。
下载好 maven 包,然后 将 maven 命令添加到系统环境中
// maven 环境变量配置
vi /etc/profile.d/maven.sh
#!/bin/bash
export MAVEN_HOME=/path/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin
chmod 744 /etc/profile.d/maven.sh
source /etc/profile.d/maven.sh
前端 Jenkins 编译脚本
echo $PATH
node -v
npm -v
npm config set registry http://registry.npm.taobao.org/
cd project
cnpm install
npm run build
PROJECT=project
DEST="/path/project"
OLD=${DEST}/${PROJECT}
BACKUPPATH=${DEST}/`date +%Y%m%d`
BACKUPOLD=${BACKUPPATH}/${PROJECT}
if [ ! -d ${BACKUPPATH} ]; then
mkdir ${BACKUPPATH}
fi
if [ -d ${BACKUPOLD} ]; then
rm -rf ${BACKUPOLD}
fi
if [ -d ${OLD} ]; then
mv ${OLD}/ ${BACKUPPATH}/
fi
cp -r dist/ ${OLD}
chmod -R 755 ${OLD}
说明,
在项目目录下,建立以 日期 为名称的文件夹,便于备份之前的版本文件
将最新编译好的文件夹夹复制到项目文件夹
在 Jenkins 全局工具配置好 nodejs 的版本
设定不同项目的用户权限
新增用户
Manage and Assign Roles 插件
细节补充
git 仓库没有必要每次编译都删除,浪费空间和时间。如下图配置好即可。
添加对应的 角色,并赋予相应的权限,如下图所示:
赋予相应用户对应的权限,需要用用户名添加,然后,勾选相应的权限。保存后,刷新页面后会自动更新成用户的全名显示。
要注意的时,添加后,一定要勾选角色,否则刷新后就无数据了。
更详细的操作说明,参照这篇文章。
https://www.cnblogs.com/wjoyxt/p/6677115.html
【特别注意】设置分配角色后,必须重启 Jenkins 才会生效。