weblogic自动化部署工具

基础说明

在日常运维过程上经常需要安装weblogic环境,常规的思路是通过安装VNC至操作系统,再通过界面安装JDK + weblogic软件。
这次通过shell + jython的方式实现weblogic环境的自动化部署

环境信息

Linux
JDK1.8 ,tar.gz版本
weblogic 12c(12.1.3.0)

自动化部署工具

JDK的自动安装

默认安装目录为:/usr/java
通过交互式提示,输入安装包的绝对路径,然后默认安装到/usr/java目录下,并配置环境变量,并生效变量

代码具体实现:jdkInstaller.sh

#!/bin/bash 


#========
# JDK installer  安装JDK到/usr/java目录下
# 配置/etc/profile中JAVA_HOME环境变量,并生效 source /etc/profile
# 此脚本只需要执行一次,如果安装,则需要提前删除/usr/java安装的jdk
# 示例安装文件:jdk-8u211-linux-x64.tar.gz


function jdkInstaller()
{
    echo '
    ################
    JDK自动安装工作
    工具默认目录:安装JDK到/usr/java目录下
    配置/etc/profile中JAVA_HOME环境变量,并生效 source /etc/profile

    注意:
    本工具需要使用root权限执行
    本工具需要使用jdk的tar.gz格式的源文件

    '

    echo '请输入安装包文件位置(绝对路径):'
    read input 
    if [[ ! -f $input ]]; then
        #statements
        echo "$input 文件不存在,推出程序"
    fi

    # 配置一些参数
    j_dir="/usr/java"
    p_file="/etc/profile"
    #j_dir="/app/install/wls/testdir"
    #p_file="/app/install/wls/1.txt"

    mkdir -p $j_dir
    #last_dir_name=`echo $input|awk -F '/' '{print $NF}'|cut -d '.' -f1`
    last_dir_name=`tar -ztf $input|head -1|sed 's/.$//'`
    JAVA_HOME="$j_dir/$last_dir_name"

    

    #将文件解压到指定目录
    tar zxvf $input -C $j_dir
    # 获取java_home目录
    chown -R root:root $JAVA_HOME

    #设定环境变量至/etc/profile

    echo "export JAVA_HOME=$JAVA_HOME" >> $p_file
    echo "export PATH=$PATH:$JAVA_HOME/bin" >> $p_file
    
    source $p_file
}


jdkInstaller

weblogic 12c自动化部署和配置

通过交互式操作完成weblogic软件环境安装
在执行脚本前,在脚本的环境变量部分需要配置一些使用到的基本信息
如安装目录、domain目录、控制台用户密码、创建的server名和使用端口信息等,然后执行wlsInstaller.sh来实现自动安装

代码实现:
wlsInstaller.sh

#!/bin/bash
# weblogic12c自助安装
clear

####安装目录配置
wls_install_home=/app/weblogic
inventory_loc=$wls_install_home/oraInventory 
inst_group=oinstall
oraInst=$inventory_loc/oraInst.doc   # for silent mode
responseFile=$inventory_loc/wls.rsp
mv_home=$wls_install_home/Oracle/Middleware/Oracle_Home

#####
# domain_name AND weblogic_password  后期可以做成交互式输入参数
# for create domain
wlst_scripts=$mv_home/oracle_common/common/bin/wlst.sh
domain_py_template="create_domain.py"
domain_name="fr_domain"  # pass the domain_name to py template for creating domain
domain_home=$mv_home/user_projects/domains/  # default domain_home
weblogic_password="weblogic123"
jar_template_name=$mv_home/wlserver/common/templates/wls/wls.jar
host_ip="10.1.111.26"

###########
# nodemanger config使用这一部分环境变量
# 配置使用nmRoll注册nodemanager home和domain_home
machine_name=`hostname`
osuser="weblogic"
osuser_group="oinstall"
admin_user="weblogic"
admin_pasword=$weblogic_password
host_ip="10.1.111.26"
admin_url="t3://$host_ip:7001"
my_domain=$domain_home$domain_name/

py_config_nm="configNodeManager.py"

