Linux使用shell指令碼實現目錄建立與檔案傳輸

2021-10-12 12:26:47 字數 1902 閱讀 3788

在舊版本中,生成的sonarpdf檔案直接儲存在了跑在同一臺主機的tomcat上,只需要在shell指令碼中cp一下就ok了。但是, 新版本jenkins與minio檔案伺服器不在同一臺主機上。所以需要想辦法把jenkins主機上生成的pdf檔案上傳至minio。

每乙個應用對應乙個pipeline,每次執行當前應用的pipeline都會生成乙個新的版本,每個版本都會生成乙個sonarpdf檔案。但是當前應用的pipeline和sonar中的專案是一一對應的關係,也就是說每次sonar掃瞄後都會覆蓋jenkins上生成的pdf檔案,所以需要每次生成後利用我們自定義的規則分別儲存再minio伺服器上。

如果我在devops開發系統伺服器上寫**,讀取jenkins伺服器上某目錄下的pdf檔案為inputstream,然後再呼叫miniosdk上傳至minio。 就會變成 jenkins -> devops -> minio,怎麼感覺都覺得不合理。所以經過思考,決定再jenkins伺服器執行pipeline時執行到sonar.sh指令碼中的生成pdf檔案成功後,在指令碼中追加一段上傳minio伺服器的**。

隨之而來的問題。上傳至minio伺服器的指令碼應該怎麼寫?翻遍文件資料,只發現了minio提供的sdk,並沒有發現有shell上傳的文件。

最終,經過仔細研究,發現minio的有乙個data的目錄,只要把檔案放入到這個資料夾中,就會顯示出bucket和對應的檔案。那麼,如何利用shell指令碼在jinkens伺服器遠端動態生成目錄?建立完目錄後又如何把pdf傳遞至minio伺服器?

minio官方文件:

使用ssh-keygen命令在本地機器上使用ssh-keygen產生公鑰私鑰對。

$ ssh-keygen
用ssh-copy-id將公鑰複製到遠端機器中

$  ssh-copy-id -i .ssh/id_rsa.pub  使用者名字@192.168.x.***
登入到遠端機器不用輸入密碼

$  ssh 使用者名字@192.168.x.***

last login: sun nov 16 17:22:33 2008 from 192.168.1.2

參考資料:

這樣無需密碼就可以登入到遠端伺服器了,在寫shell指令碼的時候可以少寫幾行**。

yum  install expect
什麼是expect?

在實際工作中,我們執行命令、指令碼或程式時,這些命令、指令碼或程式都需要從終端輸入某些繼續執行的指令,而這些輸入都需要人為的手工進行。而利用expect,則可以根據程式的提示,模擬標準輸入提供給程式,從而實現自動化互動執行。這就是expect!!!

參考:建立乙個指令碼

$ vim create_dir.sh
#!/usr/bin/expect -f

set user [lindex $ar** 0]

set url [lindex $ar** 1]

setdir

[lindex $ar** 2]

spawn ssh

$@$expect

"100%"

send "mkdir -p /data/minio/data/$/ \r"

expect

"eof"

其中變數user為目標主機的使用者,url為ip,dir為要動態建立的目錄。

$ vim send.sh
#!/bin/sh

user=

$1url=

$2dir=

$3echo$$"

$$echo

因為我把兩個指令碼的內容寫在一起時總是執行失敗,因此我分成了兩個指令碼執行竟然成功了。

linux中的shell 指令碼函式的簡單實現

1 函式就是具備某一功能的工具 2 為什麼要用函式 1 程式的組織結構不清晰,可讀性差 2 冗餘 3 可擴充套件性差 3 如何用函式 函式的使用必須遵循的原則 先定義,後呼叫 修理工事先準備工具的過程即函式的定義 修理工遇到應用場景拿來工具就用即函式的呼叫 一 如何使用 例1 bin bash fu...

linux中的shell 指令碼函式的簡單實現

1 函式就是具備某一功能的工具 2 為什麼要用函式 1 程式的組織結構不清晰,可讀性差 2 冗餘 3 可擴充套件性差 3 如何用函式 函式的使用必須遵循的原則 先定義,後呼叫 修理工事先準備工具的過程即函式的定義 修理工遇到應用場景拿來工具就用即函式的呼叫 一 如何使用 例1 bin bash fu...

linux各種shell特色指令碼使用

目錄 1 gdb斷點資訊收集自動化 2 objdump檢視過大可執行檔案上的指定函式彙編 3 定製 linux 協議棧引數 修改 etc sysctl.conf 鑑於在故障現場使用gdb跟蹤,設定斷點,列印斷點處資訊存在一定的時間差,且有造成單板重啟或影響業務等問題,採用指令碼實現自動化操作。指令碼...