现在,我有两套基准,一个是短的,一个是长的。每一根树枝都有一个短的签入表。哪个设置为运行是一个参数-短还是长。长的总是每晚在开发分支上运行。如果分支今天已经成功构建,那么如何触发其他分支来构建和运行长基准呢?
发布于 2019-06-10 19:28:19
如果您只想在夜间运行这些长测试--我发现最简单的方法是复制作业并修改它,以便在夜间触发它,并且在正常作业之后添加额外的检查,即您的后提交作业只执行短期测试,夜间触发的任务先做短测试,然后(如果没有错误)执行长任务。
我发现在某些条件下,链接作业的复杂性增加了,比如评估一天中跳过一些测试的时间,这样就更容易处理了。
在每次提交之后运行的第一个作业
node() {
stage('Build') {
// Build
}
stage('Short Test') {
// Short Test
}
}每晚触发的第二项任务
node() {
stage('Build') {
// Build
}
stage('Short Test') {
// Short Test, fail the build here when not successful
}
stage('Long Tests')
// Long Test, runs only when short test successful
}
}编辑
一种解决方案,在一个单一的工作,然而,它增加了许多复杂性,并使一些后续用例更难集成,即不同的通知集成测试分支,跟踪构建持续时间等。我仍然认为它更易于管理,将它分成两个作业。
下面的作业必须配置为由post、commit、钩子、和触发,这是一个夜间计时器。它运行长时间测试
def runLongTestMaxDiffMillis = 20000
def lastRunDiff = (currentBuild.getStartTimeInMillis().toInteger() - currentBuild.getPreviousBuild().getStartTimeInMillis().toInteger())
def lastBuildTooOld = (lastRunDiff > runLongTestMaxDiffMillis)
def isTriggeredByTimer = currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause')
def lastBuildSuccessful = (currentBuild.getPreviousBuild().getResult() == 'SUCCESS')
def runLongTest = (!lastBuildTooOld && isTriggeredByTimer && lastBuildSuccessful)
node() {
if (runLongTest) {
println 'Running long test'
} else {
println 'Skipping long test'
}
}发布于 2019-06-10 13:58:26
您可以创建另一个用长参数调用参数化管道的管道,例如:
stage('long benchmark') {
build job: 'your-benchmark-pipeline', parameters: [string(name: 'type', value: 'LONG')]
}当您配置这个新管道时,您可以在Build after other projects are built部分中勾选Build Triggers复选框,并选择在成功完成(默认行为)后应该触发哪些短基准测试。
发布于 2019-06-12 08:04:23
当短作业成功时,您可以使用计划构建插件来安排长作业的生成。
短作业在每个分支上运行,当某个分支的构建成功时,它会调度一个包含分支参数的长作业的生成(在夜间),因此长作业将在这个特定的分支上运行。
https://stackoverflow.com/questions/56451453
复制相似问题