一、前提
插件: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=dontkillme export JAVA_HOME=/usr/local/jdk1.8 TOMCAT_NAME=tomcat TOMCAT_HOME=/application/$TOMCAT_NAME WWWROOT=$TOMCAT_HOME/webapps/ROOT if [ -d $WWWROOT ]; then mv $WWWROOT /data/backup/${TOMCAT_NAME}-$(date +"%F_%T") fi unzip ${WORKSPACE}/target/*.war -d $WWWROOT PID=$(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 build sh '''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.8 TOMCAT_NAME=tomcat TOMCAT_HOME=/usr/local/$TOMCAT_NAME WWWROOT=$TOMCAT_HOME/webapps/ROOT if [ -d $WWWROOT ]; then //如果目錄存在,先備份 mv $WWWROOT /data/backup/${TOMCAT_NAME}-$(date +"%F_%T") fi unzip ${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!!!!!!!" } }