图例说明:
- coder提交代码到gitlab
- jenkins拉取代码到jenkins服务器workspace下:
3 . 同时也把脚本拉取到jenkins服务器内
4. jenkins自动执行jenkins_shell.sh代码
jenkins_shell.sh执行mvn
5 编译结束 调用deploy 传输jar与remote_run.sh脚本
目录
1 jenkins新建空项目项目配置
注意:结尾 echo 0 要添加 ;否则会卡住像console阻塞一样,不信就试试
2 配置脚本
注意jenkins机器需要支持:
SSH 远程登录remote部署机器
expect命令环境
apt-get install expect
jenkins_shell.sh
主线脚本:1 打包 2复制 3调用子脚本
#!/bin/bash
##自动部署在jenkins server 然后调用deploy进行ssh传输命令
################################################
#mvn打包 test
mvn clean package -Dmaven.test.skip=true -Ptest
#mvn clean package -Dmaven.test.skip=true -Pprod
################################################
#复制导出目录
mkdir -p export/test/
cp target/sso-0.0.1-SNAPSHOT.jar export/test/
################################################
#执行ssh exper 用来scp传文件
# 1注意不能用sh deploy.sh
# 2其他项目注意修改此处的包目录结构
chmod 777 deploy.sh
./deploy.sh 10.199.203.143 appuser slkwanda1A! export/test/sso-0.0.1-SNAPSHOT.jar remote_run.sh /home/appuser/mysever
################################################
#
echo 0
deploy.sh
1 迁移脚本与包 scp
2 登录 ssh
3发送shell执行命令到对端 ssh
#!/usr/bin/expect
# 需要安装expect ssh : apt-get install expect
# 注意其他工程 替换部署目标机器包名 /home/appuser/mysever/sso-0.0.1-SNAPSHOT.jar
set timeout -1
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set src_file2 [lindex $argv 4]
set dest_file [lindex $argv 5]
set port 22
spawn scp $src_file $src_file2 $username@$host:$dest_file
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" { send "$password\n"}
}
"*assword:"
{
send "$password\n"
}
}
expect "100%"
expect eof
spawn ssh -4 -D $port $username@$host "sudo chmod 777 /home/appuser/mysever/*"
expect "*password:*"
send "$password\r"
expect "100%"
spawn ssh -4 -D $port $username@$host "/home/appuser/mysever/remote_run.sh restart"
expect "*password:*"
send "$password\r"
expect eof
remote_run.sh
#!/bin/bash -l
app_name=sso-0.0.1-SNAPSHOT.jar
absolute_app_name=/home/appuser/mysever/$app_name
ProcNumber=`ps -ef |grep -w $app_name|grep -v grep|wc -l`
if [ $1 == "start" ]
then
echo "-----do start service -----"
nohup java -jar $absolute_app_name >log.log 2>&1 &
exit -1
elif [ $1 == "starts" ]
then
echo "-------do start service shortly -----"
java -jar $absolute_app_name
elif [ $1 == "stop" ]
then
echo "-------do stop service -----"
ps -ef | grep $app_name | grep -v grep | awk '{print $2}' | xargs kill -9
elif [ $1 == "restart" ]
then
if [ $ProcNumber -le 0 ];then
echo "-------service null, should't have to kill,strictly start... -----"
nohup java -jar $absolute_app_name > log.log 2>&1 &
exit 0
fi
echo "-------do stop and restart service -----"
ps -ef | grep $app_name | grep -v grep | awk '{print $2}' | xargs kill -9
nohup java -jar /home/appuser/mysever/$app_name >log.log 2>&1 &
exit 0
else
echo "Please make sure the positon variable is start starts restart or stop...."
fi
exit 0
#>/dev/null 2>&1 &
#>/dev/null 2>/dev/null &
#>log.log 2>&1 &
3 提交代码,触发执行
当然也可以进行其他代码审核,代码触发的策略,本说明仅仅演示jenkins打版本部署运行
remote_run.sh