heshao2005 发表于 2018-1-7 20:21:36

[原]基于Telnet协议的Jenkins远程部署

  最近奉命研究Jenkins的自动远程部署,刚开始进行还算顺利。但是,紧接着问题就来了,我们要部署的目标机器是Telnet协议的。而接触过jenkins的都知道,所有的插件里面只有用于本地部署的和基于SSH协议远程部署的,并没有一个是基于Telnet协议的。那么这该怎么解决呢?
  当然,你也可以为你的目标机器安装SSH服务。
  我先说说解决的思路,然后再附上具体的步骤和shell脚本。
  思路:将jenkins安装在linux系统上 --->SVN check out 部署的项目--->maven插件编译、打包--->使用jenkins的FTP插件将需要部署的项目或打成的包上传到指定的机器--->执行shell脚本登录该机器进行解压、部署、启动等操作(也可以直接执行写好的shell)。
  具体步骤:
  (1)源码管理,填写相应的项目SVN地址以及用户名密码
https://images2015.cnblogs.com/blog/848554/201608/848554-20160822143002292-1360053256.png
  (2)配置maven build ,maven插件的配置在系统设置里面设置。
https://images2015.cnblogs.com/blog/848554/201608/848554-20160822143134339-1790758589.png
  (3) FTP上传
https://images2015.cnblogs.com/blog/848554/201608/848554-20160822143257558-1459672537.png
  这里的Source files是jenkins的workspace的相对路径,Remove prefix为取消的前缀(只保留项目名称部分)。
  (4) 构建时执行脚本
https://images2015.cnblogs.com/blog/848554/201608/848554-20160822143358495-2049605203.png
  这是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) "  
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.
https://images2015.cnblogs.com/blog/848554/201608/848554-20160822145047636-493644598.png
  原因:本地服务器和maven服务器之间的连接出现了问题,导致jar包无法下载而报错
  解决方法:
  vi/etc/hosts
  在文件末尾加上你所使用的私服地址如:"192.168.1.1 www.nexus.xxx.com"
  运行 "#/etc/init.d/networking   restart"重启网络
  好了,就到这里吧,发现什么问题大家多多讨论。
页: [1]
查看完整版本: [原]基于Telnet协议的Jenkins远程部署