####
# 创建server1的部分
####
sv_name="fr_server2"
port="7007"
mem_args="-Xms4096m -Xmx4096m -XX:MaxPermSize=256M" #请注意通过脚本只能设置这三个参数大小值 
py_create_sv="createServer.py"


# check dirs
function checkDirs()
{
    # check install dirs
    if [[ ! -d $wls_install_home ]]; then
        #statements
        mkdir -p $wls_install_home
        mkdir -p $inventory_loc
    fi
}


# 1·配置oraInst.doc文件
function createOraInst()
{
    cat  /dev/null > $oraInst
    echo "inventory_loc=$inventory_loc" >> $oraInst
    echo "inst_group=$inst_group">> $oraInst


    echo "oraInst.doc 的位置 : $oraInst"
    echo "oraInst.doc文件内容:"
    cat $oraInst
}

# 2.配置response文件
function createResponseFile()
{
cat /dev/null > $responseFile
echo "[ENGINE]" >> $responseFile
echo "Response File Version=1.0.0.0.0" >> $responseFile
echo "[GENERIC]" >> $responseFile
echo "DECLINE_AUTO_UPDATES=true" >> $responseFile
echo "MOS_USERNAME=" >> $responseFile
echo "MOS_PASSWORD=<SECURE VALUE>" >> $responseFile
echo "AUTO_UPDATES_LOCATION=" >> $responseFile
echo "SOFTWARE_UPDATES_PROXY_SERVER=" >> $responseFile
echo "SOFTWARE_UPDATES_PROXY_PORT=" >> $responseFile
echo "SOFTWARE_UPDATES_PROXY_USER=" >> $responseFile
echo "SOFTWARE_UPDATES_PROXY_PASSWORD=<SECURE VALUE>" >> $responseFile
echo "ORACLE_HOME=$wls_install_home/Oracle/Middleware/Oracle_Home" >> $responseFile
echo "FEDERATED_ORACLE_HOMES=" >> $responseFile
echo "INSTALL_TYPE=WebLogic Server" >> $responseFile


echo "responseFile响应文件位置: $responseFile"
echo "显示响应文件的内容:"
cat $responseFile

}
# 执行默认安装weblogic软件
function instll_wls()
{
    echo "请输入wls jar安装包位置:"
    read input 
    java -jar $input -silent -responseFile $responseFile -invPtrLoc $oraInst
}

# create Domain use create_domian.py
function createDomain()
{
    d_array[0]=$domain_name
    d_array[1]=$domain_home
    d_array[2]=$weblogic_password
    d_array[3]=$jar_template_name
    d_array[4]=$host_ip

    # 打印参数输出 
    echo "Print the create DomainParas:" 
    for i in ${d_array[*]}
    do
        echo $i
    done
    
    # 临时使用
    rm -rf $domain_home$domain_name

    # create domian use wlst.sh 
    $wlst_scripts $domain_py_template ${d_array[@]}

    if [[ $? -eq 0  ]]; then
        #statements
        echo "Create Domain : $domain_name  SUCSESS!!"
    fi

    # (yes or no)? to start AdminServer
    echo "We try to start AdminServer, Please input:(yes or no)?"
    while 
    read input
    do
        #statements
        case $input in
        yes )
            echo "Input value: $input . Started AdminServer"
            cd $domain_home$domain_name
            nohup ./startWebLogic.sh &
            break
            ;;
        no )
            echo "Input value: $input . Not Start AdminServer, Exit"
            break
        ;;
        * )
            echo "输入错误,请重新输入 yes or no"
            continue
        ;;
         esac
    done

}


