Description :
安裝 git plugin 之後, 建立專案->組態->原始碼管理 -> Git -> Repository URL 並設定以下內容

ssh://username@xxx.xxx.xxx.xxx:port/absolute_path.git

 
Error :
此 error message 出現在 Repository URL下方

Failed to connect to repository : Command "/usr/bin/git -c core.askpass=true ls-remote -h ssh://username@xxx.xxx.xxx.xxx:port/absolute_path.git HEAD" returned status code 128:
stdout:
stderr: Permission denied (publickey).
fatal: The remote end hung up unexpectedly

 
Solution :
Step 1.
首先讓另一台主機(s2)使用ssh成功登入到jenkins主機上,並在jenkins主機的~/.ssh/authorized_keys 加入s2的id_rsa.pub
 
Step 2.
複製s2的id_rsa檔案貼到jenkins主機的家目錄任意資料夾中(e.g. /home/username/server/id_rsa_files/id_rsa )此rsa檔案將被使用在Step 3.
 
Step 3.
在jenkins主機安裝 Credentials plugin 並使用 Credentials plugin 建立一個 Credentials 內容如下
Kind : SSH Username with private key,
Scope : Global
Username : (任意)
Description :  (任意)
Private key :  From a file on Jenkins master (選擇Step 2.複製到jenkins主機上的s2 id_rsa檔(/home/username/server/id_rsa_files/id_rsa))
 
Step 4.
在原始碼管理 -> Git -> Repository URL 下方的 Credentials 內容設定為Step 3. 新增的Credentials
 
Step 5.
編輯 /etc/ssh/sshd_config 加入新的port e.g.

# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
Port 23
...

Port 23 即是新的Port,會使用在ssh://username@xxx.xxx.xxx.xxx:port/absolute_path.git 的 port
 
Step 6.
將Step 5.新增的Port number 設定到Repository URL中

ssh://username@xxx.xxx.xxx.xxx:23/absolute_path.git

完成後Error訊息就會消失
 
 
Note :
1.Permission denied的原因有很多, 首先從git repo建立者和jenkins使用者關係找起, 將2者config設定一致, 也在jenkins使用者中加入ssh public key, 無效
2.設定jenkins->設定系統-> Git plugin -> Global Config user.name Value 和 Global Config user.email Value 設定與git repo建立者相同, 無效
3.使用Credentials plugin建立jenkins主機的credential(類似Step 3. 但其中的Private key設定為jenkins本機的id_rsa)並設定在 原始碼管理 -> Git -> Repository URL 中 也是無效
4.在Repository URL的Port Number設定也有關係, 若不依照 Step 5.建立新Port, Permission denied還是無解