我有一套完整的單元測試,我希望在Jenkins每天運行一整夜,但前提是我的應用程序已在其他工作中正確構建。隨着提交被添加到應用程序,我不希望單元測試全天觸發。Jenkins:只有在其他工作乾淨的情況下才能運行
我該如何配置?要重申:有兩個詹金斯工作:
A和B:
A上運行的每個簽入,除非B正在運行,在這種情況下,等待B.
乙在午夜運行,一個IFF處於良好狀態。如果A正在運行,B等待A.
我已經將A設置爲「A運行每次檢入」。
我有一套完整的單元測試,我希望在Jenkins每天運行一整夜,但前提是我的應用程序已在其他工作中正確構建。隨着提交被添加到應用程序,我不希望單元測試全天觸發。Jenkins:只有在其他工作乾淨的情況下才能運行
我該如何配置?要重申:有兩個詹金斯工作:
A和B:
A上運行的每個簽入,除非B正在運行,在這種情況下,等待B.
乙在午夜運行,一個IFF處於良好狀態。如果A正在運行,B等待A.
我已經將A設置爲「A運行每次檢入」。
我的頭頂上,我想不出一種方法來做到你想要的。但那可能是因爲它可能不是處理它的最好方法。
在作業A中,除非構建成功,否則應該不會將構件部署/傳遞到B將看的地方。然後B將始終運行從A成功構建。
但是,如果不瞭解您的整個設置或環境,我無法評論什麼是「正確」。但是,也許你需要重新思考這個問題?
您可以在完成作業A時發佈「狀態」。在您的源代碼倉庫或甚至數據庫中說出一個屬性文件。 該值可以是布爾值。如果作業A正在運行,則在作業A成功構建之前,值將爲false。 現在,當作業B被觸發時,首先檢查上述值是否爲真。
似乎沒有插件來支持這一點。只要作業A完成,大部分插件都會觸發作業B(即它會監控作業A的狀態)。
我假設你正在使用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']
}