%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E5%80%A4%E3%81%AE%E3%82%AD%E3%83%BC%E3%82%92%E6%B1%BA%E5%AE%9A%E3%81%99%E3%82%8B.png)
私は、bash (シェル) を使用して、いくつかのアプリケーションのデプロイメントおよびデプロイ プロモーション プロセスのスクリプトを作成しています。これらのスクリプトは、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