2015-11-07 52 views
1

我們的工作框架刪除工作區後Maven的執行是在一種方式,整個項目將被複制(從Perforce公司)到Linux機器(遠程VM機)開發並有執行一個Maven命令運行測試用例。一切都是通過詹金斯驅動的。在Linux機器

執行測試用例後,我使用執行shell發佈Maven構建步驟來刪除工作區。正如預期的那樣,它正在刪除工作區。刪除工作區後我的問題:不知道爲什麼它再次解析POM?儘管測試用例已成功執行,但這會導致作業失敗。

這是我如何配置的刪除工作區:

enter image description here

在正在運行的作業,它刪除預期的工作空間,但是解析POM後刪除。 POM顯然不會在那裏,因爲它刪除了工作區。

INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1:11:26.091s 
[INFO] Finished at: Mon Nov 02 22:50:42 PST 2015 
[INFO] Final Memory: 133M/489M 
[INFO] ------------------------------------------------------------------------ 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
[JENKINS] Archiving disabled 
Waiting for Jenkins to finish collecting data 
channel stopped 
[testjob] $ /bin/sh -xe /tmp/hudson464395510348605766.sh 
+ echo testjob 
testjob 
+ delworkspace=/opt/hudson/workspace/testjob 
+ rm -rf /opt/hudson/workspace/testjob 
ERROR: Failed to parse POMs 
java.io.IOException: java.io.FileNotFoundException: /opt/hudson/workspace/testjob/pom.xml (No such file or directory) 
    at hudson.remoting.FastPipedInputStream.read(FastPipedInputStream.java:169) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Notifying upstream projects of job completion 
Finished: FAILURE 

我錯過配置中的任何東西嗎?我做了所有的家庭作業,但沒有運氣。

+0

詹金斯的哪個版本是這樣的?我不記得在過去三年裏見過**後步驟**部分。我只是將這一部分作爲**構建後操作**而知道。 –

+0

我使用Jenkins 1.610。現在我啓用了「後期構建操作」一節中的「工作區清理插件」。感謝你教我這個。 – Mona

回答

0

我會用Workspace Cleanup Plugin

此插件生成或當構建完成並保存文物之前刪除工作空間。

,而不是通過自己的腳本中刪除工作區。

+0

謝謝@Gerold 我必須在「外部刪除命令」中傳遞什麼命令? 我已經給出了以下命令「sh -c」rm -rf/opt/hudson/workspace/*「」但是沒有成功 – Mona

+0

如果需要我可以共享配置 – Mona

+0

@Mona您不需要_External Deletion Command_用於刪除整個工作區。請參閱_Patterns對要刪除的文件的內嵌幫助:「_默認情況下,整個工作區將被刪除._」 –

1

你可以用Parameterized Trigger Plugin做到這一點很容易。

  • 你應該做的:創建一個新的工作(比如,名爲cleanWS),完成建設時,將觸發cleanWS &刪除你的工作的工作空間瞬間。

  • testjob配置 - >從Build開始選擇Execute shell部分 - >複製粘貼echo delworkspace=/opt/hudson/workspace/$JOB_NAME >> file.properties

  • Post-build Actions部分:

    Add post-build action -> Trigger parameterized build on the projects 
        Projects to build -> <job name e.g. cleanWS> 
        Trigger when build is -> Complete (always trigger) 
        Add Parameters -> Parameters from properties file 
        Use properties from file -> file.properties 
    
  • save

  • 然後去你的cleanWS配置 - >從Build選擇Execute shell部分 - >複製並粘貼rm -rf $delworkspace

N.B.有了這個cleanWS作業,您可以刪除您的所有作業的工作區。