#
function configNodeManger()
{
# machine_name=`hostname`
# osuser="weblogic"
# osuser_group="oinstall"
# admin_url="t3://localhost:7001"
    d_array[0]=$machine_name
    d_array[1]=$osuser
    d_array[2]=$osuser_group
    d_array[3]=$admin_user
    d_array[4]=$admin_pasword
    d_array[5]=$admin_url
    d_array[6]=$my_domain
    d_array[7]=$host_ip


    # 先修改nodemanager配置文件参数,方便后续使用wlst启动
    # 
    nm_pros=$my_domain/nodemanager/nodemanager.properties
    echo $nm_pros

    sed -i 's/SecureListener=true/SecureListener=false/g' $nm_pros

  #  cat $nm_props|grep SecureListener

    # 使用for打印数组
    for i in ${d_array[@]} ; do echo $i ; done

    echo "$wlst_scripts $py_config_nm  ${d_array[@]}"
    
    #执行创建部分
    echo "### Config NM start: running ...."
    $wlst_scripts $py_config_nm  ${d_array[@]}
    echo "### Config NM stop: ended."
    
    # 通过脚本启动nodemanager
    echo "We try to start node manager, Please input:(yes or no)?"
    while 
    read input
    do
        #statements
        case $input in
        yes )
            echo "Input value: $input . Started NodeManager"
            cd $domain_home$domain_name/bin
            nohup ./startNodeManager.sh &
            break
            ;;
        no )
            echo "Input value: $input . Not Start NodeManager, Exit"
            break
        ;;
        * )
            echo "输入错误,请重新输入 yes or no"
            continue
        ;;
         esac
    done



# nmEnroll('$my_domain','$my_domain/nodemanager')


}

# 按照模板创建server1,并指定到当前hostname的machine
function createServer()
{
    echo "
###########
    按照模板创建单个 $sv_name
    默认计算机: $machine_name
    IP地址:$host_ip
    默认端口:$port
    启动参数:$mem_args
###########
    "
    d_array[0]=$sv_name
    d_array[1]=$machine_name
    d_array[2]=$host_ip
    d_array[3]=$port
    #d_array[4]=$mem_args
    # for : connect to admin control
    d_array[4]=$admin_user
    d_array[5]=$admin_pasword
    d_array[6]=$admin_url
    d_array[7]=$mem_args

    echo $mem_args

    $wlst_scripts $py_create_sv ${d_array[@]}

    echo "完成创建$sv_name .."
}





showmenu()
{
    echo '
**********************************
weblogic12c 自动安装工具

(0) 自动安装weblogic12c
(1) 创建domain
(2) 配置nodemanager
(3) 创建app server
(9) Exit
请输入执行步骤:
    '
}


# 主程序部分
while 
    showmenu
    read input 
do
    #statements
    case $input in
        0)
            echo "开始自动安装"
            checkDirs
            createOraInst
            createResponseFile
            instll_wls
            continue
            ;;
        1) 
            echo "创建domain"
            # $wlst_scripts $domain_template $domain_name $domain_dir $weblogic_password
            createDomain
            continue
            ;;
        2)
            echo "配置nodemanager"
            configNodeManger
            continue
             ;;
        3)
            echo "创建app server"
            createServer
            continue
            ;;
        9)
            echo "退出程序"
            exit 0
            ;;
        *)
            echo "其它错误选项,请重新选择"
            continue
            ;;
    esac
done

创建domain的jython文件:
create_domain.py


import os 
import time
import sys
# Create the Domain Dir
# domain_name="fr_domain"
# 传递参数 domain_name
# this file parameter IS passed for A shell ARRAY
domain_name = sys.argv[1]
domain_home = sys.argv[2]
weblogic_password= sys.argv[3]
jar_template = sys.argv[4]
host_ip=sys.argv[5] # added for set adminserver



# domain_dir= "/app/weblogic/Oracle/Middleware/Oracle_Home/user_projects/domains/"+domain_name
# 其实创建目录的时候,可以放到linux shell的部分处理
domain_dir = domain_home + domain_name

print "domain_dir: " + domain_dir

if os.path.exists(domain_dir) == False:
    os.makedirs(domain_dir)

print "### Create " + domain_name + " StartTime : "
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))


#=======================================================================================
# Open a domain template.
#=======================================================================================

#template_name  = "/app/weblogic/Oracle/Middleware/Oracle_Home/wlserver/common/templates/wls/wls.jar"
template_name = jar_template
#template_name  = "/app/weblogic/Oracle/Middleware/Oracle_Home/wlserver/common/templates/wls/wls.jar"
readTemplate(template_name)

#=======================================================================================
# Configure the Administration Server and SSL port.
#
# To enable access by both local and remote processes, you should not set the 
# listen address for the server instance (that is, it should be left blank or not set). 
# In this case, the server instance will determine the address of the machine and 
# listen on it. 
#=======================================================================================

