2017-10-20 67 views
0

我有一套完整的單元測試,我希望在Jenkins每天運行一整夜,但前提是我的應用程序已在其他工作中正確構建。隨着提交被添加到應用程序,我不希望單元測試全天觸發。Jenkins:只有在其他工作乾淨的情況下才能運行

我該如何配置?要重申:有兩個詹金斯工作:

A和B:

A上運行的每個簽入,除非B正在運行,在這種情況下,等待B.

乙在午夜運行,一個IFF處於良好狀態。如果A正在運行,B等待A.

我已經將A設置爲「A運行每次檢入」。

回答

1

我的頭頂上,我想不出一種方法來做到你想要的。但那可能是因爲它可能不是處理它的最好方法。

在作業A中,除非構建成功,否則應該不會將構件部署/傳遞到B將看的地方。然後B將始終運行從A成功構建。

但是,如果不瞭解您的整個設置或環境,我無法評論什麼是「正確」。但是,也許你需要重新思考這個問題?

1

您可以在完成作業A時發佈「狀態」。在您的源代碼倉庫或甚至數據庫中說出一個屬性文件。 該值可以是布爾值。如果作業A正在運行,則在作業A成功構建之前,值將爲false。 現在,當作業B被觸發時,首先檢查上述值是否爲真。

似乎沒有插件來支持這一點。只要作業A完成,大部分插件都會觸發作業B(即它會監控作業A的狀態)。

1

我假設你正在使用Jenkins管道。可能有很多方法,但我會通過在作業B中添加新階段來解決這個問題,作爲檢查作業A的狀態和檢查狀態的效用函數的第一步。

stage('check Job A status'){ 

     // If A is running, B waits for A. 

     if(checkStatus() == "RUNNING"){ 
      timeout(time: 60, unit: 'MINUTES') { 
      waitUntil { 
       def status = checkStatus() 
       return (status == "SUCCESS" || status == "FAILURE" || status == "UNSTABLE" || status == "ABORTED") 
      } 
     } 
     } 

     // Proceed with B, only when A is in a good state 

     if(checkStatus() != "SUCCESS"){ 
      error('Stopping Job B becuase job A is not successful.') 
     } 
} 


def checkStatus() { 
     def statusUrl = httpRequest "https://jenkins.example.com/job/${job-A-Name}/lastBuild/api/json" 
     def statusJson = new JsonSlurper().parseText(statusUrl.getContent()) 

     return statusJson['result']  

} 
相關問題