docker+jenkins+pipeline+windowserver+freesshd+ssh 全自动部署springboot项目到远程服务器,ssh 命令无法执行解决

docker+jenkins+pipeline+windowserver+freesshd+ssh 全自动部署到远程服务器,ssh 命令无法执行解决

运行环环境

docker:windows 10 docker
Jenkins:dokcer 拉的 enkinsci/blueocean
服务器:windows sever2008
SSH: freesshd

发现的问题

hostip为准备部署项目的安装了ssh服务器的windows 服务器 user为ssh配置的登录用户,用的时密钥免密登录的方式 如果时需要密码的好像要安装个 sshpass的服务
1.cmd 或powershell执行 ssh user@hostip 得到的返回结果部分无法正常显示,可能时freessh返回的结果字符集编码格式有问题吧 没有解决
2. 在Jenkins pipleline脚本中执行ssh user@hostip “d:/path/shell.sh” 根本不会执行且报错

测试通过的pipeline 代码

hostip为准备部署项目的安装了ssh服务器的windows 服务器

pipeline {
    agent none
	
    stages {

        stage('MavenBuild') { 
			agent {
			        docker {
			            image 'maven:3.6.1-jdk-8-alpine' 
			            args '-v /D/dcl/dockerdata/.m2:/root/.m2' 
			        }
			    }
            steps {
                 echo 'Building..' 
                    sh 'pwd'
                    sh 'mvn --version'
                    sh 'java -version'
                sh 'mvn -B -DskipTests clean package' 
            }
        }
	
		
		stage('copyandrestart'){
			agent any
		     steps{
				  sh 'pwd'
				  echo 'copying'
				  sh  'scp target/app-v_1.0.0.jar hostip:app-v_1.0.0.jar'
				  echo 'backup and restart'
				  //远程服务器执行脚本命令
				  sh  'ssh hostip "powershell.exe D:\\path\\sshftp\\copysafe.sh"'
				  
			}
		}
    }
}

服务器上运行的脚本

#!/bin/sh

API_NAME=app-v_1.0.0
JAR_NAME=$API_NAME\.jar

PID=$API_NAME\.pid
 

usage() {
    echo "Usage: sh bb.sh [start|stop|restart|status]"
    exit 1
}
 

is_exist(){
  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}
 

start(){
  is_exist
  if [ $? -eq "0" ]; then
    echo ">>> ${JAR_NAME} is already running PID=${pid} <<<"
  else
    nohup java -jar $JAR_NAME > debug_console.log 2>&1 &
    echo $! > $PID
    echo ">>> start $JAR_NAME successed PID=$! <<<"
   fi
  }
 

stop(){
  #is_exist
  pidf=$(cat $PID)
  #echo "$pidf" 
  echo ">>> api PID = $pidf begin kill $pidf <<<"
  kill $pidf
  rm -rf $PID
  sleep 2
  is_exist
  if [ $? -eq "0" ]; then
    echo ">>> api 2 PID = $pid begin kill -9 $pid  <<<"
    kill -9  $pid
    sleep 2
    echo ">>> $JAR_NAME process stopped <<<" 
  else
    echo ">>> ${JAR_NAME} is not running <<<"
  fi 
}
 

status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo ">>> ${JAR_NAME} is running PID is ${pid} <<<"
  else
    echo ">>> ${JAR_NAME} is not running <<<"
  fi
}
 

restart(){
  stop
  start
}
 

case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac
exit 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值