1、概述
Jenkins 可以對遠程的軟件項目實現集成、部署等。
Jenkins 的遠程的方式有多種,基于現有知識個人總結出兩種,一種是簡易方式,一種是節點方式。
所謂簡易方式,就是不創建節點,基于 Jenkins 自身的 master 節點來進行一些遠程操作。
所謂節點方式,就需要先創建節點,然后使用創建出的專門針對某一服務器主機的節點實現遠程操作。
2、簡易方式
在簡易方式中,為實現一些遠程操作(比如通過 Shell 命令完成遠程部署等),需要進行一些準備工作,比如“基于密鑰對的免密建立連接”。
1、在 Jenkins 中安裝 Publish Over SSH 這個插件并重啟使之生效。
2、在部署了 Jenkins 的主機中生成密鑰對,然后按照【Linux 網絡】【SSH】密鑰對驗證文中的方式,先實現已部署了 Jenkins 的主機與遠程主機之間的成功建立免密 SSH 連接。
3、點擊 Jenkins 主頁(首頁)左側的“系統管理”,再點擊“系統配置”,進入“系統配置”頁面,找到“Publish over SSH”部分:
- 4、填寫“Publish over SSH”這部分內容。
Passphrase
指在 Jenkins 主機使用ssh-keygen
命令生成密鑰對那個時候提示Enter passphrase (empty for no passphrase):
輸入的那個,如果當時沒有的話,就不用填。
Path to key
和Key
,兩者選一。
Path to key
是 Jenkins 所在主機中私鑰的路徑。
Key
是私鑰內容,如果Path to key
和Key
均填寫,則以Key
為準,會忽略掉Path to key
的配置。
- 5、增加“SSH Server”,即配置需要通過 SSH 建立連接的遠程主機信息(可以配置多個遠程主機):
Name
:名稱(自定義)
Hostname
:遠程主機 IP 地址
Username
:登錄遠程主機所使用的用戶名
Remote Directory
:進行文件傳輸時使用的位于遠程服務器的目錄,如果需要向遠程進行文件傳輸,則傳輸的“目的地”就是這里所配置的。
- 6、點擊“TEST CONFIGURATION”,測試配置是否成功。如果成功的話,會顯示“Success”:
7、點擊“保存”或“應用”。
8、創建一個 Item,進入 Item 的配置頁面,“構建”中的“Send files or execute commands over SSH”和“構建后操作”中的“Send build artifacts over SSH”,這兩個選項須建立在“Publish Over SSH”插件和剛才所進行的配置基礎之上才能是可行的:
- 9、舉個例子,“構建”中的“Send files or execute commands over SSH”:
Transfer Set(可以理解成 Send files or execute commands over SSH 構建策略面向一個 SSH Server 的一個策略單元) 的配置項(“構建后操作”中的“Send build artifacts over SSH”也是這樣的配置模式):
Source files
(Source files
和Exec command
至少填其一):從本地(即本例中部署 Jenkins 的主機)需要傳送至 SSH Server 的文件或目錄的路徑。
注意:
1、這個路徑是相對于“工作空間”的路徑。
“工作空間”是指$Jenkins_Home_Path/workspace/$Item_Name
:
Jenkins_Home_Path
是之前提到過的“Jenkins 的安裝路徑”,例如默認是/root/.jenkins
;
Item_Name
就是工程、項目名,例如Test-1
。2、路徑中允許使用適配符以實現多個文件傳輸,但是須符合 Apache Ant 中的標準。
3、如果是多個文件路徑,允許使用
,
分隔。個人目前經驗:將需要傳輸的文件先轉移至工作空間目錄下,然后直接填寫文件名稱即可(這個
Source files
配置項的要求目前本人也就只能理解到這個程度);另外,如果需要傳輸整個目錄,目錄必須以/
結尾。
Remove prefix
(非必填):移除目錄。
舉個例子,假設要將工作空間下一個文件1.sh
上傳,但是這個文件的具體路徑是Workspace_Path/1st/2nd/3rd/1.sh
,所以Source files
配置項填寫1st/2nd/3rd/1.sh
。但上傳后發現,并不是只上傳了1.sh
這一個文件,還將整個上層目錄1st/2nd/3rd/
都傳了過去。但如果不希望將這個目錄上傳,就只傳這個1.sh
的文件,那就可以配置Remove prefix
為1st/2nd/3rd/
,實際上傳的時候就只會上傳1.sh
這個文件。
Remote directory
(非必填):遠程目錄。文件上傳至遠程什么的位置。
注意:
1、This folder will be below the one in the global configuration if present.(這個遠程目錄需建立在之前配置的全局的
Remote directory
之下,全局配置指的就是 Jenkins 主頁(首頁)左側的“系統管理” -> “系統配置” ->Publish Over SSH
插件配置中的Remote Directory
)2、The folder will be created if does not exist
Exec command
(Source files
和Exec command
至少填其一):在遠程執行的命令。
1、This command will be executed on the remote server after any files are transferred.
2、The SSH Transfer Set must include either a Source Files pattern, an Exec command, or both. If both are present, the files are transferred before the command is executed.
If you want to Exec before the files are transferred, use 2 Transfer Sets and move the Exec command before the Transfer set that includes a Source files pattern.3、此處填寫的時候,是需要按照 Shell 腳本的形式編寫。比如
#!/bin/bash
開頭等。
將本地的/root/.jenkins/workspace/Test-1/1st/2nd/3rd/1.sh
上傳至/root/jenkins_over_ssh_1
目錄下,只上傳1.sh
;上傳后給遠程的1.sh
增加x
權限。
全局配置回顧:
項目(任務)構建策略配置:
保存后,立即構建,構建成功后到遠程主機(SSH Server)中驗證: