集团OA3系统和门户网站发版操作指引

2021-11-14   


1.发版之前需要在IT服务管理系统上先提一个变更,要在每天下午5点半之前提交,否则就是紧急变更。变更可以参照工单CH000124341,优化项在厂商进行版本申请的邮件里都有写,可复制邮件中的版本优化项内容

2.提交完变更后需要编辑对应的企业微信和招商随行公告,让部门领导审批,审批通过后联系企业微信和招商随行管理员发布对应的公告(因为发布公告也需要有权限),对应内容如下图所示:

3.然后从GIT仓库下载好OA整合包到桌面

OA的git仓库没有权限,让OA系统负责人找GIT那边帮忙增加一下

4.并将整合包重命名为OA-20211105.zip(这个日期为当前发版的日期,根据实际来命名)

5.如果OA版本仓库里面有SQL脚本的,一般则需要在发版前先执行SQL脚本,具体执行时间可咨询厂商人员。有SQL则进行这一步,无SQL就直接进行下一步

登陆招商盾运维版,需要有Ukey,PIN密码为111111

浏览器页面输入192.168.100.1,然后登陆自己的域账号密码进行访问服务器资源,按照下图步骤启动PLSQLweb页面(如说使用self同用户账号登录则会出现"服务器返回的数据格式错误!")

OA的数据库账号密码问伍智敏索要,输入完点击OK就可以访问数据库了

执行SQL脚本如下图所示操作后按F8(或者左上角的齿轮)开始执行,执行完以后提交commit即可

需要回滚的话则点击旁边的红色按钮

6.开始准备版本发布

登陆10.16.0.51服务器进行如下操作:

mkdir -p /usr/oa/wzmdir/`date +%Y%m%d`/ekp
cd /usr/oa/wzmdir/`date +%Y%m%d`
rz

选择下载的目录将OA-20211105.zip传入服务器的nfs目录中

unzip OA-20211105.zip
ls -r ekp
ls -r /home/tomcat/ekp

比较/home/tomcat/ekp下的子目录是否和/usr/oa/wzmdir/20211105/ekp下的子目录结构相同,避免直接解压覆盖不了源文件

如果子目录结构一样则证明封板时归档目录正确,不同则根据实际解压出子目录进行解压操作

变更实施详细步骤:

  • 先停web服务器10.16.0.51-55,10.16.0.92-95,10.41.0.136-140
  • 再停功能服务器10.16.0.61-63
  • 启动功能服务器10.16.0.61-63
  • 再启动web服务器10.16.0.51-55,10.16.0.92-95,10.41.0.136-140

注意:10.16.0.51-55、10.16.0.92-95、10.41.0.136-140都发版,但是10.16.0.51-55不启动服务,因为只购买了蓝凌厂商12台服务器的正式许可。如果服务启动异常,看看是否是挂载的nfs磁盘原因导致。

在web服务器10.16.0.51-55,10.16.0.92-95,10.41.0.136-140做如下操作:

#先备份ekp目录,如果版本有问题直接覆盖目录进行回滚
cp -rf /home/tomcat/ekp /home/tomcat/backup_oa/ekp_back`date +%Y%m%d`

unzip /usr/oa/wzmdir/20211105/OA-20211105.zip -d /home/tomcat/ekp/
cd /home/tomcat/linux64/ && ./stop-tomcat.sh

#执行停止脚本后等一两分钟后查进程是否停止,如果没有停止就使用kill {pid}
ps -elf|grep java|grep -v grep

#确认进程结束后删除实例下的缓存文件,避免更新程序后还是使用的旧文件
rm /home/tomcat/linux64/tomcat/work/Catalina/localhost -rf

cd /home/tomcat/linux64/ && ./start-normal64.sh

在功能服务器10.16.0.61-63做如下操作(程序路径不同):

cp -rf /root/tomcat/ekp /root/tomcat/backup_oa/ekp_back`date +%Y%m%d`
unzip /usr/oa/wzmdir/20211105/OA-20211105.zip -d /root/tomcat/ekp/
cd /root/tomcat/linux64/ && ./stop-tomcat.sh
ps -elf|grep java|grep -v grep
rm /root/tomcat/linux64/tomcat/work/Catalina/localhost -rf
cd /root/tomcat/linux64/ && ./start-normal64.sh

7.如果发版存在问题,则删除ekp目录(请谨慎操作!!!),将备份的文件夹(具体日期以发版当天为准)拷贝或移动到tomcat工作目录的ekp下,具体操作如下:

