記一次shell指令碼讀取config.ini檔案進行docker部署出現的換行符問題
阿新 • • 發佈:2020-12-27
技術標籤:JavaLinuxdockerlinuxshelljava
場景
之前公司一直使用jenkins做持續整合,發現有時候遇到jenkins伺服器維護或公司網路掛了後,都沒法進行打包部署,故又寫了一套指令碼來實現自動化部署。指令碼寫完後的一直可以穩定執行,這次閒下來了準備給指令碼來個升級改造,修改完指令碼後(主要將公共配置檔案放到config.ini),發現指令碼啟動部署後服務起不來,nacos也無法註冊上。
定位分析
- 排除伺服器問題,容器網路問題;
- 讀取config.ini指令碼問題。
首先排除容器網路問題,因為這個是在進行docker部署中經常遇到的問題,查看了伺服器防火牆(關閉狀態),docker inspect 檢視容器資訊,網路也沒發現啥問題(註冊的同一網路), 容器間網路也是通的。
不是容器網路問題的話,換了臺服務使用相同指令碼重新部署發現還是一樣問題。
繼續定位指令碼問題,之前做過測試是可以讀取到config.ini中的資料的,認為問題應該不大,所以這塊的問題我是放到後面來分析的。
config.ini
[ZNVINFO]
V_DOCKER_HOST=10.72.77.130
V_NACOS_NAMESPACE=29380aa3-0adc-4083-ada4-4553ff611632
V_GANGES_KAFKA=10.72.77.137
V_WEB_VERSION=130
ZNVINFO=$(dirname $0)/config.ini
function __readINI() {
local file=$1;local sec=$2;local key=$3;
awk -F "[=]+" '/^\[[\t]*'$sec'[ \t]*\]/{a=1}a==1&&$1~/^[ \t]*'$key'[ \t]*/{gsub(/[\t]+/,"",$2);print $2;exit}' $file
return $?;
}
nacosNamespace=($(__readINI ${ZNVINFO} ZNVINFO V_NACOS_NAMESPACE))
dockerHost=($(__readINI ${ZNVINFO} ZNVINFO V_DOCKER_HOST) )
通過echo發現獲取到的dockerHost和nacosNamespace都是沒問題的,這就有點懵逼了。
問題解決
仔細檢視docker inspect後發現了點貓膩
怎麼還帶了個換行符,考慮到應該是config.ini檔案格式問題,set ff檢視發現果然格式是dos,set ff=unix修改完格式後重新執行指令碼。發現問題解決了
服務也成功註冊nacos。