shell 可配置的自动发布脚本

#! /bin/bash
########修改配置文件的位置#########
configName=/home/g/opt/sh/config 
################################

show(){
    echo "-----------------------------------------------------"
    projectCount=$(cat $configName | jq ".projects | length")
    echo 项目数量: $projectCount
    index=0
    while test $index -lt $projectCount
    do
        thisIndex=$(cat $configName | jq ".projects[$index].index")
        thisName=$(cat $configName | jq ".projects[$index].describe")
        echo "$thisIndex    $thisName"
        index=`expr $index + 1`
    done

}


printWithTime(){
    echo -e "\033[35m$(date +"%Y-%m-%d %H:%M:%S") $1 \033[0m"
}

while test  "1"  =  "1"
do
        show
        option=0
        read -p  " 请选择:" option
        describe=$(cat $configName | jq ".projects[`expr $option - 1`].describe")
        printWithTime $describe
        path=$(cat $configName | jq ".projects[`expr $option - 1`].localPath")
        real=$(echo $path|sed 's/\"//g')
        printWithTime 路径$real
        cd $real
        buildScript=$(cat $configName | jq ".projects[`expr $option - 1`].buildScript" | sed 's/\"//g')
        printWithTime "开始编译$buildScript"
        $buildScript
        printWithTime "编译完成"
        server=$(cat $configName | jq ".projects[`expr $option - 1`].server" | sed 's/\"//g')
        targetPath=$(cat $configName | jq ".projects[`expr $option - 1`].targetPath" | sed 's/\"//g')
        printWithTime "服务器地址$server:$targetPath"
        output=$(cat $configName | jq ".projects[`expr $option - 1`].output" | sed 's/\"//g')
        printWithTime "删除旧文件"
        ssh $server "cd $targetPath && rm -r $output"
        printWithTime "上传新文件"
        scp -r   $output  $server:$targetPath        
        printWithTime "上传成功"
        notify-send -t 10000 上传成功 
        
done

只需要修改代码最上面的config文件的位置后配置config文件就可以自动上传发布文件了。没时间整理代码 可能不使用一般情况,可能要根据自己的情况稍微修改一下。配置文件的格式如下

{
    "projects":[
        {
                "index" : "1",
                "name" : "iot-io",
                "server":"[email protected]",
                "localPath" : "/home/g/src/iot/io/launcher/api-cs/",
                "targetPath" : "/home/wa/iot/io/",
                "buildScript" : "go build -tags 'jsoniter'",
                "output" : "api-cs",
                "describe" : "15服务器 物联网io模块"
         }]}

其中server是你服务器的登录名和ip,localPath是本地项目家目录,targetPath是服务器上存放代码的目录,buildScript是编译语句,output 是要上传的文件,describe是给用户看的描述。

猜你喜欢

转载自blog.csdn.net/qq_21852449/article/details/93480137