3.4 jenkins pipline遠程服務器部署

 

  • 項目摘要:

本文基於文檔https://blog.csdn.net/qq_25337221/article/details/106160024

https://blog.csdn.net/qq_25337221/article/details/106185232編寫。

主要是將一個war包項目發佈到目標服務器,並遠程執行Tomcat。本實例使用之所以未使用springboot,主要是增強一些難度係數,進一步加強jenkins的學習。後續將進一步優化與改進。本實例仍然是入門項目。

     這裏一共分三步:

  1. 將jenkins服務器的公鑰配置到目標服務器,使其可以免密傳輸。
  2. 在jenkins安裝SSH Pipeline Steps插件。
  3. 編寫pipline和shell。
  • 項目具體實施:
  1. 將jenkins服務器的公鑰配置到目標服務器
  1. 在A服務器中生成祕鑰對

#ssh-keygen -t rsa -P ""

# scp /root/.ssh/id_rsa.pub root@target ip:/root

  1. 登錄B服務器,將剛纔拷貝的公鑰文件內容寫入到B服務器的.ssh目錄下的authorized_keys文件中。

# cat /root/id_rsa.pub >> .ssh/authorized_keys

  1. 此時,A登錄B或者A向B發送文件將不需要密碼。
  1. 在jenkins安裝SSH Pipeline Steps插件。
  2. 新建一個簡單Gradle構建的Servlet項目,並在目標服務器安裝jdk,gradle,tomcat。並配置好相關環境變量。
  3. 在目標服務器創建/root/demo目錄,並在裏面新建start.sh腳本用於部署項目與啓動Tomcat,並賦予chmod a+x start.sh 可執行權限。腳本內容如下:

#!/bin/bash

pid=$(ps -ef | grep 8080 | grep -v grep | awk '{print $2}')

if [ -n "$pid" ]; then

    echo $pid

    /usr/local/apache-tomcat/bin/shutdown.sh

fi

rm -rf /usr/local/apache-tomcat/demo*

cp -rf /root/demo/demo.war /usr/local/apache-tomcat/webapps

/usr/local/apache-tomcat/bin/startup.sh

  1. 在jenkins新建一個pipline任務,名稱爲remote-demo-pipline。在jenkins服務器安裝gradle,並且在jenkins配置gradle。

在流水線編寫如下腳本:

def getHost(){

def remote = [:]

remote.name = 'targetServer'

remote.host = 'targetIPAddress'

remote.user = 'root'

remote.port = 22

remote.password = 'targetPassword'

remote.allowAnyHosts = true

return remote

}

pipeline{

agent any

tools {

 gradle 'gradle6.0.1'

 jdk 'jdk1.8'

 }

 environment{

 TASK_NAME="remote-demo-pipline"

 PROJECT="demo.war"

 PROJECT_NAME="demo"

   }

 options{

 buildDiscarder(logRotator(numToKeepStr: '10'))

 timestamps()

}

 triggers{

 pollSCM('H/1 * * * *')

}

stages{

 stage('init-server'){

 steps {

     script {                

        server = getHost()                                  

         }

      }

  }

stage('Preparation'){

  steps{

    echo 'pulling code'

     /*git code*/

    }

}

stage('Build'){

  steps{

    script{

       echo 'Stopping  Application'

       echo 'starting build'

       sh './gradlew clean build -x test'

     }             

   }     

 }

stage('Deploy'){

  steps{

     script{

       echo 'copy new project'

       sh 'scp /var/lib/jenkins/workspace/$TASK_NAME/build/libs/$PROJECT root@targetIP:/root/demo'

   echo "starting project"

   sshCommand remote: server, command: "/root/demo/start.sh"

   echo "startup success!"

   }      

 }

}

}

post {

success {

emailext (

 subject: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",

body: """<p>SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>

<p>Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",

                to: "[email protected],[email protected]",

                from: "[email protected]"

            )

slackSend channel: "#success-demo", message: "Content Build and Validate Succeded for ${env.CONTENT_GIT_REPO} for Repository ${env.CONTENT_GIT_URL} by ${env.JOB_NAME} (<${env.BUILD_URL}|Open>)", color: 'success', tokenCredentialId: 'slack-token'           

        }

failure {

emailext (

 subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",

                body: """<p>FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>

                    <p>Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",

 to: "[email protected],[email protected]",

 from: "[email protected]"

)

slackSend channel: "# failure-jenkins", message: "Content Build and Validate FAILED for ${env.CONTENT_GIT_REPO} for Repository ${env.CONTENT_GIT_URL} by ${env.JOB_NAME} (<${env.BUILD_URL}|Open>)", color: 'warning', tokenCredentialId: 'slack-token'

        }

    }

}

  1. 此時基本搭建完成。這裏很明顯有一處是有問題的,就是需要遠程明文密碼,後面將對以上內容進一步改進。但是有可能是基於springboot、springcloud項目。
  • 參考鏈接:
  1. 將jenkins服務器的公鑰配置到目標服務器: https://www.cnblogs.com/youcong/p/10809056.html

2.  jenkins 部署項目到遠程服務器: https://blog.csdn.net/catoop/article/details/100511027

 

本內容由安康學院“雨季”原創。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章