Jenkins自動化CI CD流水線之8--流水線自動化發布Java項目


一、前提

插件: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!!!!!!!"
   }
}

四、構建

五、訪問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM