jenkins结合svn检测版本变化部署项目的shell脚本和无法启动tomcat解决办法等问题

执行shell脚本的问题:

问题1:Jenkins执行脚本提示权限问题
解决办法:
1、修改jenkins以root方式运行

vim /etc/sysconfig/jenkins

$JENKINS_USER="root"

2、修改文件夹权限

chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

3、重启Jenkins

systemctl restart jenkins

问题2:mvn命令找不到
mvn: command not found

解决办法:
jenkins找不到命令一般有两种解决方式(前提是jenkins所在用户组有该命令的执行权限):
1、修改系统的环境变量(如果系统的mvn命令执行成功,则不用设)

vim /etc/profile

PATH=$JAVA_HOME/bin:/data/maven/bin:$PATH

source /etc/profile (使得环境变量立即生效)
which mvn (查看是否能找到mvn命令)

2、脚本中直接使用命令的绝对路径:/usr/local/maven/bin/mvn (安装maven的路径可以查到)

问题3:执行shell无法启动tomcat解决办法
原因:在Jenkins中的Post Steps这一步,虽然在shell中写了sh $tomcat_path/bin/startup.sh启动tomcat的命令,但是,Jenkins无法完成该操作。因为Jenkins执行完当前任务之后需要执行下一个任务,此时Jenkins会直接把tomcat进程杀掉,因此在脚本中编写的tomcat启动命令是不会执行的。

解决办法:
个别项目设置:
需要在脚本开始时添加export BUILD_ID=dontKillMe。
全部项目设置:
在启动jenkins 的时候禁止jenkins杀死衍生进程修改/etc/sysconfig/jenkins配置,在JENKINS_JAVA_OPTIONS中加入-Dhudson.util.ProcessTree.disable=true。

需要重启jenkins生效。此方法配置一次后,所有的job都无需设置BUILD_ID,就能够防止jenkins杀死启动的tomcat进程

Jenkins项目“构建”中执行的shell脚本

脚本实现Jenkins在结合svn检测版本变化部署项目时,在“构建”的脚本。maven生成war包并移到$backupdir目录中,过滤代码版本;关闭tomcat,把war文件移到指定路径中,解压,启动tomcat)

#!/bin/bash
#  Jaua
#  Tue Jan 22 2019
#  
export BUILD_ID=dontKillMe
DT=`date +%Y%m%d%H%M%S`
project_name=transaction_Server
workdir=/data/build/SuperAppTransaction
logdir=/data/logs/build
backupdir=/data/backups/files/$project_name
application_path=/data/sites/transaction
build_file=${project_name}-${DT}.war
application_name=transaction
#if [ ! -d "$backupdir" ]; then
#    mkdir -p “$backupdir”
#fi

cd $workdir
svn_ver=`svn up|grep 'revision'| grep -Eo '[0-9]+'`

/usr/local/maven/bin/mvn clean install -Pat_test  -B -Dmaven.test.skip=true -DskipTests > $logdir/$project_name.log
build_status=`cat $logdir/$project_name.log | grep "BUILD SUCCESS" | wc -l`
if [ ${build_status} -eq 1 ]; then
  cd $workdir/$project_name/target
  mv $project_name.war $backupdir/$project_name-$DT.war
  echo "$project_name-$DT.war ==> build from SVN code version $svn_ver." >> $logdir/build.log
else
    exit 1
fi

cd ${backupdir}
if [ -f "${build_file}" ]; then
    ps aux | grep 'tomcat2' | grep -v grep | awk '{ print $2 }'| xargs kill -9

    cd /data/sites
    mv $application_name $application_name.$DT
    mkdir $application_name
    cp -a $backupdir/$project_name-$DT.war $application_path/
    cd $application_path
    jar -xf $project_name-$DT.war

    /usr/local/tomcat2/bin/startup.sh
else
    exit 1
fi

你可能感兴趣的:(Jenkins)