用指令碼快速對比兩個環境執行的映象版本 expect

2021-10-08 15:09:15 字數 1607 閱讀 1434

需求:開發使用dev環境,每隔一段時間截乙個版本,發布到sit,將近20個docker,每次都需要乙個乙個地核對映象版本,哪些需要更新哪些沒有更新等。

要想縮減重複勞動,唯有指令碼走起

平時的步驟就是,先到dev,擷取此時正在執行的docker映象,然後儲存為乙個檔案,再到sit,獲取映象,儲存為乙個檔案,再兩個檔案對比,顯示出不同。

更好的做法是不同的就更新,這個後續完善。

#!/bin/bash

password="***"

remotehost=xx

localhost=yy

remotehostname=zz

#################### 在bash指令碼中執行expect指令碼

/usr/bin/expect << eof

############### ssh遠端到dev環境,使用expect來輸入密碼

spawn ssh ttebdadmin@$remotehost

expect

"*password"

}####################匹配到dev的名稱後,將此時執行的docker儲存到乙個檔案

expect "$remotehostname*"

send " sudo docker ps | sort >image-dev \r"

expect "*password"

send "$password\r"

##################再次匹配到主機名後,將檔案傳送到sit

expect "$remotehostname*"

send "scp image-dev ttebdadmin@$localhost:~\r"

expect

"*password"

}set timeout 1

expect eof

eof#######################結束expect,回到bash

######################只提取映象版本,這是因為在expect中執行awk ''報錯,所以放在bash指令碼中執行

echo " ---------begin diff sit to dev-----"

cat /home/ttebdadmin/image-dev | awk ''| sort > image-dev

##########################將sit的映象版本儲存為乙個檔案,對比兩個環境的映象版本

docker ps | awk ''| sort > image-sit

diff -y image-sit image-dev

將上列指令碼儲存為diffdevsitimage1.sh,注意###部分需要刪除,然後還需要給與執行許可權chmod +x diffdevsitimage1.sh結果

這樣我就能快速得知兩個環境的版本的區別了,新加了什麼映象,哪些映象有更新等。

參考文章:

expect 詳解:

兩個問題的對比

問題1 cf390c 給定若干行聊天記錄 發言人 話 有些聊天記錄的 發言人 是缺失的,已知相鄰對話發言人一定不同,且每個發言人說的話裡都不會包含自己的名字,現給定可能的發言人的集合,請填充每個對話的發言人.來自codeforces round 390 問題2 lc36 給定乙個9 9的矩陣,有些元...

用EXCEPT對比兩個表的資料用還是UNION

問題描述 今天是新系統上線之後第一次跑資料,需要和老系統跑出來的表做對比。完全一樣則專案執行ok,新系統在時間上減少了人工干預,提高了80個百分點。先用老系統跑一次資料,匯入到乙個備份表。再用新系統跑一次,數量和備份表裡面的一樣。心裡坦蕩了一點。再比較裡面每一行資料是否一樣的時候,先是用了如下方式 ...

今天用批處理指令碼遇到的兩個問題

一 設定當前命令列路徑問題 pushd dp0 windows下批處理檔案直接開啟時當前命令列路徑就是當前目錄,而右鍵用管理員許可權開啟時命令列預設路徑時system32,此時要獲取當前批處理檔案的路徑需要使用 dp0,幾個常用的目錄路徑如下 當前碟符 d0 當前路徑 cd 當前執行命令列 0 當前...