shell编程 (Jenkins)自动化部署脚本

代替人工部署的步骤:

  1. 编译打包
  2. 通过ftp发送到服务器
  3. 安装部署
    a、先找到久的进程
    b、杀死进程
    c、安装启动

使用shell脚本实现自动化部署:

(附shell语法使用详细备注)

#!/bin/bash
# 系统打包
PROFILE_NAME=${PROJECT_NAME}
#使用当前最新的环境变量
source /etc/profile
#定义模块名
MODEL_LIST=(
    project-demo1
    project-demo2
)
#定义模块的路径
MODEL_PATH=(
    /usr/local/project-demo1
    /usr/local/project-demo2
)

SEND_IP=xxx.xx.x.xx
SEND_HOST=${SEND_IP}
SEND_HOST_DIR=/opt/JENKINS-BUILD-RPMS

BASE_DIR=/root/
JENKINS_DIR=/home/jenkins/workspace
TARGET_DIR=${BASE_DIR}/JENKINS-BUILD

mkdir -p $TARGET_DIR

rm -rf $TARGET_DIR/${PROFILE_NAME}*.rpm

LOCAL_DIR=/usr/local

if [[ $PROFILE_NAME = package* ]]; then
	cd $JENKINS_DIR
	bash "$PROFILE_NAME".sh
    exit 0;
fi

# ssh连接远程服务器执行命令,创建目录
ssh root@${SEND_HOST} "mkdir -p ${SEND_HOST_DIR}"
#循环所有的项目模块路径;
#获取数组的中的所有元素:${array_name[@]}或${array_name[*]}
for ((i = 0; i < ${#MODEL_PATH[@]}; i++)); do
	#要编译的项目名
	if [ "$PROFILE_NAME" = "all" ]; then
		cd $JENKINS_DIR/${MODEL_PATH[$i]}
		echo "$JENKINS_DIR/${MODEL_PATH[$i]}"
		# make被执行时,它会扫描当前目录下Makefile或makefile文件找到目标以及其依赖
		# makefile文件包含了将程序打包成一个rpm包
        make
        # $0是上一条命令make的返回值,0表示没有错误,其他任何值表明有错误
        if [ "$?" != "0" ]; then
            echo "编译失败"
            #exit是1时,认为程序是正常运行并退出;exit非0时,程序产生了一个错误
            exit 1;
        fi
        # ssh连接远程服务器执行命令,删除目录
        ssh root@${SEND_HOST} "rm -rf ${SEND_HOST_DIR}/${MODEL_LIST[$i]}*.rpm"
        #scp 复制文件: scp file root@send_host:/path/
        scp -rp $JENKINS_DIR/${MODEL_PATH[$i]}/rpm/*.rpm root@${SEND_HOST}:${SEND_HOST_DIR}/
        echo "推送${MODEL_LIST[$i]}的RPM到${SEND_HOST}成功!"
        # 删除旧的rpm包
        ssh root@${SEND_HOST} "rpm -e ${MODEL_LIST[$i]}"
        # 安装新的rpm包
        ssh root@${SEND_HOST} "rpm -ivh ${SEND_HOST_DIR}/${MODEL_LIST[$i]}*.rpm"
        echo "在${SEND_HOST}上安装${MODEL_LIST[$i]}成功!"
	fi
	#要编译的项目名是某模块名
    if [ "$PROFILE_NAME" = "${MODEL_LIST[$i]}" ]; then
        cd $JENKINS_DIR/${MODEL_PATH[$i]}
		echo "$JENKINS_DIR/${MODEL_PATH[$i]}"
        make
        if [ "$?" != "0" ]; then
            echo "编译失败"
            exit 1;
        fi
        ssh root@${SEND_HOST} "rm -rf ${SEND_HOST_DIR}/${PROFILE_NAME}*.rpm"
        scp -rp $JENKINS_DIR/${MODEL_PATH[$i]}/rpm/*.rpm root@${SEND_HOST}:${SEND_HOST_DIR}/
        echo "推送${PROFILE_NAME}的RPM到${SEND_HOST}成功!"
        ssh root@${SEND_HOST} "rpm -e ${PROFILE_NAME}"
        ssh root@${SEND_HOST} "rpm -ivh ${SEND_HOST_DIR}/${PROFILE_NAME}*.rpm"
        echo "在${SEND_HOST}上安装${PROFILE_NAME}成功!"
        break
    fi
done
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值