Jenkins实现SVN+Maven+Java项目的持续集成
Jenkins 2.46.1
Centos 7.3
JDK 7
安装jdk/maven/svn
在Jenkins所在的Linux机器安装jdk和maven,步骤就不说了,下面是环境变量:
export JAVA_HOME=/usr/local/jdk1.7.0_65 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/tools.jar export PATH=$JAVA_HOME/bin:$PATH export M2_HOME=/usr/local/apache-maven-3.0.5 export PATH=$M2_HOME/bin:$PATH
注意:maven的conf/settings.xml配置应该是自己项目的,这里也省略了;
svn直接用yum安装即可:
# yum install svn -y
安装Jenkins插件
浏览器登录Jenkins,进入插件管理,安装下面三个插件:
Maven Integration plugin Subversion Plug-in Publish Over SSH
同时会有其他依赖的插件安装,若有安装失败的就去http://updates.jenkins-ci.org/download/plugins下载后在“高级”那里上传上来即可;
都安装完成后重启下Jenkins:
# systemctl restart jenkins
在Jenkins配置jdk/maven/svn
浏览器登录Jenkins,进入“系统管理” -> “Global Tool Configuration”,配置jdk和maven后保存:
下面创建一个maven类型的任务(job):
(填入svn信息)
(添加svn用户:输入username和password即可)
(构建触发器,H/5 * * * * 表示每5分钟检查一次,如果svn有更新就进行一次构建)
(maven参数)
最后点击“保存”按钮,然后会进入这个新建的任务页面,点击“立即构建”试试:
(第一次构建遇到过报错:SVNAuthenticationException: svn: E170001: Authentication required for 'reps',进到配置里重新选一下svn用户即可)
自动部署
自动检测svn并构建仍然不够,还需要自动部署和重启;
首先需要配置Jenkins所在Linux到部署Linux的免密登录,假设两者ip分别为192.168.1.111和112,则在111上执行命令:
(命令1有交互按自己的需求填写,简单的就全部直接回车)
(命令2需要输入112的root密码)
# ssh-keygen -t rsa # ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.112
接着在浏览器,进入“系统管理” -> “系统设置”,配置SSH:
然后再这个SSH配置的下方增加112机器的配置:
下面进入前面新建的任务的配置中,在“增加构建后操作步骤”中选择“Send build artifacts over SSH”:
强调一,目标文件,这里是任务路径下的相对路径,与浏览器中任务的工作空间看到的路径一致;
强调二,传输到目标路径,这个是“系统设置”中那个“远程工作目录”的相对路径,比如这里就是把file.zip传到/usr/local/assembly/;
保存后再次构建,构建完成后,在112机器上检查:
# ll /usr/local/assembly/file.zip -rw-r--r-- 1 root root 25052989 Apr 15 15:53 /usr/local/assembly/file.zip
实现的效果:对这个maven工程,每五分钟检测svn,若有提交则构建并更新和重启;
over