背景
nginx
在平常的測試工做中,常常會遇到和遠程的服務器進行交互的狀況,例如,小編此次就遇到了須要處理遠程k8s上的日誌文件的狀況。若是每次都須要打開k8s的界面,在命令行裏面執行,操做就會變得很是的繁瑣,也不太方便,因而就來探索一個比較方便的途徑,可以自動化的獲取文件到本地,來方便的在本地自動化處理。docker
準備工做
編程
1. 提取思路ruby
因爲k8s是docker化的部署方式,因此須要使用docker命令來進行日誌文件的導出,主要用到的docker命令以下:服務器
docker ps //列出正在運行的容器docker images //列出鏡像docker cp ${Name}:/container_path local_path //從容器目錄拷貝文件到本地目錄
2. 命令發送方式
微信
看到這裏,你們應該發現,不管是從定位鏡像,仍是拷貝文件,都是分步來執行的,這樣一步步的去操做,這樣離咱們的目標還比較遠,因而須要一個可以按序執行的序列,expect。ssh
2.1 介紹工具
expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通訊。測試
經過expect-send對:expect等待輸出並斷定特定的字符,當字符匹配,則send下一步的操做。spa
在操做時,須要注意一些特殊的字符轉義:
」 對應轉義字符: \\\」[ 對應轉義字符: [} 對應轉義字符: }$ 對應轉義字符: \\\$\ 對應轉義字符: \\\` 對應轉義字符: \
2.2 實現
根據expect的使用方式,首先進行用戶名密碼的自動登陸
set timeout 3600spawn ssh root@$fromIpexpect { "yes/no" { send "yes\r";exp_continue } "password" { send "$fromPwd\r" }}
而後根據每一步的輸出匹配狀況,來匹配執行下一步的命令
例:獲取鏡像expect "#"send "dockerImage=\`docker ps | grep 'container-name' | awk -F' ' '{ print \\\$1 }' | head -n 1\`\r"
拷貝文件expect "#"send "docker cp \\\${dockerImage}:${fromPath} ${localpath}"
而後根據本身的須要,組成相應的腳本執行。
具體實現結果
完成了前面的準備工做以後,即可以編寫本身的自動化處理腳本,方便的將遠端的文件拉取到本地進行自動化處理,從而獲取本身須要的信息。下面是小編的處理結果狀況:
以後即可以丟到本地隨意處理了。
本文分享自微信公衆號 - 搜狗測試(SogouQA)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。