• 【原创】基于Telnet协议的Jenkins远程部署


      最近奉命研究Jenkins的自动远程部署,刚开始进行还算顺利。但是,紧接着问题就来了,我们要部署的目标机器是Telnet协议的。而接触过jenkins的都知道,所有的插件里面只有用于本地部署的和基于SSH协议远程部署的,并没有一个是基于Telnet协议的。那么这该怎么解决呢?

      当然,你也可以为你的目标机器安装SSH服务。

      我先说说解决的思路,然后再附上具体的步骤和shell脚本。

      思路:将jenkins安装在linux系统上 --->  SVN check out 部署的项目  --->  maven插件编译、打包  --->  使用jenkins的FTP插件将需要部署的项目或打成的包上传到指定的机器  --->  执行shell脚本登录该机器进行解压、部署、启动等操作(也可以直接执行写好的shell)。

      具体步骤:

      (1)  源码管理,填写相应的项目SVN地址以及用户名密码

      

      (2)配置maven build ,maven插件的配置在系统设置里面设置。

      

      (3) FTP上传

      

      这里的Source files是jenkins的workspace的相对路径,Remove prefix为取消的前缀(只保留项目名称部分)。

     (4) 构建时执行脚本

      

      这是Telnet远程登录的脚本

    #!/usr/bin/env sh
    USERNAME=swdev         # 登录用户名
    PASSWARD=swdev         # 登录密码
    TAR=icore-business-ecif-biz-0.0.1-SNAPSHOT-unix.tar.gz   #TAR是上传的压缩包的名字
    MODEL=provider         # MODEL是压缩包根目录的名字和启动的二进制程序名一样
    DEPLOY_DIR=ecif         # DEPLOY_IP是上传文件所在的目录
    REMOTE_IP=192.168.2.3     # 登录IP
    (sleep 1;echo "$USERNAME";
     sleep 1;echo "$PASSWARD";
     sleep 1;echo "cd $HOME/$DEPLOY_DIR";
     sleep 1;echo "chmod +x ./deploy";
     sleep 1;echo "nohup ./deploy $TAR $MODEL 2>&1 > deploy.log&";
     sleep 10)|telnet $REMOTE_IP
     exit 0

      (5) 构建后执行脚本deploy.sh(主要用于解压、部署、启动等操作,这个放在上传文件所在的目录中)

    #!/usr/bin/env sh
    #
    # $1 tar.gz name
    # $2 provider source folder name
    #
    set -e
    log_message () {
      echo "[$(date +%Y%m%d-%H:%M:%S)] $1"
    }
    BASDIR=$(dirname $0)
    if [ $# -lt 2 ]; then
      log_message "Usage : $(basename $0) [tar name] [provider name]"
      exit 1
    fi
    
    # Stop previous version and backup, then remove previous package
    CMD="$BASDIR/$2/bin/$2"
    if [ -e "$2" ]; then
      $CMD stop
      backup="${2}-$(date +%Y%m%d%H%M%S)"
      log_message "Back up previous application to ${backup}.tar.gz"
      tar -cvf $backup.tar $2
      gzip ${backup}.tar
      rm -rf $2
    fi
    
    log_message "Extract package begin"
    gunzip -c $1|tar -xvf -
    # Generate log directory
    mkdir -p $BASDIR/$2/logs
    log_message "Starting application"
    $CMD start

      这个脚本只是一个示例,需要根据具体业务具体而定。

      最后呢,遇到的几个比较坑的地方拿出来与大家分享下:

      Failed to parse POMs.

      

      原因:本地服务器和maven服务器之间的连接出现了问题,导致jar包无法下载而报错

      解决方法:

      vi  /etc/hosts

      在文件末尾加上你所使用的私服地址  如:"192.168.1.1 www.nexus.xxx.com"

      运行 "#/etc/init.d/networking   restart"  重启网络

       好了,就到这里吧,发现什么问题大家多多讨论。

      

    The higher I got, the more amazed I was by the view.
  • 相关阅读:
    C++解决单纯形表
    VS2010 MFC Excel(3)
    VS2010 MFC Excel(1)
    VS2010 MFC 读取Excel(2)
    读取数量不定的输入数据
    牛顿插值
    连接数据库
    雅克比迭代
    NOIP模拟 24
    NOIP模拟 23
  • 原文地址:https://www.cnblogs.com/wyx312/p/5795638.html
Copyright © 2020-2023  润新知