cd /home/tomcat/
rm -rf ekp
cp -rf backup_oa/ekp_back20211105 ekp
#或者
mv backup_oa/ekp_back20211105 ekp

综合以上的步骤,已写成shell脚本放在/root目录下,每次发版直接运行即可,使用方法为:

发版前在任意服务器上运行./oa_release.sh upload

然后在所有服务器上运行./oa_release.sh stop

最后在所有服务器上运行./oa_release.sh start

如果发版失败可以运行./oa_release.sh rollback

代码内容如下:

#!/bin/bash
#集团OA3.0发版脚本。脚本创始人:刘泽和

#根据tomcat的工作目录不同,可在此修改
workdir=/home/tomcat

#以下便是脚本的固定内容,定义服务器共享目录和发版日期
nfsdir=/usr/oa/wzmdir
release_day=`date +%Y%m%d`

#脚本输出信息提示函数
log_output () {
    echo -e "\e[$1m[$(date +"%F %T")] $2 \e[0m"
}

#检测共享目录下的OA整合包归档路径是否正确
CHECK_OA () {
    unzip -o ${nfsdir}/${release_day}/OA-${release_day}.zip -d ${nfsdir}/${release_day}/ekp/ > /dev/null
    new_array=(`(cd ${nfsdir}/${release_day};ls -R ekp)`)
    old_array=(`(cd ${workdir};ls -R ekp)`)
    for array in "${new_array[@]}"
    do
        if [[ "${old_array[@]}" =~ "${array}" ]];then
            log_output 32 "INFO: 检测压缩包中目录或文件${array}与${workdir}/ekp下路径相同"
        else
            log_output 31 "ERROR: 检测压缩包的目录或文件${array}为${workdir}/ekp下的新增文件,请检查"
        fi
    done
}

#进行ekp目录的备份操作,同时为节省空间将一个月前的备份目录删除
BACKUP () {
    log_output 31 "INFO: 此选项已添加进所有服务器的crond里"
    if [ -d ${workdir}/backup_oa/ekp_back${release_day} ];then
        log_output 32 "INFO: ekp目录已经进行过备份操作"
    else
        cp -rf ${workdir}/ekp ${workdir}/backup_oa/ekp_back${release_day}
        log_output 32 "INFO: ekp目录备份完成,备份在${workdir}/backup_oa目录下"
    fi
    find ${workdir}/backup_oa/ -maxdepth 1 -type d -mtime +14 -exec rm -rf {} \;
    log_output 32 "INFO: 超过14天之前的ekp备份目录已删除"
}

