自动打包发布项目脚本(svn)

#!/bin/bash

export work_dir=/home/jenkins/work_dir/uat-coms-123

username=user
password=password
name=xxx-service-
coms_addr="ip1"
api_addr="ip2"
coms_user=root

cd ${work_dir}
function svn_update() {
    for i in $@
        do
            cd ${work_dir}
            if [ -d "$i" ]; then
                cd $i
                local_revision=`/usr/bin/svn info |awk '/版本:/{i++;if(i<2){print $0}else{exit;}}'|cut -d' ' -f2`
                url=`/usr/bin/svn info|grep URL|cut -d' ' -f2`
                svn_revision=`/usr/bin/svn info ${url} |awk '/版本:/{i++;if(i<2){print $0}else{exit;}}'|cut -d' ' -f2`
                if [ $local_revision -lt $svn_revision ];then
                    commit_people=`svn info ${url} |grep "最后修改的作者"|cut -d' ' -f2`
                    commit_time=`svn info ${url} |grep "最后修改的时间"`
                    echo "$i项目版本库有提交,现在开始更新本地库"
                    echo "$i项目最后提交项目工作人员为: $commit_people"
                    echo "$i项目${commit_time}"
                    /usr/bin/svn up
                    if [ $? -eq 0 ];then 
                        echo "更新成功"
                        return 0
                    else 
                        echo "更新失败"
                        return 1
                    fi
                else
                    echo "本地已经是最新版本"
                    return 2
                fi
            else
                echo "该项目在服务器上不存在,将首次拉取代码"
                /usr/bin/svn --username $username --password $password co https://qf-dekins-05.quark.com/svn/coms/trunk/coms-common-parent/$i 
                cd ${work_dir}
                return 3
            fi
        done
}

function mvn_common_install() {
    for p in $@
        do
            svn_update $p
            if [ $? -eq 0 -o $? -eq 3 ];then     
                cd ${work_dir}/$p 
                echo "开始编译$p"
                /data/maven-3.3.9/bin/mvn clean install -Denv=uat deploy
                if [ $? -eq 0 ];then
                    echo "编译成功"
                    cd ${work_dir}
                fi
            fi
        done
}        

function mvn_service_install() {
    for p in $@
        do
            cd ${work_dir}
            svn_update $p
            if [ $? -eq 0 -o $? -eq 3 ];then     
                cd ${work_dir}/$p 
                echo "开始编译$p"
                /data/maven-3.3.9/bin/mvn clean install -Denv=uat
                if [ $? -eq 0 ];then
                    echo "编译成功"
                fi
            fi
        done
}

function pack_common() {
    mvn_common_install 公共包1 公共包2 公共包3...
}

function pack_service() {
    mvn_service_install $1
}

function help_usage() {
 cat <<EOF       
       1:包名1 2:包名2 3:包名3
    4:包名4 5:包名5
EOF 
}

function transfer_coms_consumer() {
    consumer_path="/path"
    scp -r ${work_dir}/$1/target/{$1.jar,lib} comsadmin@${coms_addr}:${consumer_path}/$1
    if [ $? -eq 0 ];then
        echo "代码发布成功"
        return 10
    else
        return 11
    fi
}

function transfer_coms_service() {
    service_path="/path"
    service_jar_name=`echo $1 |cut -d'-' -f3`
    scp -r ${work_dir}/$1/target/{$1.jar,lib} comsadmin@${coms_addr}:${consumer_path}/${service_jar_name}
    if [ $? -eq 0 ];then
        echo "代码发布成功"
        return 10
    else
        return 11
    fi    
}

function transfer_coms_bkend() {
    bkend_path="path"
    scp -r ${work_dir}/$1/target/{$1.jar,lib} apiadmin@${api_addr}:${bkend_path}
    if [ $? -eq 0 ];then
        echo "代码发布成功"
        return 10
    else
        return 11
    fi
}

function restart_coms() {
    ssh comsadmin@${coms_addr} '/home/comsadmin/service.sh $1'
}

while true
    do
        help_usage
        declare -A dict
        dict=([1]="包名1" [2]="包名2" [3]="包名3" [4]="包名4" [5]="包名5")
        consumer_64=(包名1 包名2 包名3)
        service_64=(包名4 包名5)
        read -p "请输入需要更新的应用名称前面的ID号>:" program_id
        count=0
        for key in $(echo ${!dict[*]})
            do 
                if [ "${program_id}" -eq $key ];then
                    program_name=`echo ${dict[$key]}`
                    if [[ "${consumer_64[@]}" =~ ${program_name} ]];then
                        echo "开始更新${program_name}项目"
                        if [ $count -eq 0 ];then
                            pack_common
                        fi
                        pack_service ${program_name}
                        sleep 2
                        echo "开始${program_name}发布代码"
                        transfer_coms_consumer ${program_name}
                        if [ $? -eq 10 ];then
                            echo "代码更新完成,即将重启"
                            restart_coms ${program_name}
                        else
                            echo "代码更新失败,请检查原因"
                        fi
                        let count+=1
                    elif [[ "${service_64[@]}" =~ ${program_name} ]];then
                        echo "开始更新${program_name}项目"
                        if [ $count -eq 0 ];then
                            pack_common
                        fi
                        pack_service ${program_name}
                        transfer_coms_service ${program_name}
                        if [ $? -eq 10 ];then
                            echo "代码更新完成,等待重启"
                            restart_coms ${program_name}
                        else
                            echo "代码更新失败,请检查原因"
                        fi                        
                        let count+=1
                    else
                        echo "开始更新${program_name}项目"
                        if [ $count -eq 0 ];then
                            pack_common
                        fi
                        pack_service ${program_name}
                        transfer_coms_bkend ${program_name}
                        if [ $? -eq 10 ];then
                            echo "代码更新完成,等待重启"
                            ssh apiadmin@${api_addr} '/home/apiadmin/coms/consumer/coms-consumer-bkend/startBkend.sh'
                        else
                            echo "代码更新失败,请检查原因"
                        fi                        
                        let count+=1
                    fi
                fi
            done
    done     

猜你喜欢

转载自www.cnblogs.com/qinghe123/p/8990282.html
今日推荐