现在,我有两套基准,短期基准和长期基准。简短的每个分支都在签入中运行。要运行的设置是一个参数-SHORT或LONG。长的文件总是在dev分支上每晚运行。如果今天成功建立分支,我如何触发其他分支来构建和运行长期基准测试?
答案 0 :(得分:2)
如果您只想在晚上进行长时间的测试-我发现最简单的方法是复制作业并对其进行修改,使其在夜间触发,并在正常作业后添加其他检查,即您提交后的工作只需进行简短测试,每晚触发的工作首先进行简短测试,然后再进行长期测试(如果没有错误)。
我发现,在某些情况下(例如评估一天中的时间以跳过某些测试),链接工作的复杂性要容易得多。
示例1st作业在每次提交后运行
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
}
}
一个解决方案可以将所有工作全部完成,但是它增加了很多复杂性,并使一些后续用例难以集成,例如,集成测试分支的通知不同,构建持续时间的跟踪等。我仍然发现更多可以将其拆分为2个工作。
必须将以下作业配置为由提交后挂钩和一个夜间计时器触发。
时,它将运行长时间测试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'
}
}
答案 1 :(得分:1)
您可以创建另一个管道,该管道使用LONG参数调用参数化管道,例如:
stage('long benchmark') {
build job: 'your-benchmark-pipeline', parameters: [string(name: 'type', value: 'LONG')]
}
在配置此新管道时,您可以在Build after other projects are built
部分的Build Triggers
复选框中打钩,并选择在成功完成测试后应该触发哪些短基准测试(默认行为)。
答案 2 :(得分:0)
短作业成功后,您可以使用Schedule Build Plugin安排长作业的构建。
短作业在每个分支上运行,当某个分支的构建成功时,它将安排带有参数分支的长作业的构建(夜间),因此长作业将在该特定分支上运行。