#上传OA整合包
UPLOAD () {
    log_output 32 "INFO: 此选项只需要在一台服务器上执行即可"
    log_output 31 "INFO: 如果中途需要退出脚本,请使用Ctrl+c退出"
    while :
    do
    if command -v rz > /dev/null;then
        if [ -d ${nfsdir}/${release_day} ];then
            rm -rf ${nfsdir}/${release_day}
            sleep 2 && continue
        else
            mkdir -p ${nfsdir}/${release_day}/ekp
            cd ${nfsdir}/${release_day}
            log_output 32 "INFO: 请上传OA整合包"
            rz
            if [ $? -eq 0 ];then
                if [ -f ${nfsdir}/${release_day}/*.zip ];then
	            mv *.zip OA-${release_day}.zip 2> /dev/null
	            log_output 32 "INFO: OA整合包已经重命名成功,为OA-${release_day}.zip"
                else
                    log_output 31 "ERROR: 请检查OA整合包是否上传错误,文件不为zip压缩包"
                    sleep 2 && continue
                fi
                CHECK_OA
                break
            else
                echo
                log_output 31 "ERROR: OA整合包上传失败,请重新上传"
                sleep 2 && continue
            fi
        fi
    esle
        log_output 31 "INFO: 检测系统上lrzsz软件还未安装,将开始安装"
        yum -y install lrzsz -q
        sleep 2 && continue
    fi
    done
}

#部署版本,解压停服务,删除缓存文件
DEPLOY () {
    if [ -d ${workdir}/backup_oa/ekp_back${release_day} ];then 
        log_output 31 "INFO: 开始部署,此选项需要在所有服务器上进行操作"
        unzip -o ${nfsdir}/${release_day}/OA-${release_day}.zip -d ${workdir}/ekp/ > /dev/null
        log_output 31 "INFO: 解压OA整合包完成"
        log_output 32 "INFO: 将开始停止tomcat服务……"
        cd ${workdir}/linux64 &&./stop-tomcat.sh
        sleep 5
        pid=`ps -elf | grep java | grep -v grep | awk '{print $4}'`
        if [ -z "$pid" ];then
            log_output 31 "INFO: tomcat服务已停止"
            rm -rf ${workdir}/linux64/tomcat/work/Catalina/localhost
            log_output 31 "INFO: tomcat实例缓存文件已删除"
        else
            kill -9 ${pid}
            sleep 5
            log_output 31 "INFO: tomcat服务已停止"
            rm -rf ${workdir}/linux64/tomcat/work/Catalina/localhost
            log_output 31 "INFO: tomcat实例缓存文件已删除"
        fi
    else
        log_output 32 "ERROR: 请先进行目录备份操作"
    fi
}

#发行部署后版本,启动服务实例
RELEASE () {
    log_output 31 "INFO: 即将发行新版本,服务启动完毕后中途退出请按Ctrl+c键"
    ps -elf | grep java | grep -v grep > /dev/null
    if [ $? -eq 0 ];then
        log_output 32 "ERROR: 服务还在运行中,请先停止服务"
    else
        cd ${workdir}/linux64&&./start-normal64.sh
    fi
}

#发版有问题就回滚版本
ROLLBACK () {
    pid=`ps -elf | grep java | grep -v grep | awk '{print $4}'`
    if [ -d ${workdir}/backup_oa/ekp_back${release_day} ];then
        if [ -z "$pid" ];then
            log_output 31 "INFO: 开始进行版本回滚"
            rm -rf ${workdir}/ekp
            mv ${workdir}/backup_oa/ekp_back${release_day} ${workdir}/ekp
            rm -f ${workdir}/linux64/tomcat/work/Catalina/localhost
            log_output 31 "INFO: 版本回滚完成"
            log_output 31 "INFO: 即将启动服务实例,启动完毕后中途退出请按Ctrl+c键"
            cd ${workdir}/linux64&&./start-normal64.sh
        else
            kill -9 ${pid}
            sleep 5
            log_output 31 "INFO: 开始进行版本回滚"
            rm -rf ${workdir}/ekp
            mv ${workdir}/backup_oa/ekp_back${release_day} ${workdir}/ekp
            rm -f ${workdir}/linux64/tomcat/work/Catalina/localhost
            log_output 31 "INFO: 版本回滚完成"
            log_output 31 "INFO: 即将启动服务实例,启动完毕后中途退出请按Ctrl+c键"
            cd ${workdir}/linux64&&./start-normal64.sh
        fi
    else
        log_output 32 "ERROR: 无法进行版本回滚,未找到今日备份目录,请手动检查"
    fi
}

case $1 in
upload)
    UPLOAD;;
DEPLOY)
    DEPLOY;;
release)
    RELEASE;;
rollback)
    ROLLBACK;;
backup)
    BACKUP;;
*)
    echo -e "\e[32m请按提示执行如下命令:\n \
    ./oa_release.sh upload|start|stop|backup\n \
    upload  --> 启用上传OA整合包功能\n \
    release --> 启用版本发行功能\n \
    deploy  --> 启用版本部署功能\n \
    rollback--> 启用版本回滚功能\n \
    backup  --> 已加入计划任务执行备份功能,可忽略\e
esac

二、集团GM-NOAP门户系统的发版指引

门户系统的发版同上类似,变更工单可参照

[CH000137487]集团OA门户V13.20211217版本变更

门户一般只替换相应的jsp文件即可,不用重启应用,所以也不需要发公告

集团门户web端地址:

10.16.0.153

10.16.0.154

10.16.0.158

10.16.0.160

10.16.0.176

10.16.0.177

10.41.0.165

10.41.0.166

10.41.0.167

10.41.0.168

10.41.0.169

10.41.0.170

使用Xshell工具的"发送键输入到所有会话"批量执行命令即可

1.备份

mkdir -p /home/backup_ekp/`date +%Y%m%d`

cp -p /home/ekp/ekp/备份文件路径 /home/ekp/`date +%Y%m%d`/

2.变更实施详细步骤

mkdir -p /usr/oa/wzmdir/portal/`date +%Y%m%d`

cd/usr/oa/wzmdir/portal/`date +%Y%m%d`

rz

上传门户版本包,版本包命名格式同OA一样

unzip OA-`date +%Y%m%d`.zip

\cp -f /usr/oa/wzmdir/portal/`date +%Y%m%d`/更新的文件路径 /home/ekp/更新的文件路径

Q.E.D.