%20%E7%A2%BA%E5%AE%9A%E6%AA%94%E6%A1%88%E4%B8%AD%E5%80%BC%E7%9A%84%E9%8D%B5.png)
我正在使用 bash(shell)編寫一些應用程式部署和部署升級流程的腳本。這些腳本被編寫為故障保護,以防我們的 CI 平台再次發生故障(就像最近發生的那樣)。
在此過程中,每個應用程式都有一個帶有鍵值對的文字文件,其中鍵是部署區域的名稱(dev、qa、prod)......而值是與可部署文件關聯的哈希值。
我正在努力確定如何最好地識別密鑰,而不是僅僅通過獲取文件來收集價值……但是獲取文件,然後手動比較每個部署區域的值似乎必須是一個漫長的過程。
回顧 1. 我有值 (sha1sum),但我需要它所屬的密鑰 2. 從文件中確定鍵值對中的密鑰 3. 確定具有關聯值的最高部署區域(即:多個區域可能列出相同的值,隨著我們爬上鏈條,可能性會增加。
有什麼建議麼?
編輯1 這是所需程式碼所在的位置:
###################################################################################################
# IS THIS HASH CURRENTLY DEPLOYED SOMEWHERE ELSE? IF SO, WHERE?
###################################################################################################
grep "${deployHash}" "${deployHashHome}/${deployAppName}/${deployAppName}.manifest"
if [[ "$?" -eq 0 ]]
then
source ${deployHashHome}/${deployAppName}/${deployAppName}.manifest
previousDeployRegion=""
# logThis is a custom logging function which formats logs exactly how we want, we have a Splunk parser for the format
logThis "${scriptLogDir}/${deployLogFile}" "The hash: ${deployHash}, has been previously deployed to ${previousDeployRegion}." "INFO"
fi
鍵值檔如下所示:
mylocal=ca9c244aa1b40f39fd06318f2be9fbc1a82c5c5c
dev=986b747d846555f8c5e393a5cfbbd061ee9d68a7
int=53b8fa87f2241a17623ead2f94032b1d2045069e
reg=53b8fa87f2241a17623ead2f94032b1d2045069e
stage=
prod=
dr=
編輯2 在範例鍵值檔案中新增了額外的範例 sha1sum 值,以顯示多個鍵如何存在相同的值。
答案1
實際上,我希望看到一些可以處理的文件範例,但程式碼本身增強了我的假設。
hash="blablabla"
awk -F' *= *' -v hash="$hash" '$2 == hash { print $1 }' your.manifest | sort ...
這裡我們只是將雜湊傳遞給 awk 並要求它以等號分割行。如果符號後面的值是哈希值,我們會印出符號之前的值,最好是區域。然後,您可以根據需要對這些值進行排序,也可以不進行排序。
如果我們想查看哈希的所有鍵,我們可以使用:
awk -F' *= *' -v hash="$hash" '$2 == hash { keys=(keys ? keys "," $1 : $1)}; END { print keys}' your.manifest
如果只有檔案中哈希的最後一個鍵是有趣的,那麼此程式碼獲勝:
awk -F' *= *' -v hash="$hash" '$2 == hash { key=$1}; END { print key}' your.manifest