2014-09-22 115 views
1

這是一個在Jenkins上運行的maven構建版本。本帖末尾列出的版本號。當我在generate-test-resources階段出現錯誤時,我試圖找出如何中止我的構建。Jenkins和Maven,在生成測試資源期間放棄構建失敗構建

要求:在maven的generate-test-resources階段,我有在遠程服務器(iSeries)上運行的進程。從這些調用中,我檢索一個成功標誌(true或false)。當我弄錯時,我想將整個構建標記爲BUILD FAILURE,並放棄構建。

我在generate-test-resources中運行的代碼是用Java編寫的,但它將作業提交給iSeries,並且真正的工作是在那些提交的作業中完成的。

理性:我的主要目的是構建它來執行JUnit測試用例。 generate-test-resources階段調用進程來初始化測試環境。如果生成測試資源階段不是100%成功,測試可能會通過,但這些結果將是無效的。

此外,當生成測試資源有問題但所有測試用例都通過時,Jenkins會報告BUILD SUCCESS。很奇怪。

例如:這是我的日誌中的一個例子。我知道我對MY_BUILD_COMMAND的調用正確回撥到服務器,並且大部分時間都是成功的。但是當出現錯誤時,我需要將其陷入困境。請注意,我有在狀態

23:11:33.982 INFO BuildTestEnvironment | -- Begin BuildTestEnvironment --------------------- 
23:11:35.224 INFO BuildTestEnvironment | Connected to VQ_INSCI10 as VQCINSCI10 
23:11:35.292 INFO qcmdExc | CALL QCMDEXC('MY_BUILD_COMMAND', 16) 
23:11:35.621 FATAL qcmdExc | [CPF0006] Errors occurred in command. 
java.sql.SQLException: [CPF0006] Errors occurred in command. 
    at com.ibm.as400.access.JDError.throwSQLException(JDError.java:646) 
    at com.ibm.as400.access.JDError.throwSQLException(JDError.java:617) 
    at com.ibm.as400.access.AS400JDBCStatement.commonPrepare(AS400JDBCStatement.java:1401) 
    at com.ibm.as400.access.AS400JDBCStatement.execute(AS400JDBCStatement.java:1755) 
    at main.java._tools.QcmdExc.run(QcmdExc.java:33) 
    at main.java._tools.BuildTestEnvironment.main(BuildTestEnvironment.java:45) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293) 
    at java.lang.Thread.run(Thread.java:744) 
23:11:35.624 INFO BuildTestEnvironment | success? = false 

,然後在日誌的末尾 「成功=假?」:

[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ VSP_UnitTest --- 
[INFO] Installing /root/.jenkins/workspace/VSP_v10_Continuous/target/VSP_UnitTest-1.0-SNAPSHOT.jar to /root/.m2/repository/VSP_UnitTest/VSP_UnitTest/1.0-SNAPSHOT/VSP_UnitTest-1.0-SNAPSHOT.jar 
[INFO] Installing /root/.jenkins/workspace/VSP_v10_Continuous/pom.xml to /root/.m2/repository/VSP_UnitTest/VSP_UnitTest/1.0-SNAPSHOT/VSP_UnitTest-1.0-SNAPSHOT.pom 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1:09:12.515s 
[INFO] Finished at: Mon Sep 22 00:20:38 EDT 2014 
[INFO] Final Memory: 28M/393M 
[INFO] ------------------------------------------------------------------------ 
Waiting for Jenkins to finish collecting data 
[JENKINS] Archiving /root/.jenkins/workspace/VSP_v10_Continuous/pom.xml to VSP_UnitTest/VSP_UnitTest/1.0-SNAPSHOT/VSP_UnitTest-1.0-SNAPSHOT.pom 
[JENKINS] Archiving /root/.jenkins/workspace/VSP_v10_Continuous/target/VSP_UnitTest-1.0-SNAPSHOT.jar to VSP_UnitTest/VSP_UnitTest/1.0-SNAPSHOT/VSP_UnitTest-1.0-SNAPSHOT.jar 
channel stopped 
Email was triggered for: Always 
Sending email for trigger: Always 
Sending email to: [email protected] 
Finished: UNSTABLE 

版本中使用:

  • maven- complier-plugin = 2.3.2
  • exec-maven-plugin = 1.3
  • Jen親愛的1.539
  • JUnit的4.11

回答

1

這位經理 - Maven的插件EXEC目標有successCodes元素。通常在Unix系統上,成功運行的命令返回0.我想知道測試設置返回的false是否被解釋爲0,這表示成功就插件而言。嘗試將<successCodes>1</successCodes>添加到插件配置中,並查看是否導致構建失敗。

+0

感謝您的信息。我的java根本沒有返回任何代碼,所以我會認爲這被認爲是成功= 0。我添加了System.exit(i),並且測試出來沒問題。詹金斯今晚會嘗試這個,我會讓你知道它是如何發生的。 – bobanahalf 2014-09-22 20:12:41

+0

好的。結果是,如果我返回任何退出代碼,Maven就會保釋。所以當我真的有錯誤時,我將它設置爲System.exit()。似乎工作正常。 – bobanahalf 2014-09-23 11:49:49