Nginx自切換upstream腳本,可配合Jenkins實現自動切換部署


沒找到類似解決方案,自己寫了個腳本切換。

#!/bin/bash
#By: 不浮不躁 2021-04-07

#傳參提示
if [ ! -n "$1" ] || [ ! -n "$2" ] || [ ! -n "$3" ] || [ ! -n "$4" ];then
    echo "錯誤:"
    echo "樣例使用:sh $0 "nginx文件絕對路徑" "upstream名字" "server的ip" "起/停" "
    echo "樣例使用:sh $0 "/etc/nginx/conf.d/test.conf" "dapp" "192.168.92.181" "up" "
    exit 1
fi

Conf=$1
Upstream=$2
Ip=$3
Cmd=$4

Tmp=`cat -n $Conf`
#獲取upstream段開頭
Str=`echo "$Tmp" | grep $Upstream |grep upstream` 
#獲取upstream段,”}“結尾
Tmp=`echo "$Tmp" | sed -n "/$Str/,/}/p"`
#echo "$Tmp"
#獲取ip所在行
Line=`echo "$Tmp" | grep $Ip | awk '{print $1}'`
#echo $Line
if [ -z "$Line" ]; then
    echo "未獲取到指定代理IP"
    exit 1
fi

#判斷是否注釋
Status=`echo "$Tmp" | grep $Ip | awk '{print $2}' | grep ^# `
#echo $Status
if [ -z "$Status" ]; then
    Status="未注釋"
    echo $Status
    echo "$Tmp"
    #sed -i "$Line,$Line s/^/#/g" $Conf
else
    Status="已注釋"
    echo $Status
    echo "$Tmp"
fi

#取消注釋
if [ "$Cmd" == "up" ] && [ $Status == "已注釋" ]; then
    sed -i "$Line,$Line s/#//g" $Conf

    Tmp=`cat -n $Conf`
    #獲取upstream段開頭
    Str=`echo "$Tmp" | grep $Upstream |grep upstream`
    #獲取upstream段,”}“結尾
    Tmp=`echo "$Tmp" | sed -n "/$Str/,/}/p"`
    echo "$Tmp"
fi

#注釋
if [ "$Cmd" == "down" ] && [ $Status == "未注釋" ]; then
    sed -i "$Line,$Line s/^/#/g" $Conf
    
    Tmp=`cat -n $Conf`
    #獲取upstream段開頭
    Str=`echo "$Tmp" | grep $Upstream |grep upstream`
    #獲取upstream段,”}“結尾
    Tmp=`echo "$Tmp" | sed -n "/$Str/,/}/p"`
    echo "$Tmp"
fi

使用方式:sh 腳本名 "配置文件絕對路徑" "upstream名" "服務ip" "up或down"
使用方式:sh $0 "/etc/nginx/conf.d/test.conf" "dapp" "192.168.92.181" "up"

可做自動切換部署方案,好用請點贊。轉發需保留出處!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM