|
|
|
|
@ -0,0 +1,348 @@
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
##
|
|
|
|
|
##
|
|
|
|
|
set -u
|
|
|
|
|
echo -e "\033[32m#######检测系统版本#######################################################\033[0m"
|
|
|
|
|
linux_ver=$(cat /etc/redhat-release)
|
|
|
|
|
linux_ver1=$(cat /etc/redhat-release | awk -F ' ' {'print $4'})
|
|
|
|
|
if [[ $linux_ver = "CentOS Linux release 7.6.1810 (Core) " ]];then
|
|
|
|
|
echo "系统版本为:$linux_ver,符合安装要求!"
|
|
|
|
|
else
|
|
|
|
|
echo "系统版本为:$linux_ver,不符合安装要求!"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
sleep 3
|
|
|
|
|
|
|
|
|
|
##倒计时函数
|
|
|
|
|
dtime() {
|
|
|
|
|
for t in {6..0}
|
|
|
|
|
do
|
|
|
|
|
echo -n "--$1 after $t seconds!--"
|
|
|
|
|
echo -ne "\r\r"
|
|
|
|
|
sleep 1
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Home="/home"
|
|
|
|
|
run_dir="/home/Edu_devops"
|
|
|
|
|
#Edu_devops_file=$(ls -l /home/ | grep 'edu-coder-devops' | awk {'print $9'})
|
|
|
|
|
#Data_file=$(ls -l /home/ | grep 'Data_edu_devops' | awk {'print $9'})
|
|
|
|
|
#kczy_file=$(ls -l /home/ | grep 'dev_local_kczy' | awk {'print $9'})
|
|
|
|
|
#dockerimage_file=$(ls -l /home/ | grep 'dockerimages.tar.gz' | awk {'print $9'})
|
|
|
|
|
Edu_devops_file=$(ls /home/ | grep 'edu-coder-devops')
|
|
|
|
|
Data_file=$(ls /home/ | grep 'Data_edu_devops')
|
|
|
|
|
kczy_file=$(ls /home/ | grep 'kczy')
|
|
|
|
|
dockerimage_file=$(ls /home/ | grep 'dockerimages.tar.gz')
|
|
|
|
|
echo -e "\033[32m#################################################################\033[0m"
|
|
|
|
|
echo -e "\033[32m执行脚本文件:$Edu_devops_file。\033[0m"
|
|
|
|
|
echo -e "\033[32m安装包文件:$Data_file。\033[0m"
|
|
|
|
|
echo -e "\033[32m课程资源安装包文件:$kczy_file。\033[0m"
|
|
|
|
|
echo -e "\033[32m课程镜像文件:$dockerimage_file。\033[0m"
|
|
|
|
|
|
|
|
|
|
echo -e "\033[32m#################################################################\033[0m"
|
|
|
|
|
|
|
|
|
|
dtime 安装依赖包
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[ -d $Home/Data_edu_devops ]
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
echo "解压平台安装文件。"
|
|
|
|
|
cd $Home; tar -xzvf $Data_file
|
|
|
|
|
else
|
|
|
|
|
echo "平台安装文件已解压。"
|
|
|
|
|
fi
|
|
|
|
|
sleep 1
|
|
|
|
|
|
|
|
|
|
##安装依赖包
|
|
|
|
|
yum localinstall -y /home/Data_edu_devops/local-yumPackge/version7.6/all/*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[ -d $Home/Data_edu_devops ]
|
|
|
|
|
#if [ $? -ne 0 ];then
|
|
|
|
|
# echo "解压依赖包文件:$Data_file"
|
|
|
|
|
# cd $Home; tar zxvf $Data_file
|
|
|
|
|
# echo "完成$Data_file解压。"
|
|
|
|
|
# echo "重命名脚本安装文件夹命名。"
|
|
|
|
|
# sleep 1
|
|
|
|
|
#else
|
|
|
|
|
# echo "依赖包文件解压。"
|
|
|
|
|
#fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exist_command(){
|
|
|
|
|
|
|
|
|
|
for i in $@
|
|
|
|
|
do
|
|
|
|
|
command -v $i &>/dev/null
|
|
|
|
|
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
echo $i 命令不存在,请安装$i
|
|
|
|
|
exit 1
|
|
|
|
|
else
|
|
|
|
|
echo $i 命令存在
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## 判断使用的命令是否存在
|
|
|
|
|
exist_command tar unzip rsync
|
|
|
|
|
|
|
|
|
|
dtime 解压脚本包文件
|
|
|
|
|
|
|
|
|
|
[ -d $Home/Edu_devops ]
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
echo "解压安装脚本文件:$Edu_devops_file"
|
|
|
|
|
cd $Home; unzip $Edu_devops_file
|
|
|
|
|
echo "完成$Edu_devops_file解压。"
|
|
|
|
|
echo "重命名脚本安装文件夹命名。"
|
|
|
|
|
mv $(ls -l $Home | grep 'edu-coder-devops' | grep '^d' | awk {'print $9'}) $run_dir
|
|
|
|
|
else
|
|
|
|
|
echo "脚本文件已解压!"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo -e "\033[32m#################################################################\033[0m"
|
|
|
|
|
|
|
|
|
|
echo "开始部署…………"
|
|
|
|
|
sleep 1
|
|
|
|
|
|
|
|
|
|
##data_ready 函数
|
|
|
|
|
data_ready() {
|
|
|
|
|
## 解压localservce增量包
|
|
|
|
|
[ -d $Home/tar ]
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
echo "解压课程资源包文件。"
|
|
|
|
|
cd $Home; unzip $kczy_file
|
|
|
|
|
else
|
|
|
|
|
echo "课程资源包已解压。"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
## 执行拷贝替换
|
|
|
|
|
cd $Home; rsync -av Data_edu_devops/LocalService/ Edu_devops/LocalService/
|
|
|
|
|
cd $Home; rsync -av Data_edu_devops/local-yumPackge/ Edu_devops/local-yumPackge/
|
|
|
|
|
cd $Home; rsync -av Data_edu_devops/pkg/ Edu_devops/pkg/
|
|
|
|
|
cd $Home; rsync -av tar/LocalService/ Edu_devops/LocalService/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##初始化安装ansibale函数
|
|
|
|
|
init_ansible() {
|
|
|
|
|
/usr/bin/yum -y localinstall $Home/Data_edu_devops/local-yumPackge/version7.6/all/*
|
|
|
|
|
sleep 1
|
|
|
|
|
/usr/bin/yum -y localinstall $Home/Data_edu_devops/local-yumPackge/version7.6/ansible/*
|
|
|
|
|
|
|
|
|
|
##配置ansible 不需要认证
|
|
|
|
|
sed -i 's/.*host_key_checking.*/host_key_checking = False/g' /etc/ansible/ansible.cfg
|
|
|
|
|
sed -i 's/.*StrictHostKeyChecking.*/StrictHostKeyChecking no/g' /etc/ssh/ssh_config
|
|
|
|
|
systemctl restart sshd
|
|
|
|
|
|
|
|
|
|
#拷贝配置文件
|
|
|
|
|
/usr/bin/cp $run_dir/template/ansible-hosts /etc/ansible/hosts
|
|
|
|
|
|
|
|
|
|
#备份
|
|
|
|
|
/usr/bin/mv /etc/hosts /etc/hostsold
|
|
|
|
|
/usr/bin/cp $run_dir/template/etc-hosts /etc/hosts
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dtime 执行data_ready
|
|
|
|
|
|
|
|
|
|
echo "开始执行data_ready…………"
|
|
|
|
|
##运行data_ready函数 script
|
|
|
|
|
data_ready
|
|
|
|
|
#bash $run_dir/data_ready.sh
|
|
|
|
|
echo "执行完成"
|
|
|
|
|
|
|
|
|
|
echo -e "\033[32m######编辑hosts文件###########################################################\033[0m"
|
|
|
|
|
sleep 1
|
|
|
|
|
##自动修改配置文件网卡名
|
|
|
|
|
nic_name=$(ip add | grep '^2'|awk -F': ' '{print $2}')
|
|
|
|
|
if [[ $nic_name != "eth0" ]]; then
|
|
|
|
|
sed -i s/"wang_ka_Name=.*$"/"wang_ka_Name=$nic_name"/g $run_dir/template/ansible-hosts
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
##编辑hosts文件脚本
|
|
|
|
|
bash $Home/edit_hosts.sh
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo -e "\033[32m######测试服务器ip地址是否可访问###########################################################\033[0m"
|
|
|
|
|
##测试服务器ip地址是否可访问
|
|
|
|
|
e_server_ip=$(cat $run_dir/template/etc-hosts | grep '^[0-9]' | awk {'print $1'})
|
|
|
|
|
for es_ip in $e_server_ip
|
|
|
|
|
do
|
|
|
|
|
ping -c 1 $es_ip &>/dev/null
|
|
|
|
|
#
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
echo 服务器ip:$es_ip 无法访问,请检查服务器网络。
|
|
|
|
|
sleep 3
|
|
|
|
|
exit 1
|
|
|
|
|
else
|
|
|
|
|
echo 服务器ip:$es_ip 可正常访问!
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
dtime 执行init_ansible
|
|
|
|
|
|
|
|
|
|
echo "开始安装并初始化ansible。"
|
|
|
|
|
init_ansible
|
|
|
|
|
#bash $run_dir/init_ansible.s
|
|
|
|
|
echo "ansible安装完成"
|
|
|
|
|
sleep 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo -e "\033[32m######再次测试服务器ip地址是否可访问###########################################################\033[0m"
|
|
|
|
|
##再次测试服务器ip地址是否可访问
|
|
|
|
|
a_server_ip=$(cat /etc/ansible/hosts | grep '^[0-9]' | awk {'print $1'})
|
|
|
|
|
for as_ip in $a_server_ip
|
|
|
|
|
do
|
|
|
|
|
ping -c 1 $as_ip &>/dev/null
|
|
|
|
|
#
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
echo 服务器ip:$as_ip 无法访问,请检查服务器网络。
|
|
|
|
|
sleep 3
|
|
|
|
|
exit 1
|
|
|
|
|
else
|
|
|
|
|
echo 服务器ip:$as_ip 可正常访问!
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
dtime 开始检查系统时间
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pm_sys_time() {
|
|
|
|
|
##查看系统时间是否一直
|
|
|
|
|
ansible -f 10 count -m shell -a "date"
|
|
|
|
|
|
|
|
|
|
## 修改时间
|
|
|
|
|
|
|
|
|
|
while true
|
|
|
|
|
|
|
|
|
|
echo -n "所有输出日期是否准确(yes/no):"
|
|
|
|
|
read pt
|
|
|
|
|
do
|
|
|
|
|
case $pt in
|
|
|
|
|
no|NO|N|No|n)
|
|
|
|
|
echo -n "输入要当前的日期和时间(时间格式2020/08/11 16:18:30):"
|
|
|
|
|
read systime
|
|
|
|
|
ansible -f 10 count -m shell -a "date -s '$systime' "
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
yes|Yes|y|Y|YES)
|
|
|
|
|
break
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
## 同步硬件时间
|
|
|
|
|
ansible -f 15 count -m shell -a "hwclock -w "
|
|
|
|
|
## 开启启动date时间为硬件时间
|
|
|
|
|
ansible -f 15 count -m shell -a "sed -i '11a/hwclock -s' /etc/rc.d/rc.local "
|
|
|
|
|
}
|
|
|
|
|
pm_sys_time
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mk_dir(){
|
|
|
|
|
echo -e "\033[32m 创建/data/webguazai目录。\033[0m"
|
|
|
|
|
sleep 1
|
|
|
|
|
ansible -f 5 count -m shell -a "mkdir -p /data/webguazai"
|
|
|
|
|
|
|
|
|
|
echo -e "\033[32m 创建slave /data/workspace目录。\033[0m"
|
|
|
|
|
sleep 1
|
|
|
|
|
ansible -f 10 k8s-slave -m shell -a "mkdir -p /data/workspace"
|
|
|
|
|
}
|
|
|
|
|
mk_dir
|
|
|
|
|
|
|
|
|
|
all_copy() {
|
|
|
|
|
echo -e "\033[32m执行全拷贝。\033[0m"
|
|
|
|
|
sleep 1
|
|
|
|
|
[ ! -f $run_dir/copy.sh.bak ] && cp $run_dir/copy.sh $run_dir/copy.sh.bak
|
|
|
|
|
cat $run_dir/copy.sh | grep '^#read'
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
sed -i "3a\passwd=$(cat /etc/ansible/hosts |grep "^ansible_ssh_pass" | awk -F '=' '{print $2}')" $run_dir/copy.sh
|
|
|
|
|
sed -i s/"^read"/"#read"/g $run_dir/copy.sh
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
cd $run_dir; bash copy.sh
|
|
|
|
|
|
|
|
|
|
echo -e "\033[32m拷贝本地版yum包到所有的节点。\033[0m"
|
|
|
|
|
cd $run_dir; ansible -f 3 count -m copy -a "src=local-yumPackge/version7.6/ dest=/opt/local-install/"
|
|
|
|
|
}
|
|
|
|
|
dtime 执行全拷贝
|
|
|
|
|
all_copy
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##判断是否是高可用
|
|
|
|
|
|
|
|
|
|
New_offline() {
|
|
|
|
|
cat /home/Edu_devops/New-offline-Single-main.yml |grep "等待………………" &>/dev/null
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
sline_num=$(cat -n /home/Edu_devops/New-offline-Single-main.yml | grep "重新导入新bridge 数据库" |awk {'print $1'})
|
|
|
|
|
sed -i "$sline_num i\ - name: 等待………………" /home/Edu_devops/New-offline-Single-main.yml
|
|
|
|
|
sed -i "$sline_num a\ shell: sleep 30" /home/Edu_devops/New-offline-Single-main.yml
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
cat /home/Edu_devops/New-offline-Mutil-main.yml |grep "等待………………" &> /dev/unll
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
mline_num=$(cat -n /home/Edu_devops/New-offline-Mutil-main.yml | grep "重新导入新bridge 数据库" |awk {'print $1'})
|
|
|
|
|
sed -i "$mline_num i\ - name: 等待………………" /home/Edu_devops/New-offline-Mutil-main.yml
|
|
|
|
|
sed -i "$mline_num a\ shell: sleep 30" /home/Edu_devops/New-offline-Mutil-main.yml
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
cat /etc/hosts | grep '^[0-9]' | grep 'haproxy' &>/dev/null
|
|
|
|
|
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
dtime 启动Single模式部署
|
|
|
|
|
echo "Single模式部署"
|
|
|
|
|
cd $run_dir; ansible-playbook -e "webnum=1 mysqluser=root mysqlpass=pre123123" New-offline-Single-main.yml
|
|
|
|
|
# cat $Home/Single_install.log | grep '^fatal' | grep '正克隆到'
|
|
|
|
|
# if [ $? -ne 0 ];then
|
|
|
|
|
# echo "完成single部署"
|
|
|
|
|
# else
|
|
|
|
|
# sleep 30
|
|
|
|
|
# cd $run_dir; ansible-playbook -e "webnum=1 mysqluser=root mysqlpass=pre123123" New-offline-Single-main.yml --start-at="重新导入新bridge 数据库"
|
|
|
|
|
# fi
|
|
|
|
|
else
|
|
|
|
|
dtime 启动Mutil模式部署
|
|
|
|
|
echo "Mutil模式部署"
|
|
|
|
|
cd $run_dir; ansible-playbook -e "webnum=1 mysqluser=root mysqlpass=pre123123" New-offline-Mutil-main.yml
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
New_offline
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dtime 开始部署监控和定时任务
|
|
|
|
|
inst_timing() {
|
|
|
|
|
mysqlip=$(cat /etc/hosts | grep mysql | grep '^[0-9]'| awk '{print $1}')
|
|
|
|
|
##部署监控和定时任务
|
|
|
|
|
cd $run_dir; ansible-playbook after_dev/after_dev.yml --extra-vars "{'db':'localweb','mysqlip':'$mysqlip'}"
|
|
|
|
|
}
|
|
|
|
|
inst_timing
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##导入镜像
|
|
|
|
|
|
|
|
|
|
load_images() {
|
|
|
|
|
[ -f /data/workspace/$dockerimage_file ]
|
|
|
|
|
if [ $? -ne 0 ];then
|
|
|
|
|
echo "将镜像文件移动到/data/workspace/目录。"
|
|
|
|
|
cd $Home; mv ./$dockerimage_file /data/workspace/
|
|
|
|
|
else
|
|
|
|
|
echo "镜像文件已经移动到/data/workspace/目录。"
|
|
|
|
|
fi
|
|
|
|
|
#ansible -f 3 k8s-slave -m shell -a "ls /data/workspace | grep """
|
|
|
|
|
sleep 1
|
|
|
|
|
##在master上执行命令,在所有slave服务器上导入镜像
|
|
|
|
|
ansible -f 3 k8s-slave -m shell -a "docker load -i /data/workspace/$dockerimage_file"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dtime 开始导入slave服务器docker镜像
|
|
|
|
|
load_images
|
|
|
|
|
|
|
|
|
|
sleep 3
|
|
|
|
|
echo "部署成功!"
|