linux上Jenkins安装以及本机项目自动部署请参考Jenkins安装+部署,此处不再赘述。
jenkins远程部署流程:本机jenkins maven打包——》远程cp至目标服务器——》在目标服务器上执行脚本。
1,插件安装:publish over ssh

2,系统管理—系统设置中,添加远程主机信息:

3,项目配置
在现有本机项目基础上,copy一份即可。只需修改post build操作.

配置如下(当前项目所在目录为/var/lib/jenkins/workspace/cb-channel-app-707):
- Source files **/* 表示cb-channel-app-707这个job的工作目录下所有的文件和目录。
- Remove prefix 该操作是针对上面的source files目录,会移除匹配的目录。通常留空。
- Remote directory 该操作是基于设定的服务器目录进行(系统设置中的Remote Directory值)。这里我的服务器配置是的/root. 因此这里应该写sites/sskzmz即可。
- Exec command 远程服务器执行的命令。例如可以输出 service nginx restart 或者/www/xx. sh 均可。
重点一: source files 要基于任务的目录进行。不支持绝对路径。如果配置不对,则找不到文件。上例中/var/lib/jenkins/workspace/cb-channel-app-707 是任务目录。最终jenkins会选择 /var/lib/jenkins/workspace/cb-channel-app-707/**/* 查询所要传送的文件。
重点二: Remote directory 要基于你远程服务器的目录配置。你远程服务器配置的基准是/root 。则最终的文件目录是 /root+ Remote directory的配置参数。不支持绝对路径。
4,remote-jenkins.sh脚本内容:
#!/bin/sh
if [ ! -n "$JAVA_HOME" ]; then
export JAVA_HOME="/root/soft/jdk1.8.0_144"
fi
#进程名称(jar包名称)
PROCESS_NAME=$1
#进程ID
PID=0
#jenkins远程部署-jar临时存放位置
JENKINS_JAR_TEMP="/root/"
#jar包放置的目标位置
JAR_TAGET_PATH="/root/project-name/"
#jar备份位置
JAR_BACKUP_PATH="/root/project-name/backup"
#杀掉已有进程
javaps=`$JAVA_HOME/bin/jps -l | grep $PROCESS_NAME`
if [ -n "$javaps" ]; then
PID=`echo $javaps | awk '{print $1}'`
else
PID=0
fi
echo 'running PID:'$PID
if [ $PID -ne 0 ]; then
echo -n "Stopping $PROCESS_NAME(PID=$PID)..."
kill -9 $PID
echo "[kill process success-PID:$PID]"
else
echo "$PROCESS_NAME is not running"
fi
echo "===================================================KILL PROCESS SUCCESSFUL==========================================================="
#jar包备份,移动至标的位置
today=$(date +%Y-%m-%d-%H%M%S)
mv $JAR_TAGET_PATH/$PROCESS_NAME.jar $JAR_BACKUP_PATH/$PROCESS_NAME-$today.jar
mv $JENKINS_JAR_TEMP/$PROCESS_NAME.jar $JAR_TAGET_PATH
echo "jar包部署路径:$JAR_TAGET_PATH/$PROCESS_NAME.jar"
echo "jar包备份路径:$JAR_BACKUP_PATH/$PROCESS_NAME-$today.jar"
echo "===================================================MANAGE JAR SUCCESSFUL============================================================="
#启动jar包
export BUILD_ID=dontKillMe
nohup java -jar -Xms512m -Xmx512m -jar $JAR_TAGET_PATH/$PROCESS_NAME.jar >/dev/null 2>&1 &
sleep 5s
echo "$PROCESS_NAME start success!"
echo "===================================================START JAR SUCCESSFUL=======
后记补充
每台服务器的环境有差异,若出现以下情况:
1,jenkins远程部署无法执行shell脚本;
2,执行脚本后,找不到java命令;
3,脚本内其他命令正常执行,但是java进程 起不来;
上述情况是由于jenkins是非交互式执行shell脚本,执行脚本时不会读取环境变量/etc/profile。可以在启动命令中直接使用环境变量来指定具体命令:
nohup $JAVA_HOME/bin/java -jar -Xms512m -Xmx512m -jar $JAR_TAGET_PATH/$PROCESS_NAME.jar >/dev/null 2>&1
此代码替换上述remote-jenkins.sh脚本中的对应地方。

本文详细介绍了如何在Linux上进行Jenkins的安装,并通过Publish Over SSH插件实现项目的远程部署。内容包括插件安装、系统设置、项目配置,以及解决远程部署执行shell脚本时遇到的问题。重点强调了Source files和Remote directory的正确配置,并提供了针对环境变量问题的解决方案。
515

被折叠的 条评论
为什么被折叠?



