之前公司用jekins來進行自動化發布,現在公司因沒有運維,所以自己學習、並搭建了一個jenkins的環境來進行項目自動化部署。
不料在最后連接ssh后部署時,一直提示Transferred 0 file(s),個人理解為:傳輸文件為0。
現附上自己的問題描述和解決方法:
安裝插件
系統管理→管理插件→可選插件→Artifact Uploaders→Publish Over SSH 安裝即可。
配置遠程服務器

如圖所示是jenkins上的ssh插件的公有配置部分,下面詳細講解下(其實比較簡單,但是自己遇坑了也就記錄一下)
Passphrase:如果自己在本地生成的ssh key沒密碼的話,這里不需要填寫
Path to key:這里填寫私鑰的地址
key:這里填寫私鑰的內容(cat ~/.ssh/id_rsa查看)
Name:這里自己填寫一個好記的名字
Hostname:主機ip或者域名
Username:登錄機器的用戶名
Remote Directory:遠程的操作目錄(這個需要自己的對應的服務器上創建好目錄,並且登錄名對應的用戶需要有相應的權限)
******注意:這種利用私鑰訪問的辦法需要事先將你的公鑰放置到對應服務器的~/.ssh/authorized_keys中(一般 利用ssh-copy-id 命令免密登錄)*****
以上登錄方式不推薦,點擊“Use password authentication, or use a different key”,利用私有配置登錄才是我們推薦的
Passphrase / Password:這里填寫username登錄名對應的密碼(其他的配置這里就不敘述了,看字段名應該就能明白)
一般填寫密碼就能登錄了,點擊Test configuration,出現Success表示連接成功;但有時候會報如下錯:
Failed to connect or change directory
[java.net.ConnectException: Connection refused: connect]]
這是由於服務器上的sshd服務沒有開啟導致的,登錄到服務器上執行命令
sudo service sshd start //開啟sshd服務
或者是如下錯誤
jenkins.plugins.publish_over.BapPublisherException: Failed to connect session for config [131]. Message [Auth fail]
這是由於賬號密碼不一致導致的,自行核查下賬號密碼.或者采用在私有配置中利用私鑰來進行登錄(這種方式參考上面的配置,在path to key 和key中填好相應的內容)
配置參數
在project中配置參數

保存后點擊立即構建。在日志中出現如下的文字
SSH: EXEC: completed after 400 ms SSH: Disconnecting configuration [8樓centos7-test] ... SSH: Transferred 0 file(s) Build step 'Send files or execute commands over SSH' changed build result to SUCCESS Finished: SUCCESS
去遠程服務器的目錄下查看文件,也未能找到。
說明文件發送失敗。
當然已經提示傳輸0個文件,在系統配置時點擊test如果成功的話那就是目錄的問題。
查詢了一些文檔明白了具體的意思
- Source files
**/*表示sskzmz這個job的工作目錄下所有的文件和目錄。 - Remove prefix 該操作是針對上面的source files目錄,會移除匹配的目錄。通常留空。
- Remote directory 該操作是基於設定的服務器目錄進行。這里我的服務器配置是的/www. 因此這里應該寫sites/sskzmz即可。
- Exec command 遠程服務器執行的命令。例如可以輸出 service nginx restart 或者/www/xx. sh 均可。
- 高級:
- Exclude files:排除的文件(在你傳輸目錄的時候很有用,使用通配符,例如:/.log,/.tmp,.Git/)
- Pattern separator:分隔符(配置Transfer Set Source files的分隔符。如果你這兒更改了,上面的內容也需要更改)
- No default excludes:禁止默認的排除規則(具體的自己看幫助)
- Make empty dirs:此選項會更改插件的默認行為。默認行為是匹配該文件是否存在,如果存在則創建目錄存放。選中此選項會直接創建一個目錄存放文件,即使是空目錄。(個人理解)
- Remote directory is a date format:遠程目錄建立帶日期的文件夾(需要在Remote directory中配置日期格式)
- Flatten files:只上傳文件,不創建目錄(除了遠程目錄)
- Exec timeout (ms):運行腳步的超時時間(毫秒)
- Exec in pty:模擬一個終端執行腳步
- Add Transfer Set:增加一個配置
在jenkins中publish over SSH plugin插件的文檔中說到Source files只寫目錄名稱會自動添加/**,功能是匹配目標目錄下的所有文件;
不過我試了試好像不大管用,不知道是版本原因還什么。
參考鏈接:
https://www.jianshu.com/p/7c961fd5975c
