一、前提
插件:Maven Integration plugin
环境:
maven、tomcat
用的博客系统代码:
git clone https://github.com/b3log/solo.git
远端git服务器:
[git@git repos]$ mkdir -p solo [git@git repos]$ cd solo/ [git@git solo]$ git --bare init Initialized empty Git repository in /home/git/repos/solo/
本地web:
[root@web solo]# git remote -v origin git@172.16.1.3:/home/git/repos/solo (fetch) origin git@172.16.1.3:/home/git/repos/solo (push) [root@web solo]# git remote rm origin [root@web solo]# git init Reinitialized existing Git repository in /root/solo/.git/ [root@web solo]# git remote add origin git@172.16.1.3:/home/git/repos/solo [root@web solo]# git add . [root@web solo]# git commit -m "java solo all" # On branch master nothing to commit, working directory clean [root@web solo]# git push origin master Counting objects: 29058, done. Compressing objects: 100% (9854/9854), done. Writing objects: 100% (29058/29058), 47.77 MiB | 39.28 MiB/s, done. Total 29058 (delta 15768), reused 29058 (delta 15768) To git@172.16.1.3:/home/git/repos/solo* [new branch] master -> master
因为solo需要改如下配置才可以访问:(改serverhost为指定的域名)
vim /root/solo/src/main/resources/latke.properties
然后再重新提交上去
二、配置
1)新建job
2)参数化构建
3)配置git仓库(针对jenkinsfile)
三、编写Jenkinsfile
源码配置文件:
node ("slave02-172.16.1.3") {//def mvnHome = '/usr/local/maven'stage('git checkout') {checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@172.16.1.3:/home/git/repos/solo']]])}stage('maven build') {sh '''export JAVA_HOME=/usr/local/jdk1.8/usr/local/maven3.3/bin/mvn clean package -Dmaven.test.skip=true''' }stage('deploy') {sh ''' JENKINS_NODE_COOKIE=dontkillmeexport JAVA_HOME=/usr/local/jdk1.8TOMCAT_NAME=tomcatTOMCAT_HOME=/application/$TOMCAT_NAMEWWWROOT=$TOMCAT_HOME/webapps/ROOTif [ -d $WWWROOT ]; thenmv $WWWROOT /data/backup/${TOMCAT_NAME}-$(date +"%F_%T")fiunzip ${WORKSPACE}/target/*.war -d $WWWROOTPID=$(ps -ef |grep $TOMCAT_NAME |egrep -v "grep|$$" |awk \'{print $2}\')[ -n "$PID" ] && kill -9 $PID/bin/bash $TOMCAT_HOME/bin/startup.sh'''}stage('test') {//sh "curl http://solo.test.com/status.html"echo "test ok!!!!!!!"} }
下面为带解释版,但不可以使用,部分注释会造成问题
node ("slave02-172.16.1.3") { //绑定到该节点构建//def mvnHome = '/usr/local/maven'stage('git checkout') { //拉代码checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@172.16.1.3:/home/git/repos/solo']]])}stage('maven build') { //maven buildsh '''export JAVA_HOME=/usr/local/jdk1.8 //在指定java环境变量/usr/local/maven3.3/bin/mvn clean package -Dmaven.test.skip=true''' //构建maven包 clean package表示构建之前会清理之前构建的包,-Dmaven.test.skip=true表示跳过单元测试 }stage('deploy') { //部署sh ''' JENKINS_NODE_COOKIE=dontkillme #tomcat启动时会衍生出一些子进程,然后才能成功启动,但是jenkins会在构建结束杀掉tomcat的那些衍生子进程,造成tomcat启动失败,此处加上这个参数可以解决这个问题。 export JAVA_HOME=/usr/local/jdk1.8TOMCAT_NAME=tomcatTOMCAT_HOME=/usr/local/$TOMCAT_NAMEWWWROOT=$TOMCAT_HOME/webapps/ROOTif [ -d $WWWROOT ]; then //如果目录存在,先备份mv $WWWROOT /data/backup/${TOMCAT_NAME}-$(date +"%F_%T")fiunzip ${WORKSPACE}/target/*.war -d $WWWROOT //项目包解压到站点目录PID=$(ps -ef |grep $TOMCAT_NAME |egrep -v "grep|$$" |awk \'{print $2}\') //重启tomcat[ -n "$PID" ] && kill -9 $PID/bin/bash $TOMCAT_HOME/bin/startup.sh'''}stage('test') { //测试//sh "curl http://wp.test.com/status.html"echo "test ok!!!!!!!"} }