cd('Servers/AdminServer')
set('ListenAddress','')
set('ListenPort', 7001)

# #### we do not enable SSL for AdminServer
#create('AdminServer','SSL')
#cd('SSL/AdminServer')
#set('Enabled', 'True')
#set('ListenPort', 7002)

#=======================================================================================
# Define the user password for weblogic.
#=======================================================================================

cd('/')
cd('Security/base_domain/User/weblogic')
# Please set password here before using this script, e.g. cmo.setPassword('value')
cmo.setPassword(weblogic_password)

# ====================================
# Saved Configuration
setOption('OverwriteDomain', 'true')
writeDomain(domain_dir)
closeTemplate()


# End Time
print "### Create Domain " + domain_name +" End Time:"
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

#=======================================================================================
# Exit WLST.
#=======================================================================================

exit()

配置nodemanager:
configNodeManager.py


import sys
import time
import os

# 获取传递过来的环境变量
machine_name = sys.argv[1]
osuser = sys.argv[2]
osgroup = sys.argv[3]
admin_user=sys.argv[4]
admin_password=sys.argv[5]
admin_url=sys.argv[6]
my_domain=sys.argv[7]
host_ip=sys.argv[8]


def nmRegisterToDomain():
#    connect(admin_user,admin_password,admin_url)
    cd('/')
    nmEnroll(my_domain,my_domain + "nodemanager")


def createMachine():
    cd('/')
    cmo.createUnixMachine(machine_name)
    cd("/Machines/" + machine_name + "/NodeManager/" + machine_name)
    cmo.setNMType('Plain')
    cmo.setListenAddress('localhost')
    cmo.setListenPort(5556)
    cmo.setDebugEnabled(false)

    #绑定machine的用户和用户组
    cd("/Machines/" + machine_name)
    cmo.setPostBindGIDEnabled(true)
    cmo.setPostBindUID(osuser)
    cmo.setPostBindGID(osgroup)
    cmo.setPostBindUIDEnabled(true)


###############
# main 函数执行部分
connect(admin_user,admin_password,'t3://localhost:7001')
cd('/')
edit()
startEdit()
print my_domain
print my_domain + "nodemanager"
nmRegisterToDomain()
#启动nodemanger
# startNodeManager(my_domain + "nodemanager")
createMachine()
activate()


创建server:
createServer.py


import os 
import time
import sys


#####
# 获取参数

sv_name=sys.argv[1]
machine_name=sys.argv[2]
host_ip=sys.argv[3]
port=sys.argv[4]
#mem_args=sys.argv[5]

admin_user=sys.argv[5]
admin_password=sys.argv[6]
admin_url=sys.argv[7]
minHeapSize=sys.argv[8]
maxHeapSize=sys.argv[9]
maxHeapPermSize=sys.argv[10]

print "port: " + port 

print "admin_user: :" + admin_user
print "admin_password: :" + admin_password
print "admin_url: :" + admin_url

def createServer():
    cd('/')
    cmo.createServer(sv_name)
    cd("/Servers/" + sv_name)
    cmo.setListenAddress(host_ip)
    cmo.setListenPort(int(port))
    cmo.setListenPortEnabled(true)
    cmo.setClientCertProxyEnabled(false)
    cmo.setJavaCompiler('javac')
    cmo.setMachine(getMBean("/Machines/" + machine_name))
    cmo.setCluster(None)
    
    cd("/Servers/"+ sv_name + "/SSL/" + sv_name)
    cmo.setEnabled(false)
    
#    cd('/Servers/server1/ServerDiagnosticConfig/server1')
#    cmo.setWLDFDiagnosticVolume('Low')
    
    cd("/Servers/" + sv_name + "/ServerStart/" + sv_name)
    #cmo.setClassPath('-Xms4096m -Xmx4096m -XX:MaxPermSize=256M')
    
    cmo.setClassPath(maxHeapPermSize + " " + maxHeapSize + " " + maxHeapPermSize)


connect(admin_user,admin_password,admin_url)
cd('/')
edit()
startEdit()
createServer()
save()
activate()


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值