我有一套完整的单元测试,我希望在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']
}