問題描述
安裝並啓動 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 的用戶名和密碼給保存上,如下圖所示:然後,重新執行對應的構建任務,發現問題依然存在,而且日誌文件中的錯誤信息也還一模一樣,所以只能繼續尋找其他解決方案。最後終於在 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 的用戶名和密碼: $ svn checkout --username dev-ci(你的 SVN 用戶名) http://svn-server/testRepository/trunk/,輸入完密碼後,會詢問你是否需要保存密碼,輸入 yes 以保存 SVN 密碼。
至此,所有操作已經完成。你只需重新回到 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