解决方法:在要执行svm的脚本顶部添加maven的环境变量,例如
MAVEN_HOME=/usr/local/myapp/maven/maven-3.6.0
PATH=${PATH}:${MAVEN_HOME}/bin
解决过程:
说明:我已经在/etc/profile文件里配置了所有需要配置的环境变量,并重新加载了这个文件。
当我遇到这个错误时,我进行了如下的步骤来排除错误:
1. 在拥有pom.xml的文件夹内执行mvn install 代码编译成功
2. 执行含有mvn install 的脚本 代码编译成功
3. 不断百度,查不到准确的答案,偶然看到要在执行的脚本里export java环境变量。
有感而发,应该就是这个问题了。在脚本顶部 export maven的环境变量 代码编译成功
同上,需要在要执行的脚本顶部export java的环境变量。
最后奉上我的svn自动部署代码过程
思路:当仓库发生更新时(commit),则执行自定义的自动化部署脚本,
脚本关键点:更新项目(svn up),判断后端代码是否被修改了,执行编译,复制项目进web部署路径下。
1 已经在linux上成功安装了 svn,maven,java。
2 cp svn仓库路径/hooks/post-commit.tmpl svn仓库路径/hooks/post-commit
3 给post-commit文件增加可执行权限: chmod +x post-commit
4 在post-commit文件底部添加要执行的脚本 nohup sh /usr/local/myapp/svnrepos/repos1/hooks/myshell-2.sh $REPOS $REV &
4 编写自动化脚本(/usr/local/myapp/svnrepos/repos1/hooks/myshell-2.sh)
红色字符是通用的,蓝色和绿色的字符是根据个人的文件路径而编写的。
#!/bin/sh
MAVEN_HOME=/usr/local/myapp/maven/maven-3.6.0
PATH=${PATH}:${MAVEN_HOME}/bin
JAVA_HOME=/usr/local/myapp/java/jdk1.8.0_191
CLASSPATH=.:$JAVA_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
repos=/usr/local/myapp/svnrepos/repos1 #仓库路径
temp=/usr/local/myapp/svnrepos/temp #临时路径,保存从svn仓库里获取的项目
pro=B2 #要更新的项目名
web=/data/web #保存项目要部署的路径
REPOS=$1 #仓库路径
REV=$2 #项目更新后的版本号
echo "仓库目录:$REPOS 版本:$REV 时间:`date "+%Y-%m-%d %H:%M"` " >> $repos/hooks/mylogs #保存svn>更新记录
cd $temp
svn up
#判断后端代码是否被修改了,假如没有则不进行代码的编译
java=`svn diff -r $[$REV-1] $pro/src/main/java | grep -c '/src/main/java'`
if [ $java -gt 0 ]
then
echo "后端代码发生变化" >> $repos/hooks/mylogs
cd $pro
mvn -U clean install >> $repos/hooks/mymvnlogs #将编译时所产生的输出存放在此文件内
cd target && cp -r $pro $web
else
cp -r $pro/src/main/webapp/* $web/$pro/
fi
if (( $? ))
then
echo "Update Failed!" >> $repos/hooks/mylogs
else
echo "Update Success!" >> $repos/hooks/mylogs
fi
echo "" >> $repos/hooks/mylogs