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: """

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

Check console output at "${env.JOB_NAME} [${env.BUILD_NUMBER}]"

""",

                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: """

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

                   

Check console output at "${env.JOB_NAME} [${env.BUILD_NUMBER}]"

""",

 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

 

本内容由安康学院“雨季”原创。

你可能感兴趣的:(项目实战)