問題描寫敘述
安裝並啟動 jenkins 后,加入了 SVN Publisher 插件,然后在構建任務的“構建后操作”操作中加入了“Publish to Subversion repository”相關的配置。如圖所看到的:
系統環境
操作系統:CentOS 6.5
JDK: 1.6.0_45
Jenkins:1.602
問題分析
由於構建任務的“Console Output”頁面沒有顯示不論什么錯誤信息。所以就查看 jenkins 的日志文件(/var/log/jenkins/jenkins.log)了。在日志文件的末尾處看到了相關的錯誤信息:
Mar 20, 2015 6:28:39 PM com.mtvi.plateng.subversion.SVNForceImport forceImport INFO: null Name SVNForceImport Error: svn: E170001: Authentication required for '<http://svn-server:80> CentOS Code Slave SVN1.7.16 Server' Mar 20, 2015 6:28:40 PM com.mtvi.plateng.subversion.SVNForceImport forceImport SEVERE: *SVNForceImport Error: svn: E170001: Authentication required for '<http://svn-server:80> CentOS Code Slave SVN1.7.16 Server'從上述錯誤信息可得知是由於 SVN 的安全認證失敗了,從而導致文件沒有被正確提交到 SVN。
於是嘗試通過“系統管理”-->“系統設置”。改動 SVN Publisher 插件的全局設置,將 SVN 的username和password給保存上,例如以下圖所看到的:
然后,又一次運行相應的構建任務,發現問題依舊存在,並且日志文件里的錯誤信息也還一模一樣,所以僅僅能繼續尋找其它解決方式。最后最終在 stackoverflow 上找到了相應的解決方式,詳細操作例如以下。
解決方式
1. 改動用戶 jenkins 的默認 shell。將 /etc/passwd 文件里以 jenkins 開頭的那一行末尾處的 /bin/false 改為 /bin/bash,改動后的結果為:
2. 安裝 subversion(假設沒有安裝過的話): # yum install subversion
3. 將 Linux 終端換為 jenkins 用戶: # su - jenkins
4. 刪除 ~/.subversion 文件夾(假設存在的話): $ rm -fr ~/.subversion
5. 運行一下 svn 的 checkout 操作,目的是保存 svn 的username和password: $ svn checkout --username dev-ci(你的 SVN username) http://svn-server/testRepository/trunk/。輸入完password后。會詢問你是否須要保存password。輸入 yes 以保存 SVN password。
至此。全部操作已經完畢。你僅僅需又一次回到 jenkins 的視圖頁面。又一次運行相應的構建任務就可以。本次運行完畢后,“Console Output”頁面的末尾處多輸出了幾條將文件提交到 SVN 的信息:
SVN Publisher: target: /var/lib/jenkins/jobs/my-jenkins-task/workspace/target SVN Publisher: Deleting Remote Item: xxx.jar SVN Publisher: Importing Item: xxx.jar Finished: SUCCESS使用 TortoiseSVN 瀏覽版本號庫,看到確實將相應的 jar 提交上來了:
http://stackoverflow.com/questions/18417597/svn-checkout-not-working-for-jenkins
http://stackoverflow.com/questions/17464993/jenkins-cannot-acces-to-svn-https
