2017-10-20 34 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']  

} 
相关问题