Jenkins(二): Jenkins 之 Shell+Publish Over SSH


 

 

 


一、SSH命令批量操作Linux服務器

Xshell、FinalShell
手動登錄服務器,敲部署命令進行部署
多台部署得 一 一 登錄,因此若台數少可用ssh命令。若多的話,還是建議使用ansible等批量執行工具。

 

SSH管理
通常,第一次從本機連接遠程主機登錄時,需要輸入yes,

#vim /etc/ssh/ssh_config
StrictHostKeyChecking no(該參數取消第一次連接時的的"yes/no"驗證)

修改后,立即生效,不必重啟sshd服務。

若每次登錄都需要輸入密碼,可采用密鑰的方式批量管理服務器,實現腳本批量部署

Linux密鑰生成
公鑰: 相當於鎖
私鑰: 相當於鑰匙,防止丟失

 

SSH命令生成公鑰私鑰,並傳輸
①Linux使用命令生成公私鑰:

指定生成"rsa"類型的秘鑰,默認存放目錄為當前用戶的"家目錄/.ssh/"目錄下。
#ssh-keygen -t rsa

回車確認后,在下列提示信息中,有這兩行,表示公鑰,私鑰的存放位置:

  Your identification has been saved in /root/.ssh/id_rsa.
  Your public key has been saved in /root/.ssh/id_rsa.pub.

 

②使用工具將公鑰傳輸到指定機器上

#ssh-copy-id -i /root/.ssh/id_rsa.pub  用戶@IP
  -i:指定公鑰
輸入遠程主機用戶密碼,下發公鑰

例:

[root@centos7-3 opt]# ssh-copy-id root@192.168.24.122
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.24.122's password:

 
         

Number of key(s) added: 1

 
         

Now try logging into the machine, with: "ssh 'root@192.168.24.122'"
and check to make sure that only the key(s) you wanted were added.

 

 

SSH命令操作服務器
ssh登錄服務器 -> 執行Shell命令 -> 執行完退出

[root@centos7-3 opt]# ssh 192.168.24.122 "echo this is $HOSTNAME"
this is centos7-3
#######上條命令知,命令行的變量是從centos7-3本機獲取的,而不是獲取對應的遠程主機變量########

  [root@centos7-3 opt]# ssh 192.168.24.122 "cat /home/gaokai/centos7-2.txt"
  centos7-2 ip 192.168.24.122

 

 

Shell批量部署示例

ssh命令連接遠程主機時,若不輸入用戶,默認為root用戶。

for ip in $(cat /root/sjghost);do
echo $ip
ssh ${ip} "echo deploying"
done

 

Shell批量下發部署腳本、部署包等

#/root/iphost文件中記錄的是IP地址,每一行一個IP地址。

for
ip in $(cat /root/iphost);do echo $ip scp -r /tmp/test.log ${ip}:/usr/local/src/ done

 

Shell批量拉取文件等

for ip in $(cat /root/iphost);do
echo $ip
scp root@${ip}:/usr/local/src/sjg.log /tmp/test.log.${ip}
echo "$ip傳輸完成"
done

 

 


 

二、ssh公鑰批量下發

 

#ssh-copy-id 下發公鑰
#ssh-copy-id -i /root/.ssh/id_rsa.pub 127.0.0.1

 

需要手動輸入密碼,服務器數量多的話,不可能光重復敲該命令,必須借用腳本。

sshpass命令可實現自動輸入密碼

#yum install sshpass -y
#sshpass -p "xxx" ssh-copy-id -i /root/.ssh/id_rsa.pub 用戶@IP地址(用戶若為root,可不寫)

其中"xxx"為sshpass使用的密碼,該密碼為用戶密碼。

 

編寫腳本實現公鑰批量下發:

#vim /root/iphost.sh
  #IP、root密碼
  192.168.24.122 roottoor

批量下發公鑰實現腳本/root/deployrsa.sh
IFSBAK=$IFS
IFS=$'\n'
for line in $(cat /root/iphost);do
myip=$(echo "$line" | awk '{print $1}')
mypwd=$(echo "$line" | awk '{print $2}')
sshpass -p "$mypwd" ssh-copy-id -i /root/.ssh/id_rsa.pub $myip
done
IFS=$IFSBAK

 


三、Jenkins運行Shell命令

 

Jenkins學習流程,按順序來
  第一步.操作本機Shell命令。
  第二步.通過ssh操作服務器。
  第三步.通過ansible批量操作服務器。

 

使用Jenkins操作本機Shell命令
1.Dashboard欄選擇"新建視圖"

 

 

2.創建視圖(自己創建視圖名稱[testShell],並選擇Type(List View)),點擊確定。

 

 

3.Dashboard欄選擇"新建Item",即創建任務。任務名"gk_testShell",自由風格的項目(Freestyle project),選擇OK(並畫√)。

 

 


4.之后在跳出的頁面下,選擇構建,增加構建步驟,選擇執行shell命令
然后填寫要執行的shell命令。
然后點擊保存。

 

里面也可以放腳本執行 ,對應的iphost文件是已經存放在linux對應的目錄下。如圖:

 

 

 

 5.然后在Dashboard欄,點擊立即構建。

 

 6.可以通過構建歷史(Build History)選擇,查看執行是否成功,並查看執行結果。

如圖,"x"為執行失敗,"√"為執行成功:

 

 查看執行成功的:然后選擇控制台輸出:

若選擇"文本方式查看",則會單獨列出一頁來展示輸出內容。

 

 


 

四、Jenkins通過shell管理服務器

工具:publish over ssh
  ①通過ssh部署Linux類服務器。
  ②可跟git或svn結合,直接拉取版本控制里的代碼進行部署。對於php、python類的部署非常有用。

 

開始部署SSH管理服務器:

⑴部署前需要先添加ssh服務器
  Dashboard欄下"系統管理" -> 系統設置 -> 添加SSH服務器(最下面Puhlish over ssh欄"SSH Servers",新增)

 

 

   點擊系統配置后,在新出的頁面拉到最下面,看到"Publish over SSH",填寫"Path to key = /root/.ssh/id_rsa",配置私鑰的路徑。

 

 

   然后在下面的"SSH Servers"欄配置,該SSH Server欄,對應的是公鑰所在的服務器。

 

 

 

⑵Jenkins創建部署項目

配置好SSH服務器后,就可以在"我的視圖"中,選擇新建任務

 

 

新建任務"ssh_remote",選擇自由風格,然后確定。

 

然后跳到"ssh_remote"任務的配置頁面,選擇"構建"欄,增加構建步驟 ,選擇"Send files or execute commands over SSH"選項,然后選擇指定的SSH服務器(這里就有個缺點:SSH構建需要一台一台的構建,即若需要對100台進行操作,則需要配置100台,量多時工作繁瑣)。

 

 點擊應用后,保存。然后"立即構建",看是否能執行成功。

 

 執行成功。

 

Jenkins創建任務時,通過復制的方法

補充:在新建任務時,也可以選擇復制任務,之后再自己進行局部修改。

 

 

 

Publish Over Ssh部署的優點缺點


服務器數量少的,使用ssh管理方便
對於服務器數量過多時,配置繁瑣: 添加ssh服務器繁瑣,添加項目指定服務器繁瑣

 


 

另外安全注意
Jenkins由於有直接管理服務器的權限,所以Jenkins網頁一定要IP白名單、密碼復雜度要高
Jenkins的權限要正確配置

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM