You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by al...@apache.org on 2020/08/11 18:00:31 UTC

[beam] branch master updated: Extending archiveJunit post-commit task with stability history

This is an automated email from the ASF dual-hosted git repository.

altay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 1356698  Extending archiveJunit post-commit task with stability history
     new 7f1c12a  Merge pull request #12528 from damgad/damgad_test_stability_monitoring
1356698 is described below

commit 1356698f315ddf75fa276c89bf19cb5de5482519
Author: Damian Gadomski <da...@polidea.com>
AuthorDate: Tue Aug 11 11:45:51 2020 +0200

    Extending archiveJunit post-commit task with stability history
---
 .test-infra/jenkins/CommonJobProperties.groovy                    | 8 ++++++++
 .test-infra/jenkins/job_PerformanceTests_BigQueryIO_Java.groovy   | 2 +-
 .test-infra/jenkins/job_PerformanceTests_Python.groovy            | 2 +-
 .test-infra/jenkins/job_PerformanceTests_SQLIO_Java.groovy        | 2 +-
 .../job_PostCommit_CrossLanguageValidatesRunner_Direct.groovy     | 2 +-
 .../job_PostCommit_CrossLanguageValidatesRunner_Flink.groovy      | 2 +-
 .../job_PostCommit_CrossLanguageValidatesRunner_Spark.groovy      | 2 +-
 .test-infra/jenkins/job_PostCommit_Java.groovy                    | 2 +-
 .../jenkins/job_PostCommit_Java_Dataflow_Examples_Java11.groovy   | 2 +-
 ...job_PostCommit_Java_PortableValidatesRunner_Flink_Batch.groovy | 2 +-
 ...PostCommit_Java_PortableValidatesRunner_Flink_Streaming.groovy | 2 +-
 ...job_PostCommit_Java_PortableValidatesRunner_Spark_Batch.groovy | 2 +-
 .../jenkins/job_PostCommit_Java_ValidatesRunner_Dataflow.groovy   | 2 +-
 .../job_PostCommit_Java_ValidatesRunner_Dataflow_Java11.groovy    | 2 +-
 .../jenkins/job_PostCommit_Java_ValidatesRunner_Direct.groovy     | 2 +-
 .../job_PostCommit_Java_ValidatesRunner_Direct_Java11.groovy      | 2 +-
 .../jenkins/job_PostCommit_Java_ValidatesRunner_Flink.groovy      | 2 +-
 .../job_PostCommit_Java_ValidatesRunner_Flink_Java11.groovy       | 2 +-
 .../jenkins/job_PostCommit_Java_ValidatesRunner_Samza.groovy      | 2 +-
 .../jenkins/job_PostCommit_Java_ValidatesRunner_Spark.groovy      | 2 +-
 ...ostCommit_Java_ValidatesRunner_SparkStructuredStreaming.groovy | 2 +-
 .../jenkins/job_PostCommit_Java_ValidatesRunner_Twister2.groovy   | 2 +-
 .test-infra/jenkins/job_PostCommit_Python2.groovy                 | 2 +-
 .test-infra/jenkins/job_PostCommit_Python35.groovy                | 2 +-
 .test-infra/jenkins/job_PostCommit_Python36.groovy                | 2 +-
 .test-infra/jenkins/job_PostCommit_Python37.groovy                | 2 +-
 .test-infra/jenkins/job_PostCommit_Python38.groovy                | 2 +-
 .../job_PostCommit_Python_ValidatesContainer_Dataflow.groovy      | 2 +-
 .../jenkins/job_PostCommit_Python_ValidatesRunner_Dataflow.groovy | 2 +-
 .../job_PostCommit_Python_ValidatesRunner_Dataflow_V2.groovy      | 2 +-
 .test-infra/jenkins/job_PostCommit_SQL.groovy                     | 2 +-
 .test-infra/jenkins/job_PreCommit_Java.groovy                     | 3 ++-
 .test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow.groovy   | 3 ++-
 .../jenkins/job_PreCommit_Java_Examples_Dataflow_Java11.groovy    | 2 +-
 .test-infra/jenkins/job_PreCommit_Java_PortabilityApi.groovy      | 3 ++-
 .../jenkins/job_PreCommit_Java_PortabilityApi_Java11.groovy       | 2 +-
 .test-infra/jenkins/job_PreCommit_Python.groovy                   | 3 ++-
 .test-infra/jenkins/job_PreCommit_SQL.groovy                      | 3 ++-
 .test-infra/jenkins/job_PreCommit_SQL_Java11.groovy               | 2 +-
 .test-infra/jenkins/job_sonarqube_report.groovy                   | 2 +-
 40 files changed, 52 insertions(+), 39 deletions(-)

diff --git a/.test-infra/jenkins/CommonJobProperties.groovy b/.test-infra/jenkins/CommonJobProperties.groovy
index 248f812..d11d8cc 100644
--- a/.test-infra/jenkins/CommonJobProperties.groovy
+++ b/.test-infra/jenkins/CommonJobProperties.groovy
@@ -201,6 +201,14 @@ class CommonJobProperties {
     }
   }
 
+  static void setArchiveJunitWithStabilityHistory(context, String glob) {
+    context.archiveJunit(glob) {
+      testDataPublishers {
+        publishTestStabilityData()
+      }
+    }
+  }
+
   // Sets common config for jobs which run on a schedule; optionally on push
   static void setAutoJob(context,
       String buildSchedule = '0 */6 * * *',
diff --git a/.test-infra/jenkins/job_PerformanceTests_BigQueryIO_Java.groovy b/.test-infra/jenkins/job_PerformanceTests_BigQueryIO_Java.groovy
index 0787c4c..f0d5573 100644
--- a/.test-infra/jenkins/job_PerformanceTests_BigQueryIO_Java.groovy
+++ b/.test-infra/jenkins/job_PerformanceTests_BigQueryIO_Java.groovy
@@ -121,7 +121,7 @@ private void createPostCommitJob(jobConfig) {
     common.enablePhraseTriggeringFromPullRequest(delegate, jobConfig.title, jobConfig.triggerPhrase)
     common.setAutoJob(delegate, 'H */6 * * *')
     publishers {
-      archiveJunit('**/build/test-results/**/*.xml')
+      common.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
     }
     InfluxDBCredentialsHelper.useCredentials(delegate)
     additionalPipelineArgs = [
diff --git a/.test-infra/jenkins/job_PerformanceTests_Python.groovy b/.test-infra/jenkins/job_PerformanceTests_Python.groovy
index 94b7b00..58ea2c5 100644
--- a/.test-infra/jenkins/job_PerformanceTests_Python.groovy
+++ b/.test-infra/jenkins/job_PerformanceTests_Python.groovy
@@ -81,7 +81,7 @@ private void createPythonPerformanceTestJob(Map testConfig) {
         )
 
     publishers {
-      archiveJunit('**/nosetests*.xml')
+      commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/nosetests*.xml')
     }
 
     steps {
diff --git a/.test-infra/jenkins/job_PerformanceTests_SQLIO_Java.groovy b/.test-infra/jenkins/job_PerformanceTests_SQLIO_Java.groovy
index 2207c46..2c09ca2 100644
--- a/.test-infra/jenkins/job_PerformanceTests_SQLIO_Java.groovy
+++ b/.test-infra/jenkins/job_PerformanceTests_SQLIO_Java.groovy
@@ -46,7 +46,7 @@ private void createPostCommitJob(jobConfig) {
     common.enablePhraseTriggeringFromPullRequest(delegate, jobConfig.title, jobConfig.triggerPhrase)
     common.setAutoJob(delegate, 'H */6 * * *')
     publishers {
-      archiveJunit('**/build/test-results/**/*.xml')
+      common.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
     }
 
     steps {
diff --git a/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Direct.groovy b/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Direct.groovy
index bc5bdac..6078ea8 100644
--- a/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Direct.groovy
+++ b/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Direct.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_XVR_Direct',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Flink.groovy b/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Flink.groovy
index 8d663bf..e4fbbd7 100644
--- a/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Flink.groovy
+++ b/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Flink.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_XVR_Flink',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Spark.groovy b/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Spark.groovy
index 89f5333..8276789 100644
--- a/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Spark.groovy
+++ b/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Spark.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_XVR_Spark',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java.groovy b/.test-infra/jenkins/job_PostCommit_Java.groovy
index cb3e093..7b38de9 100644
--- a/.test-infra/jenkins/job_PostCommit_Java.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java.groovy
@@ -33,7 +33,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java', 'Run Java PostCommit'
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java_Dataflow_Examples_Java11.groovy b/.test-infra/jenkins/job_PostCommit_Java_Dataflow_Examples_Java11.groovy
index 7e1f383..3fa2e7a 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_Dataflow_Examples_Java11.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_Dataflow_Examples_Java11.groovy
@@ -27,7 +27,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_Examples_Dataflow_Java1
       commonJobProperties.setTopLevelMainJobProperties(delegate, 'master', 180)
 
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       steps {
diff --git a/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Flink_Batch.groovy b/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Flink_Batch.groovy
index 8e62f8e..df59899 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Flink_Batch.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Flink_Batch.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_PVR_Flink_Batch',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Flink_Streaming.groovy b/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Flink_Streaming.groovy
index 1476bc8..c8d9343 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Flink_Streaming.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Flink_Streaming.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_PVR_Flink_Streaming',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Spark_Batch.groovy b/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Spark_Batch.groovy
index 2297402..4c07b99 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Spark_Batch.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_PortableValidatesRunner_Spark_Batch.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_PVR_Spark_Batch',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Dataflow.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Dataflow.groovy
index 5feeb11..8a6b076 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Dataflow.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Dataflow.groovy
@@ -32,7 +32,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_Dataflo
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Dataflow_Java11.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Dataflow_Java11.groovy
index af9e25e..9cc836f 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Dataflow_Java11.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Dataflow_Java11.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_Dataflo
 
       commonJobProperties.setTopLevelMainJobProperties(delegate, 'master', 270)
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       steps {
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Direct.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Direct.groovy
index 1317339..95a217d 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Direct.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Direct.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_Direct'
       commonJobProperties.setTopLevelMainJobProperties(delegate, 'master', 180)
 
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       steps {
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Direct_Java11.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Direct_Java11.groovy
index ee9a99d..d775815 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Direct_Java11.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Direct_Java11.groovy
@@ -32,7 +32,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_Direct_
       commonJobProperties.setTopLevelMainJobProperties(delegate, 'master', 180)
 
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       steps {
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Flink.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Flink.groovy
index 37cc9ec..70f3acc 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Flink.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Flink.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_Flink',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Flink_Java11.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Flink_Java11.groovy
index 02e70a9..3ebc191 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Flink_Java11.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Flink_Java11.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_Flink_J
 
       commonJobProperties.setTopLevelMainJobProperties(delegate, 'master', 270)
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       steps {
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Samza.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Samza.groovy
index 44231c2..f51efeb 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Samza.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Samza.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_Samza',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Spark.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Spark.groovy
index 21bd71a..45fbc9d 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Spark.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Spark.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_Spark',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_SparkStructuredStreaming.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_SparkStructuredStreaming.groovy
index d20b548..3f15ecd9 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_SparkStructuredStreaming.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_SparkStructuredStreaming.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_SparkSt
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Twister2.groovy b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Twister2.groovy
index fa33ded..9fc28b9 100644
--- a/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Twister2.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Java_ValidatesRunner_Twister2.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Java_ValidatesRunner_Twister
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PostCommit_Python2.groovy b/.test-infra/jenkins/job_PostCommit_Python2.groovy
index c91efdb..1308184 100644
--- a/.test-infra/jenkins/job_PostCommit_Python2.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Python2.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Python2', 'Run Python 2 Post
       commonJobProperties.setTopLevelMainJobProperties(delegate)
 
       publishers {
-        archiveJunit('**/nosetests*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/nosetests*.xml')
       }
 
       // Execute shell command to test Python SDK.
diff --git a/.test-infra/jenkins/job_PostCommit_Python35.groovy b/.test-infra/jenkins/job_PostCommit_Python35.groovy
index 9a54d39..e5e79dd 100644
--- a/.test-infra/jenkins/job_PostCommit_Python35.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Python35.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Python35', 'Run Python 3.5 P
       commonJobProperties.setTopLevelMainJobProperties(delegate)
 
       publishers {
-        archiveJunit('**/nosetests*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/nosetests*.xml')
       }
 
       // Execute shell command to test Python SDK.
diff --git a/.test-infra/jenkins/job_PostCommit_Python36.groovy b/.test-infra/jenkins/job_PostCommit_Python36.groovy
index 1a37518..4bd701d 100644
--- a/.test-infra/jenkins/job_PostCommit_Python36.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Python36.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Python36', 'Run Python 3.6 P
       commonJobProperties.setTopLevelMainJobProperties(delegate)
 
       publishers {
-        archiveJunit('**/nosetests*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/nosetests*.xml')
       }
 
       // Execute shell command to test Python SDK.
diff --git a/.test-infra/jenkins/job_PostCommit_Python37.groovy b/.test-infra/jenkins/job_PostCommit_Python37.groovy
index ed0edbe..55bed2f 100644
--- a/.test-infra/jenkins/job_PostCommit_Python37.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Python37.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Python37', 'Run Python 3.7 P
       commonJobProperties.setTopLevelMainJobProperties(delegate, 'master', 100)
 
       publishers {
-        archiveJunit('**/nosetests*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/nosetests*.xml')
       }
 
       // Execute shell command to test Python SDK.
diff --git a/.test-infra/jenkins/job_PostCommit_Python38.groovy b/.test-infra/jenkins/job_PostCommit_Python38.groovy
index 85c0ee8..53657f8 100644
--- a/.test-infra/jenkins/job_PostCommit_Python38.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Python38.groovy
@@ -30,7 +30,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Python38', 'Run Python 3.8 P
       commonJobProperties.setTopLevelMainJobProperties(delegate, 'master', 100)
 
       publishers {
-        archiveJunit('**/nosetests*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/nosetests*.xml')
       }
 
       // Execute shell command to test Python SDK.
diff --git a/.test-infra/jenkins/job_PostCommit_Python_ValidatesContainer_Dataflow.groovy b/.test-infra/jenkins/job_PostCommit_Python_ValidatesContainer_Dataflow.groovy
index fc73267..00f6cb9 100644
--- a/.test-infra/jenkins/job_PostCommit_Python_ValidatesContainer_Dataflow.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Python_ValidatesContainer_Dataflow.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Py_ValCont',
       commonJobProperties.setTopLevelMainJobProperties(delegate)
 
       publishers {
-        archiveJunit('**/nosetests*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/nosetests*.xml')
       }
 
       // Execute shell command to test Python SDK.
diff --git a/.test-infra/jenkins/job_PostCommit_Python_ValidatesRunner_Dataflow.groovy b/.test-infra/jenkins/job_PostCommit_Python_ValidatesRunner_Dataflow.groovy
index d3885d8..7926837 100644
--- a/.test-infra/jenkins/job_PostCommit_Python_ValidatesRunner_Dataflow.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Python_ValidatesRunner_Dataflow.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Py_VR_Dataflow', 'Run Python
       commonJobProperties.setTopLevelMainJobProperties(delegate)
 
       publishers {
-        archiveJunit('**/nosetests*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/nosetests*.xml')
       }
 
       // Execute gradle task to test Python SDK.
diff --git a/.test-infra/jenkins/job_PostCommit_Python_ValidatesRunner_Dataflow_V2.groovy b/.test-infra/jenkins/job_PostCommit_Python_ValidatesRunner_Dataflow_V2.groovy
index ba256b4..3f6aa72 100644
--- a/.test-infra/jenkins/job_PostCommit_Python_ValidatesRunner_Dataflow_V2.groovy
+++ b/.test-infra/jenkins/job_PostCommit_Python_ValidatesRunner_Dataflow_V2.groovy
@@ -29,7 +29,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_Py_VR_Dataflow_V2', 'Run Pyt
       commonJobProperties.setTopLevelMainJobProperties(delegate)
 
       publishers {
-        archiveJunit('**/nosetests*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/nosetests*.xml')
       }
 
       // Execute gradle task to test Python SDK.
diff --git a/.test-infra/jenkins/job_PostCommit_SQL.groovy b/.test-infra/jenkins/job_PostCommit_SQL.groovy
index 9207cdb..69a88b9 100644
--- a/.test-infra/jenkins/job_PostCommit_SQL.groovy
+++ b/.test-infra/jenkins/job_PostCommit_SQL.groovy
@@ -31,7 +31,7 @@ PostcommitJobBuilder.postCommitJob('beam_PostCommit_SQL', 'Run SQL PostCommit',
 
       // Publish all test results to Jenkins
       publishers {
-        archiveJunit('**/build/test-results/**/*.xml')
+        commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
       }
 
       // Gradle goals for this job.
diff --git a/.test-infra/jenkins/job_PreCommit_Java.groovy b/.test-infra/jenkins/job_PreCommit_Java.groovy
index a2382b2..cffe310 100644
--- a/.test-infra/jenkins/job_PreCommit_Java.groovy
+++ b/.test-infra/jenkins/job_PreCommit_Java.groovy
@@ -17,6 +17,7 @@
  */
 
 import PrecommitJobBuilder
+import CommonJobProperties as common
 
 PrecommitJobBuilder builder = new PrecommitJobBuilder(
     scope: this,
@@ -39,7 +40,7 @@ PrecommitJobBuilder builder = new PrecommitJobBuilder(
     )
 builder.build {
   publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
+    common.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
     recordIssues {
       tools {
         errorProne()
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow.groovy b/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow.groovy
index 88b8384..96a54a0 100644
--- a/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow.groovy
+++ b/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow.groovy
@@ -17,6 +17,7 @@
  */
 
 import PrecommitJobBuilder
+import CommonJobProperties as common
 
 PrecommitJobBuilder builder = new PrecommitJobBuilder(
     scope: this,
@@ -37,6 +38,6 @@ PrecommitJobBuilder builder = new PrecommitJobBuilder(
     )
 builder.build {
   publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
+    common.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
   }
 }
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow_Java11.groovy b/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow_Java11.groovy
index ed6ecff..dc8295c 100644
--- a/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow_Java11.groovy
+++ b/.test-infra/jenkins/job_PreCommit_Java_Examples_Dataflow_Java11.groovy
@@ -39,7 +39,7 @@ PrecommitJobBuilder builder = new PrecommitJobBuilder(
     )
 builder.build {
   publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
+    properties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
   }
 
   steps {
diff --git a/.test-infra/jenkins/job_PreCommit_Java_PortabilityApi.groovy b/.test-infra/jenkins/job_PreCommit_Java_PortabilityApi.groovy
index df5d9ed..cdbfece 100644
--- a/.test-infra/jenkins/job_PreCommit_Java_PortabilityApi.groovy
+++ b/.test-infra/jenkins/job_PreCommit_Java_PortabilityApi.groovy
@@ -17,6 +17,7 @@
  */
 
 import PrecommitJobBuilder
+import CommonJobProperties as common
 
 PrecommitJobBuilder builder = new PrecommitJobBuilder(
     scope: this,
@@ -36,6 +37,6 @@ PrecommitJobBuilder builder = new PrecommitJobBuilder(
     )
 builder.build {
   publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
+    common.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
   }
 }
diff --git a/.test-infra/jenkins/job_PreCommit_Java_PortabilityApi_Java11.groovy b/.test-infra/jenkins/job_PreCommit_Java_PortabilityApi_Java11.groovy
index 9251ea3..8fa8bff 100644
--- a/.test-infra/jenkins/job_PreCommit_Java_PortabilityApi_Java11.groovy
+++ b/.test-infra/jenkins/job_PreCommit_Java_PortabilityApi_Java11.groovy
@@ -38,7 +38,7 @@ PrecommitJobBuilder builder = new PrecommitJobBuilder(
     )
 builder.build {
   publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
+    properties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
   }
 
   steps {
diff --git a/.test-infra/jenkins/job_PreCommit_Python.groovy b/.test-infra/jenkins/job_PreCommit_Python.groovy
index 0b5270f..4804c10 100644
--- a/.test-infra/jenkins/job_PreCommit_Python.groovy
+++ b/.test-infra/jenkins/job_PreCommit_Python.groovy
@@ -17,6 +17,7 @@
  */
 
 import PrecommitJobBuilder
+import CommonJobProperties as common
 
 PrecommitJobBuilder builder = new PrecommitJobBuilder(
     scope: this,
@@ -32,6 +33,6 @@ PrecommitJobBuilder builder = new PrecommitJobBuilder(
 builder.build {
   // Publish all test results to Jenkins.
   publishers {
-    archiveJunit('**/pytest*.xml')
+    common.setArchiveJunitWithStabilityHistory(delegate, '**/pytest*.xml')
   }
 }
diff --git a/.test-infra/jenkins/job_PreCommit_SQL.groovy b/.test-infra/jenkins/job_PreCommit_SQL.groovy
index 8330e3e..4b15405 100644
--- a/.test-infra/jenkins/job_PreCommit_SQL.groovy
+++ b/.test-infra/jenkins/job_PreCommit_SQL.groovy
@@ -17,6 +17,7 @@
  */
 
 import PrecommitJobBuilder
+import CommonJobProperties as common
 
 PrecommitJobBuilder builder = new PrecommitJobBuilder(
     scope: this,
@@ -31,7 +32,7 @@ PrecommitJobBuilder builder = new PrecommitJobBuilder(
     )
 builder.build {
   publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
+    common.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
     recordIssues {
       tools {
         errorProne()
diff --git a/.test-infra/jenkins/job_PreCommit_SQL_Java11.groovy b/.test-infra/jenkins/job_PreCommit_SQL_Java11.groovy
index 1dabf4e..9253049 100644
--- a/.test-infra/jenkins/job_PreCommit_SQL_Java11.groovy
+++ b/.test-infra/jenkins/job_PreCommit_SQL_Java11.groovy
@@ -37,7 +37,7 @@ PrecommitJobBuilder builder = new PrecommitJobBuilder(
     )
 builder.build {
   publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
+    properties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
     recordIssues {
       tools {
         errorProne()
diff --git a/.test-infra/jenkins/job_sonarqube_report.groovy b/.test-infra/jenkins/job_sonarqube_report.groovy
index afec031..323ffea 100644
--- a/.test-infra/jenkins/job_sonarqube_report.groovy
+++ b/.test-infra/jenkins/job_sonarqube_report.groovy
@@ -34,7 +34,7 @@ job('beam_sonarqube_report') {
   commonJobProperties.setAutoJob delegate
 
   publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
+    commonJobProperties.setArchiveJunitWithStabilityHistory(delegate, '**/build/test-results/**/*.xml')
   }
 
   steps {