为了持续集成自动化构建在服务器上采用了jenkins

构建时采用了执行shell的方式【明明有一个maven的选项貌似可以更方便的样子然而并不会用(摊手状呐喊:大神带带我

由于项目采用了maven以及使用svn做版本控制【这两样是不是可以更简单的构建是不是可以不用写shell】

所以归根结底,shell要做的事情很简单

0.svn更新项目

1.用maven编译项目

2.这里可以选择了,将编译出的项目替换或者拿war包处理,我用的war,所以删除webapps下原有的war以及原来解压出的项目文件

3.将编译出的war复制到webapps下

4.重启tomcat

采用shell的时候要注意几点【也许不用shell就不用注意了

jenkins的权限问题和身份问题

比如无法su

jenkins,然后操作,所以脚本里一般先进行一次身份切换,也可以使用sudo来进行操作

首先是svn

update的用户身份问题,之前以root身份进行了svn的检出等操作,账户密码在root身份下记录过就可以免输了,身份变化之后需要重新设置,比如用jenkins就需要再次输入密码和身份,sudo采用root身份也可以免输了。

其次就是sudo的问题,【selinux似乎不允许没有在sudoers文件里的用户进行sudo,这样操作属于违规会被报告,出现此类提示可以将用户加入sudoers文件】,这样的操作会要求输入jenkins的密码,【关于shell的密码等待输入问题头疼了很久很久从未解决过,然而sudo可以从标准输入流读取密码】,采用echo

'passwd'|sudo -S

****这样的形式就将密码送进去了,还有一种解决办法就是在/etc/sudoers文件里将用户设置为nopassword(形式如Jenkins ALL

= (ALL) NOPASSWD:

ALL),可以达到sudo时免输密码的效果,这样,sudo的问题就解决了

剩下的问题是sudo部分命令时出现command not

found,一开始我尝试了各种办法把PATH送进来,引进各种bin,都失败了【解决的告诉我一下3Q】,最后一语惊醒梦中人的是“使用命令的绝对路径”,“使用命令的绝对路径”,“使用命令的绝对路径”,重要的话说三遍,当命令无法使用时使用它的绝对路径总是没错的,比如sudo

mvn package就是这个问题

说到maven编译问题,啊呀感觉这方面资料太少了,最后手头尝试了一遍才知道mvn

package就解决了,真是醉了【很可能是我的检索有问题】

还有一个maven指定jdk版本的问题,他默认1.5!eclipse里面指定出来后,svn更出来的还是1.5,改了maven的settting.xml还是1.5!最后会出现

mvn 请使用 -source 7 或更高版本以启用

diamond 运算符

这样的报错!

最后解决方案如下

在pom.xml里面引入


这里面version的部分如果缺少,在3.0的maven会warning

这样就成功的提升到了1.8啦

【啊,绕了一堆弯路总算解决了,最后成功地吃上了晚饭,说起来昨天真是太倒霉了,各种糟糕的事情一连串,愿这个世界能对我们温柔以待~