代替人工部署的步骤:
- 编译打包
- 通过ftp发送到服务器
- 安